Intellij IDEA远程向hadoop集群提交mapreduce作业,需要依赖到hadoop的库,hadoop集群的配置信息,还有本地项目的jar包。
一、软件环境
(1)window本地安装hadoop软件
首先将集群上的hadoop环境下载到本地,本文是在“A:\soft\hadoop-2.6.0”
(2)设置环境变量HADOOP_HOME
HADOOP_HOME=A:\soft\hadoop-2.6.0
HADOOP_BIN_PATH=%HADOOP_HOME%\bin
HADOOP_PREFIX=A:\soft\hadoop-2.6.0
PATH追加路径;%HADOOP_HOME%\bin
注意:配置好环境变量重启电脑
(3)添加winutils.exe和hadoop.dll(x86)
下载对应版本的文件:https://github.com/steveloughran/winutils
winutils.exe放置到HADOOP_HOME/bin下
hadoop.dll放置到HADOOP_HOME/bin和C:\Windows\System32下
选择正确的版本,下载相同版本的hadoop.dll,或者版本稍高
注意:hadoop-2.6.0的hadoop.dll大小是94KB,网上的其他hadoop.dll的大小不一样的不是2.6.0版本的。
常见问题:
1)Failed to locate the winutils binary in the hadoop binary path
java.io.IOException: Could not locate executable HADOOP_HOME\bin\winutils.exe in the Hadoop binaries.
HADOOP_HOME/bin没有winutils.exe
2)Could not locate executable null \bin\winutils.exe in the hadoop binaries
环境变量未生效
3)Unable to load native-hadoop library for your platform… using builtin-Java classes where applicable
4)java.lang.UnsatisfiedLinkError: org.apache.hadoop.util.NativeCrc32.nativeComputeChunkedSumsByteArray
hadoop.dll未放置到C:\Windows\System32或者hadoop.dll文件不正确
二、项目设置
(1)配置文件
拷贝hadoop集群中配置文件core-site.xml、mapred-site.xml、yarn-site.xml到项目,以及设置log4j.properties文件
(2)设置配置文件的host
(3)设置项目打包
右击项目名称,选择Open Module Settings,选择Artifacts,点击中间绿色的+号,选择JAR,再选择From module with dependencies,填写启动主类MainClass保存
(4)跨平台设置
Configuration conf = new Configuration();conf.set("mapreduce.app-submission.cross-platform", "true");
//跨平台提交,在windows下如果没有这句代码会报错 "/bin/bash: line 0: fg: no job control"
(5)设置jar路径,否则hadoop会找不到jar
项目的jar输出路径为.\\out\\artifacts\\hadoop_test_jar\\hadoop-test.jar,在项目打包设置的输出路径
Job job = new Job(conf, "word count");
String jar = ".\\out\\artifacts\\hadoop_test_jar\\hadoop-test.jar";
job.setJar(jar);//项目打包的jar设置到jar
job.setJarByClass(WordCount.class);
常见问题:
1)Exception message: /bin/bash: 第 0 行:fg: 无任务控制
Stack trace: ExitCodeException exitCode=1: /bin/bash: 第 0 行:fg: 无任务控制
未设置跨平台提交job
2)Error: java.lang.RuntimeException: java.lang.ClassNotFoundException: Class com.mk.mapreduce.WordCount$MyMapper not found
未设置job.setJar()方法
3)system times on machines may be out of sync
1、安装ntpdate工具
#cenos
yum -y install ntp ntpdate
#ubuntu
sudo apt install ntp ntpdate
2、 设置系统时间与网络时间同步
ntpdate cn.pool.ntp.org