【问题标题】:Hadoop Streaming simple job fails error pythonHadoop Streaming简单作业失败错误python
【发布时间】:2023-04-05 17:21:02
【问题描述】:

我是 hadoop 和 mapreduce 的新手,我正在尝试编写一个 mapreduce 来计算字数 txt 文件的前 10 个字数。

我的 txt 文件 'q2_result.txt' 看起来像:

yourself        268
yourselves      73
yoursnot        1
youst   1
youth   270
youthat 1
youthful        31
youths  9
youtli  1
youwell 1
youwondrous     1
youyou  1
zanies  1
zany    1
zeal    32
zealous 6
zeals   1

映射器:

#!/usr/bin/env python

import sys

for line in sys.stdin:
    line = line.strip()
    word, count = line.split()
    print "%s\t%s" % (word, count)

减速机:

#!usr/bin/env/ python

import sys

top_n = 0
for line in sys.stdin:
    line = line.strip()
    word, count = line.split()

    top_n += 1
    if top_n == 11:
        break
    print '%s\t%s' % (word, count)

我知道你可以在 Hadoop jar 命令中将标志传递给 -D 选项,以便它按你想要的键排序(在我的情况下,计数是 k2,2),这里我只是先使用一个简单的命令:

hadoop jar /usr/hdp/2.5.0.0-1245/hadoop-mapreduce/hadoop-streaming-2.7.3.2.5.0.0-1245.jar -file /root/LAB3/mapper.py -mapper mapper.py -file /root/LAB3/reducer.py -reducer reducer.py -input /user/root/lab3/q2_result.txt -output /user/root/lab3/test_out

所以我认为这样简单的映射器和减速器不应该给我错误,但它确实给了我错误,我不知道为什么,错误在这里:http://pastebin.com/PvY4d89c

(我在 Ubuntu16.04 的 virtualBox 上使用 Horton works HDP Sandbox)

【问题讨论】:

标签: java python hadoop mapreduce streaming


【解决方案1】:

我知道,“文件未找到错误”的含义与“文件无法执行”完全不同,在这种情况下,问题是文件无法执行。

在 Reducer.py 中:

错误:

#!usr/bin/env/ python

正确:

#!/usr/bin/env python

【讨论】:

  • 我不敢相信我错过了...,您能解释一下为什么这种差异会导致 hadoop 流式传输出错吗?我有点理解,包括#!告诉hadoop你正在执行python文件。
  • env is a program localted in /usr/bin.usr/bin/env/ 实际上你正在运行一个目录。该程序允许您在不使用绝对路径的情况下使用 python。使用 #!您正在告诉哪个程序执行脚本,它必须存在并且可以运行。
猜你喜欢
  • 2015-05-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-08
  • 1970-01-01
相关资源
最近更新 更多