本次将sqoop和spark脚本相结合组成oozie工作流,通过定时计划任务,定期执行。
执行流程图
实施步骤
创建工作流
选择操作
开始创建sqoop
方框添加执行语句即可
开始创建spark
jar/py name:填写jar包的名称
Main class:填写入口(可以不填,如果不填那需要在option list 进行填写)
文件:填写jar包对应的文件和需要的依赖文件
option list:填写需要的命令行执行的参数,如: --packages mysql:mysql-connector-java:5.1.47 --repositories http://maven.aliyun.com/nexus/content/groups/public/ --driver-class-path ~/jar/mysql-connector-java-5.1.47.jar --class sportsdt.middle_platform.odds.Odds
点击保存后试运行
创建计划
进行参数编辑
点击保存和运行
sqoop执行语句命令
sqoop job--meta-connectjdbc:hsqldb:hsql://hw-cdh-01.sportsdt.com:16110/sqoop--execxxxx
说明
1、sqoop在oozie通过yarn集群执行,会随机在集群选择机器执行,所以需要将sqoop 元数据保存到固定位置,同时通过指定meta-connect来运行sqoop job。参考文档:https://blog.csdn.net/PTtaoge/article/details/83902233
打开master机器的sqoop-site.xml文件。 cd $SQOOP_HOME/conf/sqoop-site.xml 加入下面的配置
<property>
<name>sqoop.metastore.server.location</name>
<!--数据存放的目录-->
<value>/usr/local/sqoop/tmp/sqoop-metastore/shared.db</value>
<description>Path to the shared metastore database files.
If this is not set, it will be placed in ~/.sqoop/.
</description>
</property>
<property>
<name>sqoop.metastore.server.port</name>
<!--client访问的端口-->
<value>16000</value>
<description>Port that this metastore should listen on.
</description>
</property>
然后再在其他机器的sqoop-site.xml文件加入下面的配置
<property>
<name>sqoop.metastore.client.autoconnect.url</name>
<value>jdbc:hsqldb:hsql://master:16000/sqoop</value>
</property>
2、在oozie执行sqoop job时,存在sqoop读取不到hive元数据的问题,造成执行job失败。解决办法是修改hive配置。参考文档:http://www.mamicode.com/info-detail-2489193.html?__cf_chl_jschl_tk__=b1ac631d83c5989e9a1a25a176db1591dc0b2441-1584667717-0-ARCLu_pv5e0voKu6hexjLH69M_MlzFuxMLAMyoE2uLO7LhwhoLFjiES4uNaqsE0Ng-ygEEHWEFmzVkka8jdxmkJrKhugc7WDd-ze3U_y5f59C6q6iqUua_B9ysuBO6gs0StM4aXJE-JdOptMeg2EEjPo9o6Ha5uxfl0KhIGrpbabmJGfOO2vIjxkXBUlVVx6fDvYMBAPjSK6uiakgd6jZiiw_MMJAtMmk5Dt7S__zDAQ8Eq644V9JrYdyYWcu-xYUZ4oKndFbH25Dpl59j1nPZKtlczQCnYvQaSSDXoWw7bGM7WBWK13JtB4n-2uqQ4mww
需要解决oozie无法访问hive元数据的问题
添加了一下的配置项
3.计划时区选择
红框范围时区设置并不能更改到具体的执行时间,具体执行时间是utc时间。