有錯歡迎糾正補充担败,愛你的任三爺。
1.什么是sqoop?
Sqoop是一個轉換工具兑宇,用于在關系型數據庫與HDFS之間進行數據轉換则北。就是把MySQL之類的關系型數據庫的數據類型就漾,通過工具轉換并傳輸到hdfs中呐能,這不重要,會用就行抑堡。
2.環(huán)境搭建摆出,如何安裝?
1.安裝)我使用的版本是sqoop-1.4.3.bin__hadoop-1.0.0.tar.gz首妖,打算安裝在/usr/local目錄下偎漫。
首先就是解壓縮,重命名為sqoop有缆,然后在文件/etc/profile(~/.bashrc)中設置環(huán)境變量SQOOP_HOME象踊。把mysql的jdbc驅動mysql-connector-java-5.1.10.jar復制到sqoop項目的lib目錄下。
2.重命名配置文件
在${SQOOP_HOME}/conf中執(zhí)行命令
mv??sqoop-env-template.sh??sqoop-env.sh
在conf目錄下棚壁,有兩個文件sqoop-site.xml和sqoop-site-template.xml內容是完全一樣的杯矩,不必在意,我們只關心sqoop-site.xml即可袖外。
3.修改配置文件sqoop-env.sh
#Set?path?to?where?bin/hadoop?is?available
export?HADOOP_COMMON_HOME=/usr/local/hadoop/
#Set?path?to?where?hadoop-*-core.jar?is?available
export?HADOOP_MAPRED_HOME=/usr/local/hadoop
#set?the?path?to?where?bin/hbase?is?available
export?HBASE_HOME=/usr/local/hbase
#Set?the?path?to?where?bin/hive?is?available
export?HIVE_HOME=/usr/local/hive
#Set?the?path?for?where?zookeper?config?dir?is
export?ZOOCFGDIR=/usr/local/zk
4.把數據從mysql導入到hdfs中史隆,在mysql中數據庫test中有一張表是aa,表中的數據如下圖所示
sqoop ##sqoop命令
import ##表示導入
--connect jdbc:mysql://ip:3306/sqoop ##告訴jdbc逆害,連接mysql的url
--username root ##連接mysql的用戶名
--password admin ##連接mysql的密碼
--table aa ##從mysql導出的表名稱
--fields-terminated-by '\t' ##指定輸出文件中的行的字段分隔符
-m 1 ##復制過程使用1個map作業(yè)
以上的命令中后面的##部分是注釋头镊,執(zhí)行的時候需要刪掉蚣驼;另外,命令的所有內容不能換行相艇,只能一行才能執(zhí)行颖杏。以下操作類似。
該命令執(zhí)行結束后坛芽,觀察hdfs的目錄/user/{USER_NAME}留储,下面會有一個文件夾是aa,里面有個文件是part-m-00000咙轩。該文件的內容就是數據表aa的內容获讳,字段之間是使用制表符分割的。
5.把數據從hdfs導出到mysql中
把上一步導入到hdfs的數據導出到mysql中活喊。我們已知該文件有兩個字段丐膝,使用制表符分隔的。那么,我們現在數據庫test中創(chuàng)建一個數據表叫做bb帅矗,里面有兩個字段偎肃。然后執(zhí)行下面的命令
sqoop
export ##表示數據從hive復制到mysql中
--connect jdbc:mysql://192.168.1.113:3306/test
--username root
--password admin
--table bb ##mysql中的表,即將被導入的表名稱
--export-dir '/user/root/aa/part-m-00000'?##hive中被導出的文件
--fields-terminated-by '\t' ##hive中被導出的文件字段的分隔符
命令執(zhí)行完后浑此,再去觀察表bb中的數據累颂,是不是已經存在了!
基礎命令
1凛俱、列出mysql數據庫中的所有數據庫
sqoop?list-databases?--connect?jdbc:mysql://localhost:3306/?-username?dyh?-password?000000
2紊馏、連接mysql并列出數據庫中的表
sqoop?list-tables?--connect?jdbc:mysql://localhost:3306/test?--username?dyh?--password?000000
3、將關系型數據的表結構復制到hive中
sqoop?create-hive-table?--connect?jdbc:mysql://localhost:3306/test?--table?users?--username?dyh
--password?000000?--hive-table?users?--fields-terminated-by "\0001"? --lines-terminated-by"\n";
參數說明:
--fields-terminated-by "\0001"? 是設置每列之間的分隔符最冰,"\0001"是ASCII碼中的1瘦棋,它也是hive的默認行內分隔符, 而sqoop的默認行內分隔符為"暖哨,"
--lines-terminated-by "\n"? 設置的是每行之間的分隔符赌朋,此處為換行符,也是默認的分隔符篇裁;
注意:只是復制表的結構沛慢,表中的內容沒有復制
4、將數據從關系數據庫導入文件到hive表中
sqoop?import?--connect?jdbc:mysql://localhost:3306/test?--username?dyh?--password?000000
--table?users?--hive-import?--hive-table?users?-m?2--fields-terminated-by "\0001";
參數說明:
?-m?2 表示由兩個map作業(yè)執(zhí)行达布;
--fields-terminated-by "\0001"? 需同創(chuàng)建hive表時保持一致团甲;
5、將hive中的表數據導入到mysql數據庫表中
sqoop?export?--connect?jdbc:mysql://192.168.20.118:3306/test?--username?dyh?--password?000000
--table?users?--export-dir?/user/hive/warehouse/users/part-m-00000
--input-fields-terminated-by?'\0001'
注意:
1黍聂、在進行導入之前躺苦,mysql中的表userst必須已經提起創(chuàng)建好了。
2产还、jdbc:mysql://192.168.20.118:3306/test中的IP地址改成localhost會報異常匹厘,具體見本人上一篇帖子
6、將數據從關系數據庫導入文件到hive表中脐区,--query語句使用
sqoop import --append --connectjdbc:mysql://192.168.20.118:3306/test --username dyh --password 000000 --query"select id,age,name from userinfos where \$CONDITIONS"? -m1? --target-dir /user/hive/warehouse/userinfos2 --fields-terminated-by",";
7愈诚、將數據從關系數據庫導入文件到hive表中,--columns?
--where 語句使用
sqoop import --append --connectjdbc:mysql://192.168.20.118:3306/test --username dyh --password 000000 --tableuserinfos --columns "id,age,name"--where "id > 3 and(age = 88 or age = 80)"? -m 1? --target-dir/user/hive/warehouse/userinfos2 --fields-terminated-by ",";
注意:--target-dir/user/hive/warehouse/userinfos2?? 可以用
--hive-import--hive-table userinfos2
進行替換