我正在努力学习如何使用hadoop流媒体。我试着运行一个非常简单的Map器,没有还原器。当我运行这个程序时,它完成了100%的Map任务,然后在10分钟内什么也不做,然后报告它已经完成了0%的Map任务。我认为这意味着节点管理器必须终止工作,不确定。我已经等了半个小时了,但一直没有结束。
我正在使用hadoop1.2.1。它的文档说它附带了hadoop流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脚本非常简单。我已经安装了python2.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\t通用电气”,我确信它们是制表符。
顺便说一句,我在centos1.6上的vmware虚拟机上以伪分布式模式运行hadoop1.2.1。
有人能告诉我为什么这不起作用,我能做些什么来修复它吗?
2条答案
按热度按时间sshcrbum1#
这个
hadoop-streaming-x.y.z.jar
应该在你的房间里$HADOOP_HOME
这对我来说还没有定义,但应该在/usr/lib/hadoop
.我认为hadoop流文档对于解决python示例中的问题非常有用。
首先,Map器节点需要您编写的python文件的副本,因此在命令行上用
file
选项。第二,如果你不使用减速机,你不需要定义它。
第三,你的沙邦会逃跑
env
在文件上,你应该把它改成#!/usr/bin/python
或者#!/usr/bin/env python
这可能就是env
为了给出一个非零的退出值,因此您的Map程序(运行了约30秒)将在大约10分钟后重试尝试2。e0uiprwp2#
我刚刚在一个类似的(简单的)问题上犯了这个错误。对我来说,这个错误是由于python脚本在执行过程中死亡造成的。与您的问题类似,我的脚本似乎可以很好地处理问题的一小部分,但无法在hadoop上处理整个数据集,这是由于有缺陷的输入造成的。因此,虽然这可能不是脚本正在消亡的原因,但您可能应该添加一些健全性检查。
检查零件的长度是否符合您的预期。
检查零件是否为空。
另外,您可以转到作业跟踪器,查看导致hadoop停止执行的确切错误。这不会提供您可能期望的python堆栈跟踪,但仍然很有用。求职者通常可以在
http:// localhost : 50030/jobtracker.jsp
还有,改变#!/usr/bin/env
至#!/usr/bin/python
这是因为运行脚本的机器不知道如何处理它。如果你用它运行的话,它可能也会导致你的电脑冻结./firstLetterMapper.py
而不是python firstLetterMapper.py