【问题标题】:Right way to package and deploy Hadoop MapReduce job?打包和部署 Hadoop MapReduce 作业的正确方法?
【发布时间】:2014-03-25 14:30:51
【问题描述】:

我在本地节点 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 的 jar 修复了大约 10 个异常之后,我得到了一个非常好的:

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

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

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

部署 Hadoop MapReduce 作业的正确方法是什么? 我应该如何设置 Hadoop CLASSPATH 以在任何节点上运行 MapReduce 作业?

【问题讨论】:

  • 使用 maven 构建并拥有来自 Jackson 的 JSON 库等依赖项。 Jar 在我们的集群上部署得很好。你确定你的设置有正确的配置吗?

标签: java hadoop deployment jar mapreduce


【解决方案1】:

重申 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 相关的依赖项。您必须添加依赖的 jar。

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

希望清楚。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多