正确的打包和部署Hadoop MapReduce作业的方法



我在本地节点CentOS上运行Hadoop 2.2.0.2.0.6.0-101。

当我在Eclipse项目中包含/usr/lib/hadoop/usr/lib/hive所需的jar文件时,我的MapReduce作业将在Eclipse中编译。找到必要的罐子是一个真正的任务!grep是我做这项工作的唯一工具,做grep -ri -l "FacebookService" /usr/lib/hadoop

这样的事情

尽管如此,当我试图在我编译它的同一本地节点上运行我的应用程序时,我会得到例外。我放弃了试图找到必要的罐子-一个异常修复后出现了一个新的。

现在,在通过添加/usr/lib/hadoop/usr/lib/hive的罐子固定了大约10个例外之后,我得到了一个真正的好:

java.io.IOException: Cannot initialize Cluster. Please check your configuration for mapreduce.framework.name and the correspond server addresses.

有趣的部分:当我从这些目录中添加所有 jar时,我的程序运行!

最后一个解决方案在我的情况下不起作用,因为我需要创建一个自给自足的包来在另一个分布式Hadoop安装上运行我的应用程序。

如何正确部署Hadoop MapReduce作业?如何设置Hadoop CLASSPATH在任意节点上运行MapReduce作业?

重申一下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-client封装所有依赖项的美妙之处。

关于运行生成的jar文件的问题:

你可以有两种情况:

  1. 您正在尝试运行的m/c是集群的一部分,即安装和配置hadoop。在这种情况下,命令"hadoop jar <>"应该包含所有hadoop相关的依赖项。

  2. 系统没有安装hadoop。在这种情况下,您可以使用maven通过检查有效的POM来获取jar列表。

相关内容

  • 没有找到相关文章

最新更新