Sqoop作用
Sqoop就是一个小工具,用于将RDBMS与Hadoop(HDFS、HBase、Hive)之间数据互导,执行命令行就可以实现其功能。
Sqoop原理
Sqoop原理是将导入或导出命令翻译成mapreduce程序来实现。
Sqoop使用
1.导入数据
“导入”概念指:从非大数据集群(RDBMS)向大数据集群(HDFS,HIVE,HBASE)中传输数据,叫做:导入,即使用import关键字。
1.1 从RDBMS到HDFS
$ bin/sqoop import \
--connect jdbc:mysql://hadoop102:3306/company \
--username root \
--password 000000 \
--table staff \
--target-dir /user/company \
--delete-target-dir \
--num-mappers 1 \
--fields-terminated-by "\t" (保存到HDFS上的字段间使用\t分隔)
将mysql的staff表全部导入到HDFS的/user/company目录,字段间使用\t分隔。
还可以where条件筛选导入、导入指定列。
1.2 从RDBMS到Hive
$ bin/sqoop import \
--connect jdbc:mysql://hadoop102:3306/company \
--username root \
--password 000000 \
--table staff \
--num-mappers 1 \
--hive-import \
--fields-terminated-by "\t" \
--hive-overwrite \
--hive-table staff_hive
将mysql的staff表导入到Hive的staff_hive表,这里不需要手动创建hive表。
1.3 从RDBMS到HBase
$ bin/sqoop import \
--connect jdbc:mysql://hadoop102:3306/company \
--username root \
--password 000000 \
--table staff \
--columns "id,name,sex" \
--column-family "info" \
--hbase-create-table \
--hbase-row-key "id" \
--hbase-table "hbase_company" \
--num-mappers 1 \
--split-by id
问题:如果HBase的rowkey比较复杂,通过命令行很难拼装好,该如何实现导入呢?
https://blog.csdn.net/jsky_studio/article/details/50626056利用sqoop从mysql向hbase导数据(拼接mysql多字段做为hbase rowkey)
这篇文章提供了一个思路,创建一个临时的mysql表,除原表字段外新增一个hbase_rowkey字段,利用SQL拼装好这个字段,然后将这个临时mysql表导入HBase。
2.导出数据
导出数据与导入数据相反,表示从Hadoop中导出到RDBMS。
2.1 从Hive/HDFS到RDBMS
$ bin/sqoop export \
--connect jdbc:mysql://hadoop102:3306/company \
--username root \
--password 000000 \
--table staff \
--num-mappers 1 \
--export-dir /user/hive/warehouse/staff_hive \
--input-fields-terminated-by "\t"
从/user/hive/warehouse/staff_hive导出数据到mysql的staff表中。