带有两个 jar 的 Hadoop Mapreduce(仅在 namenode 上需要其中一个 jar)
mapred 任务是一个由 Java 实现的非常简单的“字数统计”(请参阅 http://wiki.apache。 org/hadoop/WordCount )。
在最后一行之后,“job.waitForCompletion(true);” 我添加了一些由 Jython 实现的代码。
这意味着 Jythoon 的库仅在 namenode 上需要。 但是,我将 Jython 的所有库添加到一个 jar 中,然后 执行后,
hadoop jar wordcount.jar in out
wordcount就完成了,没有任何问题。
我想解决的问题是我必须为 Jython 提供大量库,而从属节点(映射器和化简器)不需要这些库。 jar 几乎有 15M(Jython 超过 14M)。
我可以将它们分开并得到相同的结果吗?
The mapred task is a very simple 'wordcount' implemented by Java (plz, see http://wiki.apache.org/hadoop/WordCount ).
after the last line, "job.waitForCompletion(true);"
I add some code implemented by Jython.
It means the libraries for Jythoon is only needed on namenode.
However, I added all libraries for Jython to a single jar, and then
executed it
hadoop jar wordcount.jar in out
The wordcount is done without any problem.
The problem I want to solve is I have to heavy libraries for Jython that is not needed for the slave nodes(mappers and reducers). the jar is almost 15M (upper than 14M is for Jython).
Can I split them, and get the same results?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
没有人知道这个问题。
我已经解决了这个问题,如下:即使它不是最好的。
简单地说,将 jython.jar 复制到 /usr/local/hadoop (或安装 hadoop 的路径),这是 hadoop 的默认类路径,并制作一个没有 jython.jar 的 jar
如果您需要非常大的库来映射减少任务,那么
将jython.jar上传到hdfs
hadoop fs -put jython.jar Lib/jython.jar
将以下行添加到您的主代码
DistributedCache.addFileToClassPath(new URI("Lib/jython.jar"));
Nobody knows this question.
I've solved this problem as follows: even if it's not the best.
Simply, copy jython.jar to /usr/local/hadoop (or path of hadoop installed) which is the default classpath of hadoop, and make a jar without jython.jar
If you need very big libraries to mapreduce task, then
upload jython.jar to hdfs
hadoop fs -put jython.jar Lib/jython.jar
add the follow line to your main code
DistributedCache.addFileToClassPath(new URI("Lib/jython.jar"));