Создание каталога в hdfs с помощью oozie

В рабочем процессе oozie, как мы можем создать каталог в HDFS и скопировать файлы из Linux в HDFS

Я хочу сделать следующее в рабочем процессе

hdfs dfs -mkdir -p /user/$USER/logging/`date "+%Y-%m-%d"`/logs


hdfs dfs -put /home/$USER/logs/"${table}" /user/$USER/logging/`date "+%Y-%m-%d"`/logs/

Как я могу этого добиться?

Я пробовал следующее, но безуспешно

<action name="Copy_to_HDFS">
    <fs>
        <mkdir path='/user/$USER/logging/`date "+%Y-%m-%d"`/logs'/>
        <move source='/home/$USER/logs${table}' target='/user/$USER/logging/`date "+%Y-%m-%d"`/logs/'/>
    </fs>
    <ok to="end"/>
    <error to="end"/>
</action>

Как мы можем создать папку с названием этой конкретной даты?

Полный рабочий процесс:

    <workflow-app name="Shell_hive" xmlns="uri:oozie:workflow:0.5">
    <start to="shell-b8e7"/>
    <kill name="Kill">
        <message>Action failed, error message[${wf:errorMessage(wf:lastErrorNode())}]</message>
    </kill>
    <action name="shell-b8e7">
        <shell xmlns="uri:oozie:shell-action:0.1">
            <job-tracker>${jobTracker}</job-tracker>
            <name-node>${nameNode}</name-node>
            <exec>shell.sh</exec>
              <argument>${table}</argument>
           <env-var>HADOOP_USER_NAME=${wf:user()}</env-var>
           <env-var>HADOOP_CONF_DIR=/etc/hadoop/conf</env-var>
           <file>/user/$USER/oozie/scripts/lib/shell.sh#shell.sh</file>   
        </shell>
        <ok to="End"/>
        <error to="Kill"/>
    </action>
    <action name="Copy_to_HDFS">
        <fs>
            <mkdir path="/user/$USER/logging/2017-04-24/logs"/>
            <move source="/tmp/logging/${table}" target="/user/$USER/logging/$(date +%Y-%m-%d)/logs/"/>
        </fs>
        <ok to="end"/>
        <error to="end"/>
    </action>
        <end name="End"/>
    </workflow-app>

person Community    schedule 24.04.2017    source источник
comment
Что происходит, когда вы это делаете?   -  person franklinsijo    schedule 24.04.2017
comment
@franklinsijo, можем ли мы создать каталог, используя timestamp в рабочем процессе. Похоже проблема с date "+%Y-%m-%d"   -  person    schedule 24.04.2017


Ответы (2)


Проблема с кавычками, одинарные кавычки (') блокируют расширение переменной.

<action name="Copy_to_HDFS">
    <fs>
        <mkdir path="/user/$USER/logging/$(date +%Y-%m-%d)/logs"/>
        <move source="/home/$USER/logs${table}" target="/user/$USER/logging/$(date +%Y-%m-%d)/logs/"/>
    </fs>
    <ok to="end"/>
    <error to="end"/>
</action>

ОБНОВЛЕНИЕ: действие Copy_to_HDFS никогда не вызывается. Действие shell-b8e7 в случае успеха отправляется в действие End. Измените рабочий процесс соответствующим образом, чтобы вызвать действие Copy_to_HDFS. Например,

</shell>
<ok to="Copy_to_HDFS"/>
person franklinsijo    schedule 24.04.2017
comment
Вы можете создать каталог, если замените дату строкой? - person franklinsijo; 24.04.2017
comment
Какие-нибудь исключения для узи? - person franklinsijo; 24.04.2017
comment
@franklinsijo Для меня это создание такой папки $(date +%Y-%m-%d) в hdfs - person User12345; 25.04.2017
comment
Вы пытались окружить его обратными кавычками date +%Y-%m-%d вместо $(..)? - person franklinsijo; 25.04.2017

Тег подготовки может помочь:

<prepare>
                <delete path="[PATH]"/>
                ...
                <mkdir path="[PATH]"/>
                ...
</prepare>
person K S Nidhin    schedule 24.04.2017