文章目錄
sqoop簡介
sqoop是連接關係型數據庫和hadoop的橋樑,主要有兩個方面(導入和導出):
-
將關係型數據庫的數據導入到Hadoop 及其相關的系統中,如 Hive和HBase
-
將數據從Hadoop 系統裏抽取並導出到關係型數據庫
sqoop安裝
sqoop下載地址:Index of /dist/sqoop
下載完成後把sqoop進行解壓安裝並配置,在添加sqoop到環境變量,並將數據庫連接驅動拷貝到$SQOOP_HOME(sqoop安裝目錄)/lib裏
sqoop使用
把MySQL中的數據導入到HDFS上
sqoop import --connect jdbc:mysql://192.168.100.10:3306/mydatabase --username root --password 158758qwef --table keyWord --columns 'word,total' -m 1
指定輸出路徑、指定數據分隔符
sqoop import --connect jdbc:mysql://192.168.100.10:3306/mydatabase --username root --password 158758qwef --keyWord --target-dir '/sqoop/td' --fields-terminated-by '\t'
指定Map數量 -m
sqoop import --connect jdbc:mysql://192.168.100.10:3306/mydatabase --username root --password 158758qwef --table keyWord --target-dir '/sqoop/td1' --fields-terminated-by '\t' -m 2
增加where條件, 注意:條件必須用引號引起來
sqoop import --connect jdbc:mysql://192.168.100.10:3306/mydatabase --username root --password 158758qwef --table keyWord --where 'id>3' --target-dir '/sqoop/td2'
將MySQL上的數據導出到數據庫中
sqoop export --connect "jdbc:mysql://192.168.100.10:3306/mydatabase?" --username root --password 158758qwef --table stu_test --m 1 --export-dir /user/hadoop/keyWord --input-fields-terminated-by '\t' --columns="word,total"
把MySQL上的數據導入到Hive中
先把hive中lib目錄下的hive-common-2.3.7.jar包導入到sqoop安裝目錄下的lib中
sqoop import --connect jdbc:mysql://192.168.100.10:3306/mydatabase --username root --password password --table keyWord --hive-import --create-hive-table --fields-terminated-by "\t" -m 1 --target-dir test5
運行命令後進入到hive中可以看到創建了一個keyWord表
把Hive上的數據導出到MySQL中
運行如下命令
sqoop export --connect jdbc:mysql://192.168.100.10:3306/mydatabase --username root --password password --table keyWord2 --export-dir /user/hive/warehouse/keyword
到MySQL中可以select一下keyWord2表,可以看到數據已經導出到keyWord2表中(嚶嚶嚶不過沒指定分隔符,數據導出有點亂)
記些bug
- 在數據庫連接驅動拷貝到$SQOOP_HOME(sqoop安裝目錄)/lib裏之後仍然出現錯誤:Sqoop Could not load db driver class: com.mysql.jdbc.Driver。
原因是所用的sqoop版本不支持所用的MySQL JDBC驅動,可以換一個驅動試試
-
在把數據庫中的數據導入到HDFS時,發生錯誤:Error during import: No primary key could be found。
解決方法有三,詳見:通過Sqoop將Oracle中表導入到HDFS時報錯Error during import: No primary key could be found