sqoop的import與export及其腳本使用

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 


⑻腳本的使用(以數據導入爲例)
①導入數據到HDFS
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"


②執行腳本
$ 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"



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章