sqoop从Hive同步数据到Oracle

    最近工作中需要对Hive工单数据和oracle数据业务数据合起来出报表,所以需要从hive把工单数据同步到oracle中,这就用到了sqoop。
    sqoop是sql to Hadoop, 关系型数据库(mysql,oracle)与hadoop(hdfs,hive,hbase)之间的数据ETL工具, 支持全量和增量更新。sqoop 的本质是一个命令行工具,将导入或导出命令翻译成MapReduce程序来实现。
在这里插入图片描述

安装sqoop

    由于我们是用的Ambari进行HDP的管理安装,所以只要在Ambari控制台中安装即可(当然也可以自己下包在主机上安装),sqoop就是一个工具, 只需要在Hadoop集群的一台主机上进行安装即可。我这里安装的版本是sqoop1.4.6,安装完如下图所示:
在这里插入图片描述
    sqoop1版本只支持JDBC连接方式,安装完了之后需要添加mysql和oracle数据库厂商的Jdbc驱动包到lib下。可以连接mysql数据库测试下是否正常,查询下数据库下的表,如下:

sqoop list-tables --connect 'jdbc:mysql://localhost:3306/test' --username 'test' --password '123456'

sqoop导入

导入脚本模板说明:

sqoop export
#oracle数据库连接
--connect jdbc:oracle:jdbc:oracle:thin:@locallhost:1521/testdb
--username test
--password 123456
--table t_test
# hive表数据文件在hdfs上的路径
--export-dir '/apps/hive/warehouse/dbi.db/t_test/pdt=20191229'
# 指定表的列名,不写会默认全部列
--columns ID,data_date,data_type,c1,c2,c3 
# 列分隔符(根据hive的表结构定义指定分隔符)
--input-fields-terminated-by '\001'
# 行分隔符
--input-lines-terminated-by '\n' 
# 如果hive表中存在null字段,则需要添加参数,否则无法导入
--input-null-string '\\N' 
--input-null-non-string '\\N'  > sqoop_oracle.log 2>&1 &

导入脚本实例如下:

sqoop export \
--connect 'jdbc:oracle:thin:@locallhost:1521/testdb' \
--username 'test' \
--password "123456" \
--table 'TEST_ORDER' \
--export-dir '/apps/hive/warehouse/dbi.db/test_order/pdt=20200308' \
--input-fields-terminated-by '\001' \
--input-lines-terminated-by '\n' \
--input-null-string '\\N' \
--input-null-non-string '\\N'  > sqoop_oracle.log 2>&1 &

脚本执行日志如下:
在这里插入图片描述
    从日志中可以看出,sqoop的数据导入背后是一个个mapreduce任务执行的。查看导入的oracle库表的数量也和日志中数量相同,执行了不到3分钟,导入3000多万条记录,可以看出sqoop导入速度还是很快的。
在这里插入图片描述

官网参考文档传送门!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章