解决RHadoop错误:PipeMapRed.waitOutputThreads(): subprocess failed with code 1

RHadoop实践系列文章,包含了R语言与Hadoop结合进行海量数据分析。Hadoop主要用来存储海量数据,R语言完成MapReduce 算法,用来替代Java的MapReduce实现。有了RHadoop可以让广大的R语言爱好者,有更强大的工具处理大数据1G, 10G, 100G, TB, PB。 由于大数据所带来的单机性能问题,可能会一去不复返了。

RHadoop实践是一套系列文章,主要包括”Hadoop环境搭建”,”RHadoop安装与使用”,R实现MapReduce的协同过滤算法”,”HBase和rhbase的安装与使用”。对于单独的R语言爱好者,Java爱好者,或者Hadoop爱好者来说,同时具备三种语言知识并不容 易。此文虽为入门文章,但R,Java,Hadoop基础知识还是需要大家提前掌握。

关于作者:

  • 张丹(Conan), 程序员Java,R,PHP,Javascript
  • weibo:@Conan_Z
  • blog: http://blog.fens.me
  • email: bsspirit@gmail.com

转载请注明出处:
http://blog.fens.me/rhadoop-rmr2-pipemapred/

rhadoop-pipemapred

前言

一行错误难倒一片同学,今天在准备 统计之都沙龙 的时候,我也遇到相同的错误。就让我来解决一下,在使用rhadoop的rmr2中,经常会遇到的一个错误。

按照 RHadoop实践系列之二:RHadoop安装与使用 rmr2中实例所演示。


> small.ints = to.dfs(1:10)
> mapreduce(input = small.ints, map = function(k, v) cbind(v, v^2))
> from.dfs("/tmp/RtmpWnzxl4/file5deb791fcbd5")

 

文章目录:

  1. rmr2运行错误日志
  2. 定位错误到hadoop日志
  3. 从hadoop入手找解决办法 — 失败
  4. 从rhadoop入手找解决办法 — 成功

 

1. rmr2运行错误日志

R执行的错误日志如下面:

packageJobJar: [/tmp/Rtmpdf7egm/rmr-local-env3cbb70983, /tmp/Rtmpdf7egm/rmr-global-env3cbb654b85fe, /tmp/                        Rtmpdf7egm/rmr-streaming-map3cbba213f2e, /home/conan/hadoop/tmp/hadoop-unjar1697638502297829404/] [] /tmp                        /streamjob4620072667602885650.jar tmpDir=null
13/06/23 10:44:25 INFO mapred.FileInputFormat: Total input paths to process : 1
13/06/23 10:44:25 INFO streaming.StreamJob: getLocalDirs(): [/home/conan/hadoop/tmp/mapred/local]
13/06/23 10:44:25 INFO streaming.StreamJob: Running job: job_201306231032_0001
13/06/23 10:44:25 INFO streaming.StreamJob: To kill this job, run:
13/06/23 10:44:25 INFO streaming.StreamJob: /home/conan/hadoop/hadoop-1.0.3/libexec/../bin/hadoop job  -D                        mapred.job.tracker=hdfs://master:9001 -kill job_201306231032_0001
13/06/23 10:44:25 INFO streaming.StreamJob: Tracking URL: http://master:50030/jobdetails.jsp?jobid=job_20                        1306231032_0001
13/06/23 10:44:26 INFO streaming.StreamJob:  map 0%  reduce 0%
13/06/23 10:45:04 INFO streaming.StreamJob:  map 100%  reduce 100%
13/06/23 10:45:04 INFO streaming.StreamJob: To kill this job, run:
13/06/23 10:45:04 INFO streaming.StreamJob: /home/conan/hadoop/hadoop-1.0.3/libexec/../bin/hadoop job  -Dmapred.job.tracker=hdfs://master:9001 -kill job_201306231032_0001
13/06/23 10:45:04 INFO streaming.StreamJob: Tracking URL: http://master:50030/jobdetails.jsp?jobid=job_201306231032_0001
13/06/23 10:45:04 ERROR streaming.StreamJob: Job not successful. Error: # of failed Map Tasks exceeded allowed limit. FailedCount: 1. LastFailedTask: task_201306231032_0001_m_000000
13/06/23 10:45:04 INFO streaming.StreamJob: killJob...
Streaming Command Failed!
Error in mr(map = map, reduce = reduce, combine = combine, vectorized.reduce,  :
  hadoop streaming failed with error code 1

我们光看上面的日志,根本发现不了hadoop的实际错误是什么!

2. 定位错误到hadoop日志

接下来需要定位到实际错误的位置。为了方便查询日志,我们打开jobtracker的控制台:http://192.168.1.210:50030/jobtracker.jsp
并找到刚才出现错误的, 日志中有提示的网页位置, Tracking URL: http://master:50030/jobdetails.jsp?jobid=job_201306231032_0001

rhadoop

查看map的错误,现在已经明确有了错误定义。


Running a job using hadoop streaming and mrjob: PipeMapRed.waitOutputThreads(): subprocess failed with code 1
java.lang.RuntimeException: PipeMapRed.waitOutputThreads(): subprocess failed with code 1 at 
org.apache.hadoop.streaming.PipeMapRed.waitOutputThreads(PipeMapRed.java:362) at 
org.apache.hadoop.streaming.PipeMapRed.mapRedFinished(PipeMapRed.java:576) at 
org.apache.hadoop.streaming.PipeMapper.close(PipeMapper.java:135) at 
org.apache.hadoop.mapred.MapRunner.run(MapRunner.java:57) at 
org.apache.hadoop.streaming.PipeMapRunner.run(PipeMapRunner.java:36) at 
org.apache.hadoop.mapred.MapTask.runOldMapper(MapTask.java:436) at 
org.apache.hadoop.mapred.MapTask.run(MapTask.java:372) at 
org.apache.hadoop.mapred.Child$4.run(Child.java:255) at 
java.security.AccessController.doPrivileged(Native Method) at 
javax.security.auth.Subject.doAs(Subject.java:396) at 
org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1121) at 
org.apache.hadoop.mapred.Child.main(Child.java:249)

