您的位置:首页 > 运维架构

利用oozie,执行sqoop action将DB2中的数据导入到hive分区表中

2018-01-26 16:04 435 查看
测试:利用oozie,执行sqoop action将DB2中的数据导入到hive分区表中。

需要注意的地方:
1,要添加hive.metastore.uris这个参数。否则无法将数据加载到hive表中。并且,如果一个xml文本中有多个这种操作的话,每个action中都需要配置这个参数。
2,要注意XML中的转义字符问题。这里我的sql中,就有一个小于号需要重写,否则执行后会说sql语句不对。
3,因为是分区表,按照每日分区,所以要从系统获取系统时间。这里没找到其他的可执行的方法,就比较麻烦的写成了这个样子:${replaceAll(timestamp(),"T.{0,}","")}
4,还要注意xmlns的版本问题。这个时候,多试几个就好了。

workflow.xml

<?xml version="1.0" encoding="gb2312"?>
<workflow-app name="workID1" xmlns="uri:oozie:workflow:0.5">
<start to="step0101"/>
<action name="step0101">
<sqoop xmlns="uri:oozie:sqoop-action:0.4">
<configuration>
<property>
<name>hive.metastore.uris</name>
<value>thrift://192.168.20.39:9083</value>
</property>
</configuration>
<arg>import</arg>
<arg>--connect</arg>
<arg>jdbc:db2://192.168.20.236:50001/sample</arg>
<arg>--username</arg>
<arg>db2inst1</arg>
<arg>--password</arg>
<arg>zheshimima</arg>
<arg>--query</arg>
<arg>select projno,projname,prstdate from project where prstdate < date(current date)-1 day and $CONDITIONS</arg>
<arg>--fields-terminated-by</arg>
<arg>"\t"</arg>
<arg>--hive-import</arg>
<arg>--target-dir</arg>
<arg>/qpf/target-dir/</arg>
<arg>--hive-table</arg>
<arg>ceshiku.tb_db2test</arg>
<arg>--null-string</arg>
<arg>"\\N"</arg>
<arg>--null-non-string</arg>
<arg>"\\N"</arg>
<arg>--hive-partition-key</arg>
<arg>shijian</arg>
<arg>--hive-partition-value</arg>
<arg>"${replaceAll(timestamp(),"T.{0,}","")}"</arg>
<arg>-m</arg>
<arg>1</arg>
</sqoop>
<ok to="end"/>
<error to="Kill0101" />
</action>
<kill name="Kill0101">
<message>Action failed,step01 error message[${wf:errorMessage(wf:lastErrorNode())}]</message>
</kill>
<end name="end"/>
</workflow-app>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  oozie sqoop