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"
但是,
再添加参数 --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 表中才有数据.