3. 从hadoop入手找解决办法 — 失败

查看hadoop错误列表:code 1的错误
“OS error code 1: Operation not permitted”"OS error code 2: No such file or directory”

我来分析一下:hadoop和R的用户和用户组

启动hadoop, 用户conan, 用户组conan
启动R, 用户conan, 用户组conan

既然都是相同权限的用户,怎么会有权限的问题呢。

再找另一个hadoop环境做测试,用户使用root,没有错误如文章所示,RHadoop实践系列之二:RHadoop安装与使用

好了,这样问题已经很具体了,我们去网上查找一下错误原因。

通过google搜索,找到 org.apache.hadoop.security.AccessControlException解决办法文章
http://www.51testing.com/?uid-445759-action-viewspace-itemid-821244

具体的错误原因,在文章中有写,我就不再列出了。我们参考他的方法二,对我们的hadoop环境进行调整。
在hdfs-site.xml中增加dfs.permissions.superusergroup的定义。

superusergroup,默认值用什么我们可以在系统中查一下。


~ hadoop fs -ls /
drwxr-xr-x   - conan supergroup          0 2013-04-24 01:52 /hbase
drwxr-xr-x   - conan supergroup          0 2013-04-25 04:59 /home
drwxr-xr-x   - conan supergroup          0 2013-06-23 10:44 /tmp
drwxr-xr-x   - conan supergroup          0 2013-04-24 19:28 /user

这样就得到了supergroup的名字是supergroup, 我们修改hdfs-site.xml,增加dfs.permissions.superusergroup的定义


~ vi $HADOOP_HOME/conf/hdfs-site.xml

<configuration>
<property>
<name>dfs.data.dir</name>
<value>/home/conan/hadoop/data</value>
</property>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<property>
<name>dfs.permissions</name>
<value>false</value>
</property>
<property>
<name>dfs.permissions.superusergroup</name>
<value>supergroup</value>
</property>
</configuration>

重启hadoop,重启R程序,重新执行rmr2脚本。还是有错误,没有解决问题。

4. 从rhadoop入手找解决办法 — 成功

我们找到rhadoop的作者github的issue 122:
https://github.com/RevolutionAnalytics/RHadoop/issues/122

