gpt4 book ai didi

python - HadoopStreaming R作为 reducer 失败

转载 作者:行者123 更新时间:2023-12-02 21:42:58 25 4
gpt4 key购买 nike

我正在编写一个hadoop流作业,其中的映射器是用Python编写的简单数据清理操作,在reducer部分中,我想使用R运行某些时间序列分析。但是,调试mapreduce任务本身并不是那么容易,最终以识别键和值的方式编写我的reducer,然后将它们写到未经修改的结果中。但是,它仍然无法正常工作,我的python代码执行的功能完全相同,没有问题。

当使用R作为 reducer 进行划线工作时,错误消息如下所示:

Error: java.lang.RuntimeException: PipeMapRed.waitOutputThreads(): subprocess failed with code 1 
at org.apache.hadoop.streaming.PipeMapRed.waitOutputThreads(PipeMapRed.java:320) at
org.apache.hadoop.streaming.PipeMapRed.mapRedFinished(PipeMapRed.java:533) at
org.apache.hadoop.streaming.PipeReducer.close(PipeReducer.java:134) at
org.apache.hadoop.io.IOUtils.cleanup(IOUtils.java:237) at
org.apache.hadoop.mapred.ReduceTask.runOldReducer(ReduceTask.java:459) at
org.apache.hadoop.mapred.ReduceTask.run(ReduceTask.java:392) at
org.apache.hadoop.mapred.YarnChild$2.run(YarnChild.java:167) at
java.security.AccessController.doPrivileged(Native Method) at
javax.security.auth.Subject.doAs(Subject.java:415) at
org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1554) at

org.apache.hadoop.mapred.YarnChild.main(YarnChild.java:162)

我正在4个数据节点(每个64GB内存)的群集上运行此流作业,它总共产生了约500个映射器和60个reducer。我的两种语言的 reducer 代码已发布。任何建议或帮助,不胜感激!

这是reducer.py
#!/usr/bin/python
import sys
delimiter = '\t'

for line in sys.stdin:
line = line.strip()
mykey, myvalue = line.split(delimiter)
print delimiter.join([mykey, myvalue])

这是 reducer
#!/usr/bin/Rscript
library(dplyr)
library(outliers)
library(zoo)
library(forecast)
#library(tsoutliers)

f <- file("stdin")
open(f, open="r")
options(warn=-1)

mydelimiter <- '\t'

sink('/dev/null')
while(length(line<-readLines(f, n=1)) > 0){
tryCatch(
{
line <- gsub('\n', '', line)
fields <- unlist(strsplit(line, split=mydelimiter))
mykey_new <- fields[1]
myvalue_new <- fields[2]
sink()
cat(mykey_new);cat(mydelimiter);cat(myvalue_new);cat('\n')
sink('/dev/null')
},
error=function(e){}
)
}

close(f)

最佳答案

您收到的Java错误只是告诉您程序运行失败,但没有告诉您程序出了什么问题。要查看您需要从容器中获取stderr日志。

如果您转到Jobtracker页面(类似于http://myserver.com:50030/jobtracker.jsp)并找到失败的工作,则可以单击“失败的任务”列中的数字,然后从那里获取任务日志。您应该可以在那里找到问题。

关于python - HadoopStreaming R作为 reducer 失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27207009/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com