1

我有 VirtualBox VM 在伪分布式模式下运行 HBase 和 Hadoop。我修改了一些简单的 MapReduce 代码来计算给定 HBase 表中的行数(Hbase MapReduce RowCounter 代码)。当我把修改后的代码编译成jar文件,传到VM,通过hadoop命令行正常运行,一切都很好。但是,我想做的是从我的 Windows 机器上的 Java 客户端运行它(从 Java 代码,而不是通过 ssh 命令来执行 hadoop 命令行 - 即 hadoop jar )。当我尝试从 Windows 端(Java 客户端)运行它时,所有必要的连接都建立在 VM 上的 Hadoop 和 HBase 中,但我收到一个“classnotfoundexception”,Hadoop 找不到我的 Mapper 类。

我已手动将 jar 文件复制到 HDFS 上,并尝试通过设置配置选项 (conf.set("mapred.jar", "hdfs:///RowCountTest.jar");) 将 Java 客户端指向该位置。但是,它仍然无法找到该类(不知道它是否正在寻找 jar)。

首先,您知道在从远程客户端运行作业时,为了让 Hadoop 识别 jar 存储的 HDFS 中的类文件需要做什么吗?

其次,你知道是否有任何方法可以在不预加载 jar 文件的情况下将必要的类文件与作业一起“传递”到集群中?

4

1 回答 1

0

您必须将 jar 文件复制到 LocalFileSystem 中的某个位置(而不是 HDFS),并在 hadoop-env.sh 文件中设置 HADOOP_CLASSPATH 变量以指向相同的位置。

更改 hadoop-env.sh 文件后,必须重新启动 mapreduce 服务。- JobTracker - TaskTracker

注意:MapReduce 作业将在 HADOOP_CLASSPATH 变量中指定的位置查找类(jar)。

于 2013-09-10T13:31:50.863 回答