发现其他人也遇到了,类似的错误。这issue已经是closed状态,证明错误已经解决。
根据作者的回答我们发现,错误是由于:“R的类库在特定的用户下面,而不是标准合位置,导致类库不能被hadoop找到”。

在我们的环境中,发现也是同样的配置,与错误描述一致。


~ R
> .libPaths()
[1] "/home/conan/R/x86_64-pc-linux-gnu-library/2.15"
[2] "/usr/local/lib/R/site-library"
[3] "/usr/lib/R/site-library"
[4] "/usr/lib/R/library"

~ ls /home/conan/R/x86_64-pc-linux-gnu-library/2.15
colorspace  functional  iterators  munsell  RColorBrewer  rhdfs    rmr2
dichromat   ggplot2     itertools  plyr     Rcpp          rJava    scales
digest      gtable      labeling   proto    reshape2      RJSONIO  stringr

~ ls /usr/local/lib/R/site-library

我们环境安装的所有类库,都在/home/conan目录下面,而/usr/local/lib/R/site-library一个库类都没有。

我们按照rhadoop作者指示,把包进行重新安装。


#切换到root下面
~ sudo -i

#查看R的类库路径
~ R
> .libPaths()
[1] "/usr/local/lib/R/site-library" "/usr/lib/R/site-library"
[3] "/usr/lib/R/library"

#在root下进行安装
~ R CMD javareconf 
~ R

#启动R程序
install.packages("rJava")
install.packages("reshape2")
install.packages("Rcpp")
install.packages("iterators")
install.packages("itertools")
install.packages("digest")
install.packages("RJSONIO")
install.packages("functional")

~ cd /home/conan/R
~ R CMD INSTALL rmr2_2.1.0.tar.gz
~ ls /usr/local/lib/R/site-library
digest  functional  iterators  itertools  plyr  Rcpp  reshape2  rJava  RJSONIO  rmr2  stringr

依赖包都安装在了/usr/local/lib/R/site-library下面,我们退出root用户,重新启动R程序测试


~ exit
~ whoami
conan

~ R
> library(rmr2)
Loading required package: Rcpp
Loading required package: RJSONIO
Loading required package: digest
Loading required package: functional
Loading required package: stringr
Loading required package: plyr
Loading required package: reshape

#再次运行 rmr2程序
> small.ints = to.dfs(1:10)
> mapreduce(input = small.ints, map = function(k, v) cbind(v, v^2))

packageJobJar: [/tmp/RtmpM87JEc/rmr-local-env1c7588ca7ed, /tmp/RtmpM87JEc/rmr-global-env1c77fdcab5f, /tmp                       /RtmpM87JEc/rmr-streaming-map1c76a4ddf6e, /home/conan/hadoop/tmp/hadoop-unjar6992113986427459004/] [] /tm                       p/streamjob2762947354578034435.jar tmpDir=null
13/06/23 13:27:36 INFO mapred.FileInputFormat: Total input paths to process : 1
13/06/23 13:27:36 INFO streaming.StreamJob: getLocalDirs(): [/home/conan/hadoop/tmp/mapred/local]
13/06/23 13:27:36 INFO streaming.StreamJob: Running job: job_201306231141_0007
13/06/23 13:27:36 INFO streaming.StreamJob: To kill this job, run:
13/06/23 13:27:36 INFO streaming.StreamJob: /home/conan/hadoop/hadoop-1.0.3/libexec/../bin/hadoop job  -D                       mapred.job.tracker=hdfs://master:9001 -kill job_201306231141_0007
13/06/23 13:27:36 INFO streaming.StreamJob: Tracking URL: http://master:50030/jobdetails.jsp?jobid=job_20                       1306231141_0007
13/06/23 13:27:37 INFO streaming.StreamJob:  map 0%  reduce 0%
13/06/23 13:27:51 INFO streaming.StreamJob:  map 100%  reduce 0%
13/06/23 13:27:58 INFO streaming.StreamJob:  map 100%  reduce 100%
13/06/23 13:27:58 INFO streaming.StreamJob: Job complete: job_201306231141_0007
13/06/23 13:27:58 INFO streaming.StreamJob: Output: /tmp/RtmpM87JEc/file1c722c5c6ae

执行成功, 错误解决!!

