【问题标题】:Running a R script using hadoop streaming Job Failing : PipeMapRed.waitOutputThreads(): subprocess failed with code 1使用 hadoop 流式运行 R 脚本作业失败:PipeMapRed.waitOutputThreads(): subprocess failed with code 1
【发布时间】:2013-07-03 14:31:11
【问题描述】:

我有一个在 R Colsole 中运行良好的 R 脚本,但是当我在 Hadoop 流中运行时,它在 Map 阶段失败并出现以下错误。查找任务尝试日志

我拥有的 Hadoop Streaming 命令:

/home/Bibhu/hadoop-0.20.2/bin/hadoop jar \
   /home/Bibhu/hadoop-0.20.2/contrib/streaming/*.jar \
   -input hdfs://localhost:54310/user/Bibhu/BookTE1.csv \
   -output outsid -mapper `pwd`/code1.sh

标准错误日志

Loading required package: class
Error in read.table(file = file, header = header, sep = sep, quote = quote,  : 
  no lines available in input
Calls: read.csv -> read.table
Execution halted
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:572)
    at org.apache.hadoop.streaming.PipeMapper.close(PipeMapper.java:136)
    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:358)
    at org.apache.hadoop.mapred.MapTask.run(MapTask.java:307)
    at org.apache.hadoop.mapred.Child.main(Child.java:170)

系统日志日志

2013-07-03 19:32:36,080 INFO org.apache.hadoop.metrics.jvm.JvmMetrics: Initializing JVM Metrics with processName=MAP, sessionId=
2013-07-03 19:32:36,654 INFO org.apache.hadoop.mapred.MapTask: numReduceTasks: 1
2013-07-03 19:32:36,675 INFO org.apache.hadoop.mapred.MapTask: io.sort.mb = 100
2013-07-03 19:32:36,835 INFO org.apache.hadoop.mapred.MapTask: data buffer = 79691776/99614720
2013-07-03 19:32:36,835 INFO org.apache.hadoop.mapred.MapTask: record buffer = 262144/327680
2013-07-03 19:32:36,899 INFO org.apache.hadoop.streaming.PipeMapRed: PipeMapRed exec [/home/Bibhu/Downloads/SentimentAnalysis/Sid/smallFile/code1.sh]
2013-07-03 19:32:37,256 INFO org.apache.hadoop.streaming.PipeMapRed: Records R/W=0/1
2013-07-03 19:32:38,509 INFO org.apache.hadoop.streaming.PipeMapRed: MRErrorThread done
2013-07-03 19:32:38,509 INFO org.apache.hadoop.streaming.PipeMapRed: PipeMapRed failed!
2013-07-03 19:32:38,557 WARN org.apache.hadoop.mapred.TaskTracker: Error running child
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:572)
    at org.apache.hadoop.streaming.PipeMapper.close(PipeMapper.java:136)
    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:358)
    at org.apache.hadoop.mapred.MapTask.run(MapTask.java:307)
    at org.apache.hadoop.mapred.Child.main(Child.java:170)
2013-07-03 19:32:38,631 INFO org.apache.hadoop.mapred.TaskRunner: Runnning cleanup for the task

【问题讨论】:

  • 你的脚本code1.sh异常退出。我认为可能有一些意外的输入导致您的 R 脚本崩溃。

标签: r hadoop mapreduce hadoop-streaming


【解决方案1】:
  1. hadoop-streaming-1.0.4.jar这样的完整版编写hadoopStreamming jar
  2. 使用 -file 选项为 mapper 和 reducer 指定单独的文件路径
  3. 使用 -mapper 和 -reducer 选项告诉 hadoop 哪个是您的映射器和缩减器代码

更多参考请参阅Running WordCount on Hadoop using R script

【讨论】:

    【解决方案2】:

    您需要从映射器和减速器中找到日志,因为这是作业失败的地方(如 java.lang.RuntimeException: PipeMapRed.waitOutputThreads(): subprocess failed with code 1 所示)。这表示您的 R 脚本崩溃了。

    如果您使用的是 Hortonworks Hadoop 发行版,最简单的方法是打开您的工作历史。它应该在 http://127.0.0.1:19888/jobhistory 。使用命令行应该也可以在文件系统中找到日志,但是我还没有找到。

    1. 在您的网络浏览器中打开http://127.0.0.1:19888/jobhistory
    2. 单击失败作业的作业 ID
    3. 单击数字表示失败的作业计数
    4. 点击尝试链接
    5. 点击日志链接

    你应该会看到一个类似的页面

    Log Type: stderr
    Log Length: 418
    Traceback (most recent call last):
      File "/hadoop/yarn/local/usercache/root/appcache/application_1404203309115_0003/container_1404203309115_0003_01_000002/./mapper.py", line 45, in <module>
        mapper()
      File "/hadoop/yarn/local/usercache/root/appcache/application_1404203309115_0003/container_1404203309115_0003_01_000002/./mapper.py", line 37, in mapper
        for record in reader:
    _csv.Error: newline inside string
    

    这是来自我的 Python 脚本的错误,来自 R 的错误看起来有点不同。

    来源:http://hortonworks.com/community/forums/topic/map-reduce-job-log-files/

    【讨论】:

      【解决方案3】:

      今晚我收到了同样的错误,同时还使用R 开发 Map Reduce Streaming 作业。

      我正在开发一个 10 节点集群,每个集群有 12 个核心,并尝试在提交时提供:

      -D mapred.map.tasks=200\
      -D mapred.reduce.tasks=200
      

      当我将这些更改为

      时,工作成功完成
      -D mapred.map.tasks=10\
      -D mapred.reduce.tasks=10
      

      这是一个神秘的修复,也许今晚会出现更多上下文。但如果有读者能解释清楚,请做!

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-04-30
        • 1970-01-01
        • 1970-01-01
        • 2019-03-25
        • 2022-10-25
        • 1970-01-01
        • 1970-01-01
        • 2018-01-13
        相关资源
        最近更新 更多