gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 14:58:57 26 4
gpt4 key购买 nike

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

当我将 /usr/lib/hadoop/usr/lib/hive 中的必要 jar 作为 Eclipse 项目中的依赖项包含时,我的 MapReduce 作业在 Eclipse 中编译。寻找必要的 jar 是一项真正的任务! grep 是我完成这项工作的唯一工具,它可以执行诸如 grep -ri -l "FacebookService"/usr/lib/hadoop

尽管如此,当我尝试在编译它的同一本地节点上运行我的应用程序时,我遇到了异常。我放弃了寻找必要的 jar 的尝试——在一个异常被修复后,一个新的异常出现了。

现在,在通过从 /usr/lib/hadoop/usr/lib/hive 添加 jar 修复了大约 10 个异常之后,我得到了一个非常好的:

java.io.IOException:无法初始化集群。请检查您的配置中的 mapreduce.framework.name 和相应的服务器地址。

有趣的部分:当我从这些目录添加所有 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 相关的依赖项。您将必须添加依赖的 jar。

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

希望它是清楚的。

关于java - 打包和部署 Hadoop MapReduce 作业的正确方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22637621/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com