本文从发现错误,定位错误,查找错误,解决错误,4个步骤解决上面的问题。
希望给遇到问题束手无策的同学,不仅提供直接的错误帮助,更有一个思路上的认识,提高自己的动手能力!!

转载请注明出处:
http://blog.fens.me/rhadoop-rmr2-pipemapred/

打赏作者

This entry was posted in Hadoop实践, R语言实践

hadoop离线任务出错:PipeMapRed.waitOutputThreads 今天使用hadoop跑一个离线任务失败,通过yarn管理器log查看,出现如下错误: 2019-12-11 06:40:33,242 FATAL [IPC Server handler 6 on 35937] org.apache.hadoop.mapred.TaskAttemptListenerImpl: Task: attempt_1576072784615_0011_m_000001_2 ... 阅读详情

相关推荐

PipeMapRed.waitOutputThreads(): subprocess failed with code 1 报错的解决方法

       我在写MapReduce程序时,在本地运行使用cat file.data | python mapper.py | sort k1,1 | python reducer.py &gt;result.data进行测试时,程序可以输出正确结果,程序运行正常,但是在编写shell脚本提交在hadoop集群进行运算时,出现了"PipeMapRed.waitOutputThreads(): s...

leo_weile的博客 8818

Hadoop 常见出错信息及处理方法

错误代码1PipeMapRed.waitOutputThreads(): subprocess failed with code 1 错误说明:mapper或reducer执行中报错。python的报错日志可以通过如下方式找到: 点击导致作业失败的task连接 点击任务列表最右边的last 8kb 点击 stderr 即可看到python执行中的报错信息了 错

nanfenglei23的专栏 1460

PipeMapRed.waitOutputThreads(): subprocess failed with code 1

运行任务时,报出  PipeMapRed.waitOutputThreads(): subprocessfailed with code 1解决办法:在run.sh 中增加    -D "stream.non.zero.exit.is.failure=false"\2、在执行streaming任务时,出现:Environment variable CLASSPATH not set!解决方法: ...

zhc794429974的博客 1445

Hadoop Streaming 常见错误(不断更新ing)

1、streaming默认的情况下,mapper和reducer的返回值不是0,被认为异常任务,将被再次执行,默认尝试4次都不是0,整个job都将失败 java.lang.RuntimeException: PipeMapRed.waitOutputThreads(): subprocess failed wi th code 1 at org.apache.hadoop.streamin

deqingguo的专栏 1万+

HDFS Permissions Guide

HDFS Permission Guide Overview HDFS实现了一个文件和目录权限模型,拥有很多POXIS模型的影子。每个文件和目录与一个所有者和一个用户组相关联。文件或目录有各自的用户权限,用户包括所有者,所有者同组的其他用户,所有其他的用户。对于文件来说,r权限代表读文件,w权限代表写或者追加数据到文件。对于目录,r表示可以列出目录的内容,w权限代表可以创建或者删除文件或目录,

来啊 快活啊 2697

PipeMapRed.waitOutputThreads(): subprocess failed with code N

经常遇到的exception是:PipeMapRed.waitOutputThreads(): subprocess failed with code N "OS error code 1: Operation not permitted" "OS error code 2: No such file or directory" "OS error code 3: No such p

bitcarmanlee的博客 3071

dfs.permissions.superusergroup详解

此参数主要是配置hdfs的超级部门,默认值是supergroup。

行路中 748

Error: java.lang.RuntimeException: PipeMapRed.waitOutputThreads(): subprocess failed with code 127

最近在学大数据来到了MapReduce编程这块- - 用以下这段代码 即使用Hadoop-Streaming运行就tm一直报错 hadoop jar /opt/hadoop-2.7.3/share/hadoop/tools/lib/hadoop-streaming-2.7.3.jar -input /ncdc -output /ncdc_out -mapper max_temp_map.py -reducer max_temp_reduce.py -file max_temp_map.py -file ma

辜月 3152

聊聊HDFS中的权限管理

HDFS是一个面向多用户的分布式文件系统。既然是多用户,那么不同用户存储的文件通常需要进行权限隔离,防止被其他用户修改或误删。本文就来聊聊HDFS中的权限管理。权限校验要启用权限校验,首先...

