IDEA远程调试mapreduce程序

之前很多人跑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=INFO
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.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是我集群的用户,配置完了之后就可以运行了。
如果出现其他错误,可以检查一下集群是否运行正常。

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值