java—打包和部署hadoop mapreduce作业的正确方法?

p4rjhz4m  于 2021-06-03  发布在  Hadoop
关注(0)|答案(1)|浏览(339)

我在本地节点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作业?

6uxekuva

6uxekuva1#

重申vishal的建议:使用maven进行依赖关系管理。mr项目(简单)的典型maven pom.xml如下所示:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.test</groupId>
<artifactId>hadoop.test</artifactId>
<version>0.0.1-SNAPSHOT</version>
<dependencies>
    <dependency>
        <groupId>org.apache.hadoop</groupId>
        <artifactId>hadoop-client</artifactId>
        <version>2.0.0-cdh4.2.0</version>
        <scope>provided</scope>
    </dependency>
</dependencies>

这就是优点:hadoop客户机封装了所有依赖项。
接下来是运行生成的jar文件的问题:
您可以有两种情况:
您尝试运行的m/c是集群的一部分,即安装和配置的hadoop。在这种情况下,“hadoopjar<>”命令应该包含所有与hadoop相关的依赖项。你得加上你的jar。
m/c没有安装hadoop。在本例中,您可以使用maven通过检查有效pom来获取jar列表。
希望这是清楚的。

相关问题