Windows提交HBase MapReduce任务至Linux伪集群失败求助
HBase MapReduce跨平台提交问题解决方案
核心问题梳理
- 任务类未上传至HDFS staging目录:
findContainingJar方法获取的URL协议始终为file,说明任务类从Windows本地文件系统加载,而非打包后的Jar包,导致Hadoop无法自动识别并上传至集群 - AM容器异常退出:报错
/bin/bash: 0 line:fg: no job control,本质是Application Master找不到任务主类,触发启动脚本异常;容器日志无法查看大概率和任务类未上传导致的启动失败有关 - 依赖库已正常上传至HDFS,但任务类相关文件缺失
针对性修复步骤
1. 解决Jar包识别与上传问题
- 先打包任务为可执行Jar:
在IDEA中操作:- 按
Ctrl+Alt+Shift+S打开Project Structure,选择Artifacts - 点击
+→JAR→From modules with dependencies,指定任务主类 - 选择将依赖打包进Jar包(避免依赖路径问题),执行
Build→Build Artifacts生成Jar到本地目录
- 按
- 显式指定Jar包路径:
在Job提交代码中添加Jar路径配置,替代自动查找逻辑:Configuration conf = HBaseConfiguration.create(); Job job = Job.getInstance(conf, "YourHBaseMRJobName"); // 替换为本地生成的Jar包绝对路径 job.setJar("D:\\your-project-path\\out\\artifacts\\your-jar-name.jar"); job.setJarByClass(YourMainClass.class); // 其他Job配置(Mapper/Reducer类、输入输出等) - IDEA运行配置强制指定Jar:
在Run/Debug配置的VM options中添加参数:-Dmapreduce.job.jar=D:\\your-project-path\\out\\artifacts\\your-jar-name.jar
2. 修复AM容器fg: no job control报错
- 完成Jar包正确上传后,AM能正常找到主类,该报错通常会自动消失
- 若仍存在,检查集群
yarn-site.xml配置:<property> <name>yarn.nodemanager.container-executor.class</name> <value>org.apache.hadoop.yarn.server.nodemanager.DefaultContainerExecutor</value> </property> <property> <name>yarn.nodemanager.log-dirs</name> <value>/var/log/hadoop-yarn/containers</value> </property> - 手动查看容器日志:登录Linux集群,到
/var/log/hadoop-yarn/containers或HDFS路径/tmp/logs/<your-username>/logs下,根据任务ID查找对应日志文件
3. 验证任务类上传状态
提交任务后,执行以下命令检查staging目录:
./bin/hadoop fs -ls /tmp/hadoop-yarn/staging/<your-linux-username>/.staging/<job-id>/
若能看到任务Jar包,说明上传成功
内容的提问来源于stack exchange,提问作者PnEndless
相关产品推荐
相关产品推荐

