Как получить значение из Hive в сценарии оболочки с помощью рабочего процесса ooz ie? - PullRequest
1 голос
/ 14 июля 2020

У меня есть сценарий оболочки пример. sh

hive -e "select max(id) from dummy.table;" > data.txt
hdfs dfs -put -f data.txt /user/username/data.txt

Этот сценарий извлекает данные из куста и сохраняет результат в hdfs. Это работает, как ожидалось, в терминале. Но когда я создаю рабочий процесс ooz ie, созданный файл пуст. Я попытался напечатать какое-то жестко запрограммированное значение, и рабочий процесс работает нормально. Проблема в том, что при использовании запроса куста данные отсутствуют, хотя задание выполнено успешно. Я попытался запустить то же самое с hql, и он работал успешно.

insert overwrite directory '/user/username/hiveData' select max(id) from dummy.table;

Но мое требование таково, что я должен получить данные куста в моем сценарии оболочки.

1 Ответ

0 голосов
/ 16 июля 2020

Поскольку у вас нет чека на $?, вы можете не знать, что он не прошел. Итак, первый шаг - добавить это в сценарий оболочки. В противном случае вы не узнаете, не удалось ли выполнить сценарий оболочки (из-за сбоя улья), и Ooz ie получит статус успешного выполнения сценария оболочки.

Итак, не зная, какова настоящая причина сбоя улья код, я делаю предположение.

Если у вас есть проверка подлинности Kerberos, используемая Hive, запрос улья может давать сбой внутри сценария оболочки, вызываемого Ooz ie. Чтобы решить проблему с kerberos, вам может потребоваться сделать что-то вроде этого:

if [ -z ${HADOOP_TOKEN_FILE_LOCATION} ]
then
    hive -e "select max(id) from dummy.table;" > data.txt
else
    hive -e "SET mapreduce.job.credentials.binary=$HADOOP_TOKEN_FILE_LOCATION; select max(id) from dummy.table;" > data.txt
fi

Подробнее об этом можно прочитать здесь

...