2013-08-01 2 views
0

Я пытаюсь выполнить простой Ls команды через действие оболочки, но я столкнулся ошибка,Oozie Shell Действие Выпуск

Exact Выпуск: сценарий:

#!/bin/bash 
ls /home/my-directory 

Stdout журналы:

>>> Invoking Shell command line now >> 
Exit code of the Shell command 2 
<<< Invocation of Shell command completed <<< 
<<< Invocation of Main class completed <<< 
Failing Oozie Launcher, Main class [org.apache.oozie.action.hadoop.ShellMain], exit code [1] 
Oozie Launcher failed, finishing Hadoop job gracefully 
Oozie Launcher ends 

STDERR журналы:

ls: cannot access /home/my-directory: No such file or directory 
Failing Oozie Launcher, Main class [org.apache.oozie.action.hadoop.ShellMain], exit code [1] 

Существует каталог/главная/мой-каталог, а также имеет подкаталоги.

Будет здорово, если кто-нибудь может предоставить мне решение этого.

+0

Is/home/my-directory в файловой системе Hadoop или «реальной» файловой системе? 'ls' не знает о Hadoop. – chepner

+0

Этот каталог находится в моей файловой системе Linux. – Kasa

+0

Вы поняли это? – CruncherBigData

ответ

1

У вас нет контроля над тем, какой узел в вашем кластере Oozie запускает действие оболочки. Поэтому ваш скрипт никогда не должен ссылаться на локальную файловую систему любого конкретного узла в вашем кластере.

Скажем, ваш кластер содержит два узла NODE1 и NODE2, а ваш сценарий ссылается на файл, который находится на FS NODE1. Когда Oozie запускает ваш скрипт, он может запускать его из NODE1 или NODE2 (помните - вы помещаете свой скрипт, job.properties, workflow.xml в HDFS, который распространяется через NODE1 и NODE2). Если сценарий запускается из NODE2, вы получите ошибку «Нет такого файла или каталога», потому что файл отсутствует в локальной FS NODE2.

Важным моментом является то, что любой скрипт, который вы запускаете через Oozie, должен ссылаться только на пути и файлы в HDFS. Если вам нужен файл из FS local на один узел для ссылки, поместите его в HDFS и используйте путь в HDFS для ссылки на файл.

Смежные вопросы