1. 程式人生 > >使用Sqoop將資料從RDBMS(關係型資料庫) 到hdfs和Hive的匯入匯出

使用Sqoop將資料從RDBMS(關係型資料庫) 到hdfs和Hive的匯入匯出

一、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還有許多命令&引數,有興趣的小夥伴可以多多瞭解。