hadoop流从未完成

1mrurvl1  于 2021-06-03  发布在  Hadoop
关注(0)|答案(2)|浏览(371)

我正在努力学习如何使用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。
有人能告诉我为什么这不起作用,我能做些什么来修复它吗?

sshcrbum

sshcrbum1#

这个 hadoop-streaming-x.y.z.jar 应该在你的房间里 $HADOOP_HOME 这对我来说还没有定义,但应该在 /usr/lib/hadoop .
我认为hadoop流文档对于解决python示例中的问题非常有用。
首先,Map器节点需要您编写的python文件的副本,因此在命令行上用 file 选项。
第二,如果你不使用减速机,你不需要定义它。

$ hadoop jar /hadoop/hadoop-streaming-1.2.1.jar \
  -D mapred.reduce.tasks=0 \
  -input /stock -output /company_index \
  -mapper firstLetterMapper.py \
  -file /home/msknapp/workspace/stock/stock.mr/scripts/firstLetterMapper.py

第三,你的沙邦会逃跑 env 在文件上,你应该把它改成 #!/usr/bin/python 或者 #!/usr/bin/env python 这可能就是 env 为了给出一个非零的退出值,因此您的Map程序(运行了约30秒)将在大约10分钟后重试尝试2。

e0uiprwp

e0uiprwp2#

我刚刚在一个类似的(简单的)问题上犯了这个错误。对我来说,这个错误是由于python脚本在执行过程中死亡造成的。与您的问题类似,我的脚本似乎可以很好地处理问题的一小部分,但无法在hadoop上处理整个数据集,这是由于有缺陷的输入造成的。因此,虽然这可能不是脚本正在消亡的原因,但您可能应该添加一些健全性检查。
检查零件的长度是否符合您的预期。
检查零件是否为空。
另外,您可以转到作业跟踪器,查看导致hadoop停止执行的确切错误。这不会提供您可能期望的python堆栈跟踪,但仍然很有用。求职者通常可以在 http:// localhost : 50030/jobtracker.jsp 还有,改变 #!/usr/bin/env#!/usr/bin/python 这是因为运行脚本的机器不知道如何处理它。如果你用它运行的话,它可能也会导致你的电脑冻结 ./firstLetterMapper.py 而不是 python firstLetterMapper.py

相关问题