我有 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 文件的情况下将必要的类文件与作业一起“传递”到集群中?