1

我有一个蜂巢表。现在我需要编写一个工作流程,每天的工作将在一个位置搜索文件 -

/data/data_YYYY-mm-dd.csv
like
/data/data_2015-07-07.csv
/data/data_2015-07-08.csv
...

因此,每天的工作流程都会自动选择文件名并将数据加载到 Hive 表(MyTable)中。

我正在编写加载脚本,如下所示 - LOAD DATA INPATH "/data/${filepath}" OVERWRITE INTO TABLE MyTable。

现在,在运行与普通配置单元作业相同的情况下,我可以将文件路径设置为 data_2015-07-07.csv ,但是如何在 Oozie 协调器中执行此操作,以便它自动选择名称为日期的路径。

我尝试从 Oozie 协调器设置工作流参数-

clicklog_${YYYY}-{MONTH}-{DAY}.csv
4

1 回答 1

0

好吧,在检查了 Oozie 协调器文档之后,我找到了解决方案。它简单明了,无论您在 Hive Workflow 中添加了什么配置,都将被忽略,OOzie 协调器将填充它们-

所以我的 Hive 工作流程是 -

<workflow-app name="Workflow__" xmlns="uri:oozie:workflow:0.5">
    <start to="hive-cfc5"/>
    <kill name="Kill">
        <message>Action failed, error message[${wf:errorMessage(wf:lastErrorNode())}]</message>
    </kill>
    <action name="hive-cfc5">
        <hive xmlns="uri:oozie:hive-action:0.2">
            <job-tracker>${jobTracker}</job-tracker>
            <name-node>${nameNode}</name-node>
              <job-xml>/user/hive-site.xml</job-xml>
            <script>/user/sub/create.hql</script>
        </hive>
        <ok to="hive-2ade"/>
        <error to="Kill"/>
    </action>
    <action name="hive-2ade">
        <hive xmlns="uri:oozie:hive-action:0.2">
            <job-tracker>${jobTracker}</job-tracker>
            <name-node>${nameNode}</name-node>
              <job-xml>/user/hive-site.xml</job-xml>
            <script>/user/sub/load_query.hql</script>
              <param>filepath=test_2015-06-26.csv</param>
        </hive>
        <ok to="End"/>
        <error to="Kill"/>
    </action>
    <end name="End"/>
</workflow-app>

现在我在我的 oozie 协调器中安排了相同的工作流程-

只需设置文件路径参数-

test_${YYYY}-{MONTH}-{DAY}.csv

<coordinator-app name="My_Coordinator"
  frequency="*/60 * * * *"
  start="${start_date}" end="${end_date}" timezone="America/Los_Angeles"
  xmlns="uri:oozie:coordinator:0.2"
  >
  <controls>
    <execution>FIFO</execution>
  </controls>
  <action>
    <workflow>
      <app-path>${wf_application_path}</app-path>
      <configuration>
        <property>
          <name>filepath</name>
          <value>test_${YYYY}-{MONTH}-{DAY}.csv</value>
        </property>
        <property>
          <name>oozie.use.system.libpath</name>
          <value>True</value>
        </property>
        <property>
          <name>start_date</name>
          <value>2015-07-07T14:50Z</value>
        </property>
        <property>
          <name>end_date</name>
          <value>2015-07-14T07:23Z</value>
        </property>
      </configuration>
   </workflow>
  </action>
</coordinator-app>

然后我使用一个 cron 作业每 60 分钟运行一次 (*/60 * * * *) 以检查上述任何模式文件是否可用

于 2015-07-08T11:29:41.837 回答