使用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还有许多命令&参数,有兴趣的小伙伴可以多多了解。

猜你喜欢

转载自blog.csdn.net/Superman404/article/details/83866319