当前位置: 首页 > 知识库问答 >
问题:

Hadoop流媒体在映射/减少操作过程中崩溃

柳项明
2023-03-14

我在单个节点上使用hadoop 1.0.1,并尝试使用python 2.7流式传输制表符分隔的文件。我可以让Michael Noll的字数计数脚本使用hadoop/python运行,但无法让这个极其简单的映射器和减速器工作,只是复制文件。这是映射器:

import sys

for line in sys.stdin:
    line = line.strip()
    print '%s' % line

这是减速器:

import sys

for line in sys.stdin:
    line = line.strip()
    print line

以下是输入文件的一部分:

1   857774.000000
2   859164.000000
3   859350.000000
...

mapper和reducer在linux中运行良好:

cat input.txt | python mapper.py | sort | python reducer.py > a.out

但在我修改映射器和reducer之后,将输入文件移动到hdfs,并检查它是否在那里并运行:

bin/hadoop jar contrib/streaming/hadoop-*streaming*.jar -file mapperSimple.py -mapper mapperSimple.py -file reducerSimple.py -reducer reducerSimple.py -input inputDir/* -output outputDir

我得到以下错误:

12/06/03 10:19:11 INFO streaming.StreamJob:  map 0%  reduce 0%
12/06/03 10:20:15 ERROR streaming.StreamJob: Job not successful. Error: # of failed Map Tasks exceeded allowed limit. FailedCount: 1. LastFailedTask: task_201206030550_0003_m_000001
12/06/03 10:20:15 INFO streaming.StreamJob: killJob...
Streaming Job Failed!

有什么想法吗?谢谢

共有2个答案

武晨
2023-03-14

除了Chris White的回答,shebang头球应该是:

#!/usr/bin/env python

它将使用python2。默认情况下为7。如果您想使用python3,可以使用:

#!/usr/bin/env python3

不要使用:

#!/usr/bin/python

因为它会在大多数电脑上失败...包括我的****叹气****

查看此答案以了解更多信息

颛孙玉石
2023-03-14

你的python文件有shebang/hashbang头文件吗?我想你的问题是,当Java来执行mapper python文件时,它要求操作系统执行该文件,而没有shebang/hashbang符号,它不知道如何执行该文件。我还将确保您的文件带有可执行权限(chmod a x mapperpsimple.py):

#!/usr/bin/python
import sys

for line in sys.stdin:
    line = line.strip()
    print '%s' % line

从命令行尝试一下,以确保shell知道使用python解释器执行文件:

cat input.txt | ./mapper.py | sort | ./reducer.py > a.out
 类似资料:
  • 问题内容: 我的问题对于HADOOP用户而言似乎很愚蠢。但是我对在地图减少问题中使用泛型感到困惑,例如“ WORD COUNT”。 我知道,泛型被基本用于类型转换和类型安全。但是我不能在这里将这个概念联系起来。 在字数问题上, 请任何人在这里让我明白泛型的使用 。如果我在问这个问题时犯了任何错误,请纠正我。 现在,我了解将泛型用于键值对(KEY IN,VALUE IN,KEY OUT,VALUE

  • 问题内容: 我刚刚开始使用hadoop / hbase MapReduce工作(使用cloudera),但我有以下问题: 假设我们有一个带有主要和静态viariable的java类。该类定义与Mapper和Reducer任务相对应的内部类。在启动作业之前,主程序初始化静态变量。在Mapper类中读取此变量。然后使用群集上的“ hadoop jar”启动该类。 我的问题:我看不到其他节点上的Map和

  • 我有以下形式的地图: 让INNER成为内部地图,即。 例如,我想在一个新的中减少START映射 它们具有相同的键,但值不同。特别是,对于每个键,我希望新的Double值是相应键的INNER映射中值的SUM。 如何使用JAVA 8的流API来实现这一点? 谢谢大家。 编辑:样例地图为 我想要一张像下面这样的新地图:

  • 如果我执行以下“连接”两个流的代码 < li >首先通过平面映射< code >流 我在两种情况下都获得了相同的正确结果,但过滤操作的次数不同。 我在两种情况下都得到了预期的结果(3)。但是,第一个操作对集合的每个元素应用第一个过滤器,而第二个操作在遇到一个过滤器时就停止。输出是: 为什么两者之间的行为有所不同?JDK代码在第一个场景中是否可以改进为与第二个场景中一样高效,或者是否有一些东西使其不

  • 我正在做一些类似于标准MapReduce示例的事情——字数统计,但是有所改变,我只希望得到前N个结果。 假设我在HDFS有一个非常大的文本数据集。有大量的例子展示了如何构建一个Hadoop MapReduce作业,为你提供文本中每个单词的字数。例如,如果我的语料库是: “这是对测试数据的检验,也是检验这一点的好方法” 来自标准 MapReduce 字数统计作业的结果集为: 测试:3、a:2、thi

  • 我在一个大约50个节点的集群上运行2.2.0上的hadoop,我的工作是64个map任务和20个reduce任务。map在大约30分钟内完成,然后所有reduce任务都在运行,但是我发现一个奇怪的日志是这样的: