IDEA远程调试mapreduce程序

来源:互联网 发布:淘宝美工是干嘛的 编辑:程序博客网 时间:2024/05/23 16:09
之前很多人跑mapreduce任务只知道在在本地打成jar,提交到hadoop集群上去跑任务,如果出现错误往往很难定位错误,所以远程debug是开发中不可或缺的技能。通常大家都是在本地写好mapreduce任务,希望能在window环境下运行。

1.这里我的运行环境为:win10,IDEA2017.1.3
2.集群环境:系统centos7.hadoop2.6.0,共7个节点,其中nn节点192.168.236.100,rm节点为192.168.236.102.
3.以一个比较简单的wordcount为示范
4.中途遇到了一些问题的解决方法

配置
1.首先从拷贝集群的hadoop的文件夹,放在电脑磁盘的一个目录,这里我放在D盘

2.在本地配置环境变量:
HADOOP_HOME=D:\hadoop-2.6.0
HADOOP_BIN_PATH=%HADOOP_HOME%\bin
HADOOP_PREFIX=D:\hadoop-2.6.0

3.如果要在window上运行,必须需要对应版本的hadoop.dll放到C;\Windows\System32下
还有对应版本的winutils.exe放在D:\hadoop-2.6.0\bin

4.host文件最好改一下,把集群的ip地址和hostname配在一起

5.在IDEA创建maven项目
把集群上的core-site.xml,mapred-site.xml和yarn-site.xml文件配置到项目的resource目录下,其中把log4j.properties也放在下面。
其中log4j.properties配置如下:

log4j.rootLogger=INFO, stdout#log4j.logger.org.springframework=INFO#log4j.logger.org.apache.activemq=INFO#log4j.logger.org.apache.activemq.spring=WARN#log4j.logger.org.apache.activemq.store.journal=INFO#log4j.logger.org.activeio.journal=INFOlog4j.appender.stdout=org.apache.log4j.ConsoleAppenderlog4j.appender.stdout.layout=org.apache.log4j.PatternLayoutlog4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} | %-5.5p | %-16.16t | %-32.32c{1} | %-32.32C %4L | %m%n

6.pom.xml中配置

<dependencies>    <dependency>        <groupId>org.apache.hadoop</groupId>        <artifactId>hadoop-hdfs</artifactId>        <version>2.6.0</version>    </dependency>    <dependency>        <groupId>org.apache.hadoop</groupId>        <artifactId>hadoop-mapreduce-client-jobclient</artifactId>        <version>2.6.0</version>    </dependency>    <dependency>        <groupId>org.apache.hadoop</groupId>        <artifactId>hadoop-common</artifactId>        <version>2.6.0</version>    </dependency></dependencies>

8.编辑运行参数
这里写图片描述
添加输入输出hdfs上的路径

这里写图片描述
working directory选择之前配hadoop环境的目录

9.修改程序
给conf对象添加一些配置:

Configuration conf=new Configuration();System.setProperty("hadoop.home.dir", "D:\\hadoop2.6.0\\hadoop-2.6.0");conf.set("mapreduce.framework.name", "yarn");conf.set("fs.default.name", "hdfs://192.168.236.100:9000");conf.set("mapreduce.app-submission.cross-platform", "true");//跨平台提交

10.用maven打包程序,运行完的jar放在一个固定的路径下,然后在程序中设置

conf.set("mapred.jar","D:\\java\\mapreduce\\target\\mapreduce-1.0-SNAPSHOT-jar-with-dependencies.jar");

此时点击运行,就可以成功
这里写图片描述

问题
1.报不停地连接rm的8032端口,但是一直连不上的错误:
这个问题是由于集群的8032端口没开,要在yarn-site.xml里面配置rm的节点地址:

<property>   <name>yarn.resourcemanager.address</name>   <value>192.168.236.102:8032</value></property>

2.administrator没有权限访问集群上hadoop中的/tmp目录
这是由于本机的administrator没有操作hadoop目录的权限,需要配置hadoop_name,为方便起见就不在环境变量里面配置,直接在程序中加入:

System.setProperty("HADOOP_USER_NAME", "hadoop");

这里的hadoop是我集群的用户,配置完了之后就可以运行了。
如果出现其他错误,可以检查一下集群是否运行正常。

原创粉丝点击