Выполнение запроса куста для пользовательского udf ожидает путь jar hdfs вместо локального пути в CDH4 с потоком Oozie
Мы мигрируем с CDH3 на CDH4, и в рамках этой миграции мы переносим все работы, которые у нас есть на CDH3. Мы заметили одну критическую проблему в этом, когда рабочий процесс выполняется через oozie для выполнения скрипта Python, который внутренне вызвал запрос куста (hive -e {query}), здесь в этом запросе улья мы добавляем пользовательский jar, используя add jar {LOCAL PATH FOR JAR} и создал временную функцию для пользовательских udf. И это выглядит хорошо, пока здесь. Но когда запрос начал выполняться с пользовательской функцией udf, он не работает с распределенным кэшем, исключение File Not Found, которое ищет jar в пути HDFS вместо поиска в локальном пути.
Я не уверен, что мне здесь не хватает конфигурации.
Trace Execption:
ВНИМАНИЕ: org.apache.hadoop.metrics.jvm.EventCounter устарела. Пожалуйста, используйте org.apache.hadoop.log.metrics.EventCounter во всех файлах log4j.properties. Журнал выполнения по адресу: /tmp/yarn/yarn_20131107020505_79b41443-b9f4-4d36-a0eb-4f0d79cd3ce9.log java.io.FileNotFoundException: файл не существует: hdfs://aa.bb.com:8020/opt/nfsmount/myp.jar at org.apache.hadoop.hdfs.DistributedFileSystem.getFileStatus(DistributedFileSystem.java:824) в org.apache.hadoop.mapreduce.filecache.ClientDistributedCacheManager.getFileStatus(ClientDistributedjadma.apache.prem).filecache.ClientDistributedCacheManager.getFileStatus(ClientDistributedCacheManager.java:224) в org.apache.hadoop.mapreduce.filecache.ClientDistributedCacheManager.determineTimestamps(ClientDistributedCacheManager.....ava......
любая помощь в этом высоко ценится.
С уважением, GHK.
1 ответ
Есть несколько вариантов. Все необходимые jar должны быть в classpath перед запуском запроса улья.
вариант 1: добавьте свой собственный <file>/hdfs/path/to/your/jar</file>
в рабочем процессе
вариант 2: использовать атрибут --auxpath /local/path/to/your/jar
во время вызова вашего скрипта улья в Python. Например: hive --auxpath /local/path/to/your.jar -e {query}