Sqoop官方網址:http://sqoop.apache.org/
一、Sqoop的誕生
1、存在的問題
⑴RDBMS:數據大量存儲在RDBMS(Oracle、MySQL、DB2等)上,如果需要對數據進行分析,需要將這些數據遷移到HDFS上去。
2、Sqoop的產生和作用
⑴Sqoop:Sql-to-Hadoop
⑵將關係數據庫中的某張表數據抽取到Hadoop的HDFS文件系統當中,底層運行還是MapReduce。
⑶將HDFS上的文件數據或者是Hive表中的數據導出到關係型數據庫中的某張表中。
⑷Sqoop利用MapReduce批處理方式進行數據傳輸加快數據傳輸速度。
二、sqoop的版本
1、Sqoop1 & Sqoop2兩個不同版本,完全不兼容;
2、Sqoop2比Sqoop1的改進
⑴引入Sqoop server,集中化管理Connector等;
⑵多種訪問方式:CLI,Web UI,REST API ;
⑶引入基於角色的安全機制;
三、sqoop的架構
四、sqoop的使用
1、Sqoop使用要點
2、測試Sqoop
⑴鏈接MySQL數據庫,並list數據庫中的databases,測試Sqoop是否配置正確。
$bin/sqoop list-databases \ --connect jdbc:mysql://hostname:3306 \ --username root \ --password root
3、import
⑴默認情況下導入數據到HDFS
$/bin/sqoop import \ --connect jdbc:mysql://hostname:3306/mydb \ --username root \ --password root \ --table mytable
⑵指定目錄和Mapper個數導入HDFS①創建目錄
${HADOOP_HOME}/bin/hdfs dfs -mkdir -p /user/sqoop/
②設置map個數爲1,指定目錄爲/user/sqoop/,如果目標目錄已經存在則先刪除$ bin/sqoop import \ --connect jdbc:mysql://blue01.mydomain:3306/mydb \ --username root \ --password root \ --table my_user \ --target-dir /user/hive/warehouse/my_user \ --delete-target-dir \ --num-mappers 1 \ --fields-terminated-by "\t" \ --columns id,passwd \ --where "id<=3"
⑶增量導入HDFS①增量導入數據到HDFS文件中,可以通過下面三個參數進行設置:--check-column--incremental--last-value$bin/sqoop import \ --connect jdbc:mysql://hostname:3306/mydb \ --username root \ --password root \ --table mytable \ --num-mappers 1 \ --target-dir /user/sqoop/ \ --fields-terminated-by "\t" \ --check-column id \ --incremental append \ --last-value 4 //表示從第5位開始導入
⑷指定文件格式導入HDFS①默認情況下,導入數據到HDFS,文件存儲格式爲textfile,可以通過屬性進行指定,比如文件存儲格式爲parquet$bin/sqoop import \ --connect jdbc:mysql://hostname:3306/mydb \ --username root \ --password root \ --table mytable \ --num-mappers 1 \ --target-dir /user/sqoop/ \ --fields-terminated-by "\t" \ --as-parquetfile
⑸指定壓縮格式導入HDFS①默認情況下,導入的HDFS文件是不壓縮的,可以通過屬性--compress 和 --compression-codec設置;$bin/sqoop import \ --connect jdbc:mysql://hostname:3306/mydb \ --username root \ --password root \ --table mytable \ --num-mappers 1 \ --target-dir /user/sqoop/ \ --fields-terminated-by "\t" \ --compress \ --compression-codec org.apache.hadoop.io.compress.SnappyCodec
⑹把select查詢結果導入HDFS①把select查詢結果導入HDFS,必須包含'$CONDITIONS'在where子句中;$ bin/sqoop import \ --connect jdbc:mysql://hostname:3306/mydb \ --username root \ --password root \ --target-dir /user/hive/warehouse/mydb.db/mytable \ --delete-target-dir \ --num-mappers 1 \ --fields-terminated-by "\t" \ --query 'select id,account from my_user where id>=3 and $CONDITIONS'
⑺導入數據到Hive中$ bin/sqoop import \ --connect jdbc:mysql://hostname:3306/mydb \ --username root \ --password root \ --table mytable \ --num-mappers 1 \ --hive-import \ --hive-database mydb \ --hive-table mytable \ --fields-terminated-by "\t" \ --delete-target-dir \ --hive-overwrite
⑻腳本的使用(以數據導入爲例)①導入數據到HDFSexport --connect jdbc:mysql://hostname:3306/mydb --username root --password root --table mytable --num-mappers 1 --export-dir /user/hive/warehouse/mydb.db/mytable --input-fields-terminated-by "\t"
②執行腳本$ bin/sqoop --options-file xxx.opt
4、export⑴從Hive或者HDFS導出數據到MySQL$ bin/sqoop export \ --connect jdbc:mysql://hostname:3306/mydb \ --username root \ --password root \ --table mytable \ --num-mappers 1 \ --export-dir /user/hive/warehouse/mydb.db/mytable \ --input-fields-terminated-by "\t"