其实也就是需要整合ods层数据
内容如下,非常的简单
azkaban整合sqoop来抽取mysql数据到hive中来。
1.安装从节点的azkaban(以前有文档,要么就是说区别就是,现在是centos7.6,版本比较新而已)
也比较简单,可以参考我的文档来搭建,非常的简单。。。
https://blog.csdn.net/qq_33792843/article/details/84791099
先说一下为什么使用azkaban
参考文章:
https://blog.csdn.net/u010159842/article/details/81029742
这里有两个问题,第一个是,我们的xml建议使用绝对路径来做。
第二个问题是,报错。
[Azkaban] EXCEPTION
javax.net.ssl.SSLException: Unrecognized SSL message, plaintext connection?
注意这个报错我们一定要使用https,请注意哦,不用用http
还有所有的东西都要加绝对路径哦,包括web/
web.resource.dir=/root/app/azkaban/azkaban-web-2.5.0/web/
2.安装CDH的sqoop(这个超级简单就不说了好吧。)
sqoop使用,也非常容易。
sqoop import --connect jdbc:mysql://172.16.1.117:3306/bd_vouch --username root --password 'MyNewPass4!' --table business_data_third_bak --hive-import --hive-overwrite --hive-table test.business_data_third_bak --verbose
请注意这是增量的,会将目标表中数据清空然后重新插入的。
而且在任何一个节点都可以使用,只是,好像一定要用root用户,不用好像就会报错的。
这里azkaban有课坑。请注意。。。
我们一定要注意这一个demo
关键点就在这个文件。。。
R_THIRD.job
内容是:
type=flow
flow.name=F_TR_THIRD
他指向最后一个job,一定要注意。。。
再来研究一下sqoop整个库的导入操作。(省的一个一个的提取表了,方便和省事)
sqoop import-all-tables --connect jdbc:mysql://node1:3306/bd_vouch --username root --password 'MyNewPass4!' -m 10 --hive-import --hive-database test --hive-overwrite
请注意如果不指定--hive-database 表就会同步到default库中
如果不指定--hive-overwrite 将不会清空数据更新,也就是不是全量更新
一定要注意
-m 指定几个map任务,如果没有主见,只能有一个map,例如map 1
--hive-import 标识导入到hive中
--create-hive-table 创建表,如果不创建表,hive里是没有表的,但是我测试,不加这个参数也是可以创建表的。
我们同步一个64张表的数据。
sqoop import-all-tables --connect jdbc:mysql://node1:3306/ralph --username root --password 'MyNewPass4!' -m 10 --hive-import --hive-database ralph --hive-overwrite ----null-string '\\N' --null-non-string '\\N' --exclude-tables ck_blob,ck_file_info,ck_file_share,hibernate_sequence,panda_comp_cfg,panda_comp_memb,panda_component
发现如果没有主键就无法同步。
所以得联系一下,添加主键。或者是--exclude-tables <tables>
sqoop-import-all-tables 注意点
import-all-tables
可以整库的import,但有以为下限制条件:
- 每个表都必须有一个单列主键,或者指定
--autoreset-to-one-mapper
参数 - 每个表只能import全部列,即不可指定列import
- 不能使用非默认的分隔符,不能指定 where 从句
--exclude-tables <tables>
此参数可以 exlude掉不需要import的表(多个表逗号分隔)- 不可以使用
--table, --split-by, --columns, --where,--delete-target-dir
等等参数 - 不支持
--class-name
,可以用--package-name
指定package - 一旦执行过程中有异常抛出,会立即停止