3.2 导出数据

在 Sqoop 中,“导出”概念指:从大数据集群(HDFS,HIVE,HBASE)向非大数据集群(RDBMS)中传输数据,叫做:导出,

使用 export 关键字。

导出到 RDBMS 的时候, 目标表必须依据在数据库中已经存在.


3.2.1 HIVE/HDFS 到 RDBMS

sqoop export \
--connect jdbc:mysql://hadoop201:3306/company \
--username root \
--password aaa \
--table staff \
--num-mappers 1 \
--export-dir /user/hive/warehouse/staff_hive \
--input-fields-terminated-by "\t"

注意:

  • mysql 中的 staff 表必须提前存在, 否则会抛出异常

  • 默认情况下是在表中增加新行, 这样会引起主键冲突, 只要有一行插入失败, 剩下的都会插入失败.


使用--update-key 参数: 添加上这个参数之后, 所有的操作变成了update....操作.

sqoop export \
--connect jdbc:mysql://hadoop201:3306/company \
--username root \
--password aaa \
--table staff \
--num-mappers 1 \
--export-dir /user/hive/warehouse/staff_hive \
--update-key id \
--input-fields-terminated-by "\t"

但是, 如果原来表中不存在的 id 则不会插入进去, 只会更新.


再添加参数 --update-mode allowinsert, 表示存在的就更新, 不存在的就插入.

sqoop export \
--connect jdbc:mysql://hadoop201:3306/company \
--username root \
--password aaa \
--table staff \
--num-mappers 1 \
--export-dir /user/hive/warehouse/staff_hive \
--update-key id \
--update-mode allowinsert \
--input-fields-terminated-by "\t"

3.2.2 HBase 导出到 RDBMS

到目前为止, Sqoop 还不支持直接从 HBase 导出数据到 Mysql. 只能先 Hive 表和 HBase 表关联, 然后再从 Hive 表导出到 Mysql. 比较经过 Hive 中间转换.

HBase->Hive外部(关联创建的)->Hive 内部表(通过查询的方式插入数据)->sqoop->Mysql

说明:

  • 为啥需要两张 Hive 作为中间表: 因为和 HBase 整合的时候创建的 Hive 表中没有存储数据, 数据是存储在 HBase 中, 第二张 Hive 表中才有数据.
Copyright © 尚硅谷大数据 2019 all right reserved,powered by Gitbook
该文件最后修订时间: 2018-12-24 20:35:37

results matching ""

    No results matching ""