我们正在从CDH3迁移到CDH4,作为此迁移的一部分,我们正在移动我们在CDH3上的所有工作。我们已经注意到一个关键问题,当通过oozie执行工作流来执行内部调用hive查询的python脚本时(hive -e {query}),在这个hive查询中我们使用add添加一个自定义jar jar {LOCAL PATH FOR JAR},并为自定义udf创建了一个临时函数。直到这里它看起来还不错。但是当查询开始使用自定义udf函数执行时,它失败了分布式缓存,File Not Found Exception,它在HDFS路径中寻找jar而不是本地路径中的lookig。
我不确定我是否在这里错过了一些配置。
执行追踪:
警告:不推荐使用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 / mypath中/ custom.jar 在org.apache.hadoop.hdfs.DistributedFileSystem.getFileStatus(DistributedFileSystem.java:824) at org.apache.hadoop.mapreduce.filecache.ClientDistributedCacheManager.getFileStatus(ClientDistributedCacheManager.java:288) at org.apache.hadoop.mapreduce.filecache.ClientDistributedCacheManager.getFileStatus(ClientDistributedCacheManager.java:224) at org.apache.hadoop.mapreduce.filecache.ClientDistributedCacheManager.determineTimestamps(ClientDistributedCacheManager.java:93) ..... .....
对此的任何帮助都非常感谢。
此致 GHK。
答案 0 :(得分:1)
有一些选择。在运行hive查询之前,所有必需的jar都应该在类路径中。
选项1:在oozie工作流程中按<file>/hdfs/path/to/your/jar</file>
添加自定义jar
选项2:在python中调用hive脚本时使用属性--auxpath /local/path/to/your/jar
。例如:hive --auxpath /local/path/to/your.jar -e {query}