hncscwc的博客 3501

HDFS权限管理设置

这里写自定义目录标题一、HDFS权限相关的配置参数1.1.配置HDFS权限1.2.配置HDFS超级用户二、更改HDFS集群中文件属性的常用命令2.1.chmod命令2.2. chown命令2.3.chgrp命令三、HDFS访问控制列表3.1.与ACL相关的命令概述3.2.使用getfacl命令检查目录或文件上当前的ACL信息(若之前没有启用ACL功能,默认是没有ACL策略的)3.3.使用setfacl命令为目录或文件设置ACL策略3.4.使用chmod命令更改文件权限,而后在看它对新ACL掩码的影响3.5.

c18092694487t的博客 1万+

Hadoop集群,报java.lang.RuntimeException: PipeMapRed.waitOutputThreads(): subprocess failed with code 1

跑任务先生,在Hadoop的集群,报错误:了java.lang.RuntimeException:PipeMapRed.waitOutputThreads():子与代码1未能        在org.apache.hadoop.streaming.PipeMapRed.waitOutputThreadsPipeMapRed.java:322)        在org.apache.hadoop....

Jameslvt的博客 2432

java.lang.RuntimeException: PipeMapRed.waitOutputThreads(): subprocess failed with code 1

hadoop中运行mapreduce出现PipeMapRed错误排查 在执行mapreduce过程中发现此错误后进行排查,一般都是因为代码出现错误导致的,之前有过几次经验,将错误可能出现的地方列举出来: 1. run.sh检查 run.sh,可能执行过程中mapper_func写成mapper_fun,找不到此方法,也可能执行命令本地没有white_list,偏偏加一句white_list执...

狼之鸿的博客 7356

Mapreduce运行任务出现Error: java.lang.RuntimeException: PipeMapRed.waitOutputThreads()

1、最近运行MapReduce任务一直出现下面这个问题,找人帮忙看,最后终于发现问题的点了,原来是自己代码有点问题,一个方法名写错了,导致这个问题困扰了自己很久,下面我就将问题的错误贴出来,错误如下:packageJobJar: [./map.py, /tmp/hadoop-unjar6994337348538798719/] [] /tmp/streamjob533264488913751022...

u013982921的专栏 1万+

MapReduce FAILED Error: java.lang.RuntimeException: PipeMapRed.waitOutputThreads(): subprocess

MapReduce任务报错 FAILED Error: java.lang.RuntimeException: PipeMapRed.waitOutputThreads(): subprocess failed with code 1 在跑MapReduce任务时,遇到过几次这样的错误,现整理已经踩过的坑 大部分情况报这个错的原因是:使用的udf文件脚本本身有问题,避免踩坑的方法也很简单,线下单独跑一边脚本即可 udf脚本没问题,问题出在脚本中需要调用配置文件,但是在MapReduce中未添加该文件名。

Airstudy的博客 789

Hadoop3.2.0 HDFS权限指南

概述 用户身份 组映射 许可检查 了解实施 对文件系统API的更改 对应用程序外壳的更改 超级用户 Web服务器 ACL(访问控制列表) ACL文件系统API ACL Shell命令 配置参数 概述 Hadoop分布式文件系统(HDFS)实现了共享大部分POSIX模型的文件和目录的权限模型。每个文件和目录都与所有者和组相关联。对于作为所有者的用户,作为该组成员的其他用户以...

张伯毅的专栏 8936

2021-12-16 hadoop3:目录树

本文基于源码hadoop-3.3.0,个人理解欢迎指正。 目录 1 概述 2 FSDirectory源码 2.1 构造函数 2.2 变量 2.3 关于此类的方法 3 INode 3.1 构造函数 3.2 主要变量 3.3 操作权限 3.4 INodeDirectory 3.5 INodeFile 1 概述 namenode的一个重要作用就是维护集群中的文件目录树。对于hdfs的namespace的状态,Hadoop中提供了FSDirectory和FSNamesystem两个类进行

cn987654的博客 1601
上一篇: upstart封装mongodb应用为系统服务
下一篇: COS沙龙第九期:RHadoop分享会来袭 圆满成功
Fens
博客等级 码龄25年 126粉丝 277原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值