sqoop的import與export及其指令碼使用
阿新 • • 發佈:2019-01-27
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"