我在map reduce代码中使用了一些第三方api。我尝试了几件事,但没有成功(我正在使用cloudera 5.9版本)
1) 我尝试了fatjar方法(构建包含所有依赖项的jar),我的代码对我很有用,但这不是一个好的使用方法(我的jar大小非常大)。
所以我想分离第三方jar并使用分布式缓存共享它们。
2) 我试着使用下面的一些选项。
i) 我曾经 hadoop jar <jar_file_name> <main_class_name> <arguments> -libjars <list of jar files>
命令。->不起作用,得到classnotfoundexception
i、 a)我将第三方jar保存在本地文件夹中,并使用-libjars选项中的路径。-->不起作用,得到classnotfoundexception
i、 b)我将第三方jar保存在hdfs中,并使用-libjars选项中的路径。-->不起作用,得到classnotfoundexception
ii)我更新了代码以使用 DistributedCache.addFileToClassPath()
-->不起作用,得到classnotfoundexception
iii)我更新了代码以使用 job.addCacheFile()
-->不起作用,得到classnotfoundexception
iv)我更新了 /etc/hadoop/conf/hadoop-env.sh
又加了一行 export HADOOP_CLASSPATH=$HADOOP_CLASSPATH:/home/mani/test/lib/*
然后重新启动了集群,但仍然不起作用。
v) 我试着像这样运行命令 hadoop jar <jar_file_name> <main_class_name> <arguments> -D mapred.child.env="LD_LIBRARY_PATH=path/to/my/lib/*"
-->不起作用,得到同样的异常。
vi)我也试过了 -Dyarn.application.classpath
但还是一样的问题。
我浏览了一些论坛和cloudera博客,以及其他一些网站。每个人都在讲同样的故事,但我不能得到输出后,即使正确地遵循他们的职位,我在这里错过了什么。
有人能帮我找出解决办法吗。
谢谢你,曼宁达。
暂无答案!
目前还没有任何答案,快来回答吧!