从Java客户端远程运行Hadoop作业

时间:2013-09-06 12:12:13

标签: hadoop mapreduce hbase

我有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能够识别存储在HDFS中的jar文件中的类文件需要做什么?

其次,您是否知道是否有任何方法可以将必要的类文件与作业一起“传递”到集群而无需预先加载jar文件?

1 个答案:

答案 0 :(得分:0)

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

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

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