0

我们正在从 CDH3 迁移到 CDH4,作为迁移的一部分,我们正在迁移我们在 CDH3 上的所有工作。我们注意到了一个关键问题,当通过 oozie 执行工作流以执行内部调用 hive 查询 (hive -e {query}) 的 python 脚本时,在此 hive 查询中,我们使用 add 添加自定义 jar jar {LOCAL PATH FOR JAR},并为自定义 udf 创建了一个临时函数。直到这里看起来还不错。但是,当查询开始使用自定义 udf 函数执行时,分布式缓存失败,File Not Found Exception 正在 HDFS 路径中查找 jar 而不是在本地路径中查找。

我不确定我是否在这里遗漏了一些配置。

执行跟踪:

警告:不推荐使用 org.apache.hadoop.metrics.jvm.EventCounter。请在所有 log4j.properties 文件中使用 org.apache.hadoop.log.metrics.EventCounter。执行日志位于:/tmp/yarn/yarn_20131107020505_79b41443-b9f4-4d36-a0eb-4f0d79cd3ce9.log java.io.FileNotFoundException:文件不存在:hdfs://aa.bb.com:8020/opt/nfsmount/mypath/custom .jar 在 org.apache.hadoop.hdfs.DistributedFileSystem.getFileStatus(DistributedFileSystem.java:824) 在 org.apache.hadoop.mapreduce.filecache.ClientDistributedCacheManager.getFileStatus(ClientDistributedCacheManager.java:288) 在 org.apache.hadoop.mapreduce org.apache.hadoop.mapreduce.filecache.ClientDistributedCacheManager 中的 .filecache.ClientDistributedCacheManager.getFileStatus(ClientDistributedCacheManager.java:224)。

对此的任何帮助都将受到高度赞赏。

问候, GHK。

4

1 回答 1

1

有几个选项。在运行 hive 查询之前,所有必需的 jar 都应该在类路径中。

选项 1:<file>/hdfs/path/to/your/jar</file>在 oozie 工作流程中添加您的自定义 jar

选项 2:--auxpath /local/path/to/your/jar在 python 中调用配置单元脚本时使用属性。例如:hive --auxpath /local/path/to/your.jar -e {query}

于 2013-11-11T12:08:03.963 回答