使用Sqoop將資料從RDBMS(關係型資料庫) 到hdfs和Hive的匯入匯出
阿新 • • 發佈:2018-11-20
一、RDBMS 到 HDFS/HIVE
1.首先啟動Mysql
service mysql start
2.在mysql中新建一張表並插入資料
# mysql -uroot -proot
mysql> create table dept(id int primary key ,dname varchar(20),sex varchar(5));
mysql> insert into dept values(1,'tom','male');
mysql> insert into dept values(2,'jack','f');
3.匯入資料
(1)全部匯入
bin/sqoop import \
--connect jdbc:mysql://Mage1:3306/bigdata11 \
--username root \
--password root \
--table dept \
--target-dir /user/dept \
--delete-target-dir \
--num-mappers 1 \
--fields-terminated-by "\t" \
( 2 )查詢匯入
bin/sqoop import \ --connect jdbc:mysql://Mage1:3306/bigdata11 \ --username root \ --password root \ --target-dir /user/dept \ --delete-target-dir \ --num-mappers 1 \ --fields-terminated-by "\t" \ --query 'select dname from emp where id <=1 and $CONDITIONS;'
注:這裡的CONDITIONS不能省去,他的作用相當於MapReduce流程中的切片(分片)過程。
(3)匯入指定列
bin/sqoop import \
--connect jdbc:mysql://Mage1:3306/bigdata11 \
--username root \
--password root --target-dir /user/dept \
--delete-target-dir \
--num-mappers 1 \
--fields-terminated-by "\t" \
--columns dname,sex \
--table emp
( 4 )關鍵字篩選查詢匯入資料
bin/sqoop import \
--connect jdbc:mysql://Mage1:3306/bigdata11 \
--username root \
--password root \
--target-dir /user/emp2 \
--delete-target-dir \
--num-mappers 1 \
--fields-terminated-by "\t" \
--table dept \
--where "id=1"
( 5 )RDBMS到HIVE
bin/sqoop import \
--connect jdbc:mysql://Mage1:3306/bigdata11 \
--username root \
--password root \
--table dept \
--num-mappers 1 \
--hive-import \
--fields-terminated-by "\t" \
--hive-overwrite \
--hive-table dept_hive
注:執行這個操作之前需要把將hive/lib中的hive-common-2.3.3.jar拷貝到sqoop的lib目錄中
(6)從RDBMS增量匯入資料到HIVE中(根據主鍵)
bin/sqoop import \
--connect jdbc:mysql://Mage1:3306/bigdata11 \
--username root \
--password root \
--table emp \
--num-mappers 1 \
--fields-terminated-by '\t' \
--target-dir /user/hive/warehouse/taff_hive1 \
--check-column eid \
--incremental append \
--last-value 3
注:append不能與–hive-的引數同時使用,並且RDBMS匯入到HIVE的過程是:
先把RDBMS資料匯入到HDFS本地目錄下,然後再轉移到HIVE中。
(7)從RDBMS增量匯入資料到HIVE中(根據實時時間欄位)
bin/sqoop import \
--connect jdbc:mysql://Mage1:3306/bigdata11 \
--username root \
--password root \
--table staff_timestamp \
--fields-terminated-by '\t' \
--check-column last_modified \
--incremental lastmodified \
--last-value "2018-11-8 21:46:30" \
--num-mappers 1 \
--append
二、HDFS/HIVE到RDBMS
(1)HDFS到RDBMS
bin/sqoop export \
--connect jdbc:mysql://Mage1:3306/bigdata11 \
--username root \
--password root \
--table dept \
--num-mappers 1 \
--export-dir /user/hive/warehouse/t1/part-m-00001 \
--input-fields-terminated-by '\t'
注:一定要清楚以什麼為分割匯出,不然會導致匯出失敗
(2)HIVE到RDBMS
bin/sqoop export \
--connect jdbc:mysql://Mage1:3306/bigdata11 \
--username root \
--password root \
--table dept \
--hive-table hive_dept
結束語:以上的sqoop在對RDBMS到HIVE/HDFS的一些常用的資料匯入匯出,另外sqoop還有許多命令&引數,有興趣的小夥伴可以多多瞭解。