运行hadoop MapReduce程序常见错误及解决方法整理

一、Permission denied

1、Win系统下用Eclipse中运行远程hadoop MapReduce程序出现报错

org.apache.hadoop.security.AccessControlException: org.apache.hadoop.security.AccessControlException: Permission denied: user=xxx, access=WRITE, inode="xxx":xxx:supergroup:rwxr-xr-x
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
因为Eclipse使用hadoop插件提交作业时,会默认用windows系统的用户去将作业写入hdfs文件系统中, 由于此用户对hadoop目录并没有写入权限,所以导致异常的发生。

解决方法为:

方法一:放开 hadoop 目录的权限 , 命令如下 :$ hadoop fs -chmod -R 777 /


当然,也可以只针对某个目录操作:


如对命令不熟悉,可以直接用如下命令查看:



方法二:直接在hdfs的配置文件中,将dfs.permissions修改为False


二、空指针错误:

在我的上篇hadoop2.2.0安装教程中有人遇到空指针错误:“Exception in thread "main" java.lang.NullPointerException”

该错误的修正,需做如下操作:

1、下载hadoop.dll、winutils.exe文件放到eclipse所连接的hadoop的bin目录下(win系统里边);

2、win系统里边的C盘下的system32目录放一份;

3、环境变量的PATH里边加一下1中的bin目录。

三、有人日志打不出来,报警告信息:

log4j:WARN No appenders could be found for logger (org.apache.hadoop.metrics2.lib.MutableMetricsFactory).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
这个需要在项目的src下面新建file名为log4j.properties的文件

内容为:

# Configure logging for testing: optionally with log file

#log4j.rootLogger=debug,appender
log4j.rootLogger=info,appender
#log4j.rootLogger=error,appender

#\u8F93\u51FA\u5230\u63A7\u5236\u53F0
log4j.appender.appender=org.apache.log4j.ConsoleAppender
#\u6837\u5F0F\u4E3ATTCCLayout
log4j.appender.appender.layout=org.apache.log4j.TTCCLayout
如图所示:


四、自己在eclipse打的jar包放到linux中运行时报错:

Exception in thread "main" java.lang.ClassNotFoundException:后边跟着自定义参数(如目录等)

解决方法:

1、可以重新在eclipse中打包,打包时记得选择main class。

2、另外,可以在打包时选择“Runnable JAR file”,打成java运行jar包。(该种方法会把程序中相关的包都打进去,会比较大,不过可以保证能运行)








  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Hadoop编写MapReduce程序是指使用Hadoop框架来实现MapReduce算法。MapReduce是一种分布式计算模型,它将大规模数据集分成小的数据块,然后在分布式计算集群上并行处理这些数据块。MapReduce程序由两个部分组成:Map和Reduce。 Map阶段:Map阶段将输入数据分成小的数据块,然后对每个数据块进行处理,生成键值对。Map阶段的输出结果是一个键值对列表。 Reduce阶段:Reduce阶段将Map阶段输出的键值对列表进行合并,生成最终的输出结果。Reduce阶段的输出结果是一个键值对列表。 编写MapReduce程序的步骤如下: 1. 定义Map函数:Map函数将输入数据分成小的数据块,然后对每个数据块进行处理,生成键值对。 2. 定义Reduce函数:Reduce函数将Map函数输出的键值对列表进行合并,生成最终的输出结果。 3. 定义输入格式:定义输入数据的格式,例如文本文件、CSV文件等。 4. 定义输出格式:定义输出数据的格式,例如文本文件、CSV文件等。 5. 配置Hadoop环境:配置Hadoop环境,包括Hadoop的安装、配置、启动等。 6. 编写MapReduce程序:编写MapReduce程序,包括Map函数、Reduce函数、输入格式、输出格式等。 7. 运行MapReduce程序:将编写好的MapReduce程序提交到Hadoop集群上运行。 8. 查看输出结果:查看MapReduce程序的输出结果,进行调试和优化。 以上就是Hadoop编写MapReduce程序的基本步骤。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值