hadoop作为Fai

2024-09-28 21:50:52 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在编写一个hadoop流式处理作业,其中映射器是用Python编写的简单数据清理,在reducer部分,我想使用R运行某些时间序列分析,调试mapreduce作业本身并不是那么容易,我最终以一种方式编写了我的reduce,即识别出键和值,然后将它们不加修改地写出结果。但是,它仍然不起作用,我的python代码做了完全相同的事情,可以毫无问题地工作。你知道吗

当streaing作业使用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个数据节点(每个64gbmem)组成的集群上运行这个流作业,它总共生成了大约500个映射器和60个缩减器。我的两种语言的代码都发布了。欢迎任何建议或帮助!你知道吗

这就是异径管.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])

这是减速器

#!/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)

Tags: orghadoopnewapache作业linelibraryjava
1条回答
网友
1楼 · 发布于 2024-09-28 21:50:52

您得到的java错误只是告诉您运行程序失败,但它没有告诉您程序中的问题是什么。您需要从容器中获取stderr日志。你知道吗

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

相关问题 更多 >