我在本地节点centos上运行hadoop2.2.0.2.0.6.0-101。
当我包含来自 /usr/lib/hadoop
以及 /usr/lib/hive
作为eclipse项目中的依赖项。找到必要的jar是一个真正的任务!grep是我做这项工作的唯一工具 grep -ri -l "FacebookService" /usr/lib/hadoop
尽管如此,当我尝试在编译应用程序的同一本地节点上运行应用程序时,还是会出现异常。我放弃了寻找必要的jar的尝试——在一个例外被修复之后,会出现一个新的例外。
现在,在通过添加来自 /usr/lib/hadoop
以及 /usr/lib/hive
我有一个很好的答案: java.io.IOException: Cannot initialize Cluster. Please check your configuration for mapreduce.framework.name and the correspond server addresses.
有趣的是:当我从这些目录中添加所有jar时,我的程序就会运行!
最后一个解决方案在我的情况下不起作用,因为我需要创建一个自给自足的包,以便在另一个分布式hadoop安装上运行我的应用程序。
部署hadoopmapreduce作业的正确方法是什么?我应该如何设置hadoop类路径以在任何节点上运行mapreduce作业?
1条答案
按热度按时间6uxekuva1#
重申vishal的建议:使用maven进行依赖关系管理。mr项目(简单)的典型maven pom.xml如下所示:
这就是优点:hadoop客户机封装了所有依赖项。
接下来是运行生成的jar文件的问题:
您可以有两种情况:
您尝试运行的m/c是集群的一部分,即安装和配置的hadoop。在这种情况下,“hadoopjar<>”命令应该包含所有与hadoop相关的依赖项。你得加上你的jar。
m/c没有安装hadoop。在本例中,您可以使用maven通过检查有效pom来获取jar列表。
希望这是清楚的。