gpt4 book ai didi

python-2.7 - Hadoop Streaming 永无止境

转载 作者:可可西里 更新时间:2023-11-01 14:54:19 26 4
gpt4 key购买 nike

我正在尝试学习如何使用 hadoop 流。我正在尝试运行一个非常简单的映射器,并且没有缩减器。当我运行该程序时,它完成了 100% 的 map task ,然后在十分钟内什么都不做,然后报告它已完成所有 map task 的 0%。我认为这意味着节点管理器不得不终止工作,不确定。过去我已经等了半个小时,但一直没有结束。

我正在使用 hadoop 1.2.1。它的文档说它带有 hadoop streaming jar,但我找不到它,所以我从中央 maven 存储库下载了 hadoop-streaming-1.2.1。这是命令行:

[msknapp@localhost data]$ hadoop jar /hadoop/hadoop-streaming-1.2.1.jar -D mapred.reduce.tasks=0 -input /stock -output /company_index -mapper /home/msknapp/workspace/stock/stock.mr/scripts/firstLetterMapper.py -reducer org.apache.hadoop.mapred.lib.IdentityReducer
packageJobJar: [] [/opt/hadoop-1.2.1/hadoop-streaming-1.2.1.jar] /tmp/streamjob7222367580107633928.jar tmpDir=null
13/12/22 07:04:14 WARN snappy.LoadSnappy: Snappy native library is available
13/12/22 07:04:14 INFO util.NativeCodeLoader: Loaded the native-hadoop library
13/12/22 07:04:14 INFO snappy.LoadSnappy: Snappy native library loaded
13/12/22 07:04:14 INFO mapred.FileInputFormat: Total input paths to process : 1
13/12/22 07:04:17 INFO streaming.StreamJob: getLocalDirs(): [/tmp/hadoop-msknapp/mapred/local]
13/12/22 07:04:17 INFO streaming.StreamJob: Running job: job_201312201826_0009
13/12/22 07:04:17 INFO streaming.StreamJob: To kill this job, run:
13/12/22 07:04:17 INFO streaming.StreamJob: UNDEF/bin/hadoop job -Dmapred.job.tracker=localhost:9001 -kill job_201312201826_0009
13/12/22 07:04:17 INFO streaming.StreamJob: Tracking URL: http://localhost:50030/jobdetails.jsp?jobid=job_201312201826_0009
13/12/22 07:04:18 INFO streaming.StreamJob: map 0% reduce 0%
13/12/22 07:04:44 INFO streaming.StreamJob: map 100% reduce 0%
13/12/22 07:14:44 INFO streaming.StreamJob: map 0% reduce 0%
13/12/22 07:15:09 INFO streaming.StreamJob: map 100% reduce 0%

我调用的python脚本很简单。我安装了 python 2.6.6。该脚本在我测试时有效:

#!/usr/bin/env
import sys
import string
#import os

def map(instream=sys.stdin,outstream=sys.stdout):
line = instream.readline()
output=map_line(line)
outstream.write(output)

def map_line(line):
parts=string.split(line,"\t")
key=parts[0]
newkey=key[0]
newvalue=key
output=newkey+"\t"+newvalue
return output

map()

输入文件相当简短,它有制表符分隔的行,如“GE\tGeneral Electric”,我确信它们是制表符。

顺便说一句,我在 CentOS 1.6 的 VMWare 虚拟机上以伪分布式模式运行 hadoop 1.2.1。

有人可以向我解释为什么这不起作用以及我可以做些什么来解决它吗?

最佳答案

我刚刚在一个类似(简单)的问题上遇到了这个错误。对我来说,错误是由于 python 脚本在执行过程中死亡。与您的问题类似,我的脚本似乎只适用于问题的一小部分,但不适用于整个数据集的 Hadoop,这是由于输入有缺陷。所以,虽然这可能不是你的脚本死掉的原因,但你应该添加一些健全性检查。


检查 parts 的长度是否符合您的预期。

检查parts是否为空。

此外,您还可以转到作业跟踪器,查看导致 Hadoop 停止执行的确切错误。这不会为您提供您可能期望的 python 堆栈跟踪,但仍然有帮助。通常可以在

找到工作跟踪器http://localhost : 50030/jobtracker.jsp

另外,更改

#!/usr/bin/env



#!/usr/bin/python

这是因为运行脚本的机器不知道如何处理它。如果您使用 ./firstLetterMapper.py 而不是 python firstLetterMapper.py

运行它,它可能只会导致您的计算机死机

关于python-2.7 - Hadoop Streaming 永无止境,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20730959/

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