为什么要有Sqoop?
将数据从别的数据库导到Hadoop、Hbase或Hive太麻烦了。
什么是Sqoop?
Sqoop就是Hadoop、Hive、HBase等数据仓库与数据库之间传输数据的工具。,就是将导入(输入)和导出(输出)的命令映射成MR程序。
导入:MySQL等数据库数据导入到HDFS、Hive、HBase等数据仓库
导出:Hadoop导出数据到数据库
操作
RDBMS
-> HDFS
全表数据导入:
bin/sqoop import
--connect jdbc:mysql://hadoop01.levi.com:3306/background
--username root
--password root
--table user
--target-dir /user/sqoop/user
--delete-target-dir
--num-mappers 1
--fields-terminated-by "\t"
部分数据导入:
bin/sqoop import
--connect jdbc:mysql://hadoop01.levi.com:3306/background
--username root
--password root
--target-dir /user/sqoop/user
--delete-target-dir
--num-mappers 1
--fields-terminated-by "\t"
--query 'select name from user where id<= 10 and $CONDITIONS';
导入指定的列:
bin/sqoop import
--connect jdbc:mysql://hadoop01.levi.com:3306/background
--username root
--password root
--target-dir /user/sqoop/user
--delete-target-dir
--num-mappers 1
--fields-terminated-by "\t"
--table user
--columns id,name;
Sqoop关键字筛选数据导入:
bin/sqoop import
--connect jdbc:mysql://hadoop01.levi.com:3306/background
--username root
--password root
--target-dir /user/sqoop/user
--delete-target-dir
--num-mappers 1
--fields-terminated-by "\t"
--table user
--where id=3;
RDBMS ->
Hive
导入数据到Hive:
bin/sqoop import
--connect jdbc:mysql://hadoop01.levi.com:3306/background
--username root
--password root
--table user
--num-mappers 1
--hive-import
--hive-table user
--fields-terminated-by '\t'
--hive-overwrite
--delete-target-dir
--hive-table levi.user;
备注:如果导入的表在hive中是没有的,那么则会到default数据库
导入过程:将数据分割后,输出到一个文件中,把这个文件弄到HDFS,并且在metastore中生成对应关系的元数据
Hive/HDFS
-> RDBMS
导出数据到RDBMS:
bin/sqoop export
--connect jdbc:mysql://hadoop01.levi.com:3306/background
--username root
--password root
--table user
--num-mappers 1
--export-dir /user/sqoop/user
--input-fields-terminated-by '\t';
备注:假设是MySQL数据库,如果数据库中没有表则会报错
Sqoop-Job
定义Job:
bin/sqoop job --create jobname
-- import
--connect jdbc:mysql://hadoop01.levi.com:3306/background
--username root
--password root
--table user
--target-dir /user/sqoop/user
--delete-target-dir
--num-mappers 1
--fields-terminated-by "\t"
查看Job:bin/sqoopjob --list
执行Job:bin/sqoopjob --exec jobname
验证作业情况:bin/sqoop job --show jobname