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

从Java客户端远程运行Hadoop作业,hadoop,mapreduce,hbase,Hadoop,Mapreduce,Hbase,我让VirtualBox虚拟机以伪分布式模式运行HBase和Hadoop。我修改了一些简单的MapReduce代码,以计算给定HBase表中的行数HBase MapReduce RowCounter代码。当我将修改后的代码编译成jar文件,将其传输到VM,并通过hadoop命令行正常运行时,一切都很好。但是,我希望能够从Windows机器上的Java客户端通过Java代码运行它,而不是通过ssh命令来执行hadoop命令行,即hadoop jar。当我尝试从Windows端Java客户端运行它时

我让VirtualBox虚拟机以伪分布式模式运行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.setmapred.jar将Java客户端指向该位置,hdfs:///RowCountTest.jar;. 但是,它仍然找不到该类,甚至不知道它是否在寻找jar

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


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

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

更改hadoop-env.sh文件后,必须重新启动mapreduce服务。 -求职者 -任务跟踪器

注:
MapReduce作业将在HADOOP\u CLASSPATH变量中指定的位置查找类JAR。

能否显示您的代码和完整错误?