如何在插入配置单元表时从hdfs中选择动态文件名

nbysray5  于 2021-05-29  发布在  Hadoop
关注(0)|答案(1)|浏览(294)

我有一张Hive桌。现在我需要写一个工作流程,每天的工作将搜索一个位置的文件-

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

因此,每天的工作流都会自动选择文件名并将数据加载到配置单元表(mytable)中。
我正在编写如下所示的加载脚本-将data inpath“/data/${filepath}”overwrite加载到表mytable中。
现在,在运行与普通配置单元作业相同的任务时,我可以将文件路径设置为data亶2015-07-07.csv,但如何在oozie coordinator中进行设置,以便它自动选择名为date的路径。
我试图从oozie coordinator设置工作流参数-

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

ntjbwcob1#

在检查了oozie协调器文档之后,我找到了解决方案。它简单而直接,不管您已经在hive工作流中添加了什么配置,都将被忽略,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 coordinator中安排了相同的工作流-
只需设置filepath参数-

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>

然后我用一个crone作业每60分钟运行一次(/60***)来检查上面的模式文件是否可用

相关问题