hadoop - 使用 Python 运行 MapReduce 流作业时出错

标签 hadoop mapreduce hadoop-streaming

我正在尝试运行此映射器和缩减器代码(*免责声明 - 培训类(class)解决方案的一部分)

映射器.py

import sys

for line in sys.stdin:
    data = line.strip().split("\t")
    if len(data) == 6:
        date, time, store, item, cost, payment = data
        print "{0}\t{1}".format(1, cost)

reducer.py

import sys

sTotal = 0
trans = 0

for line in sys.stdin:
    data_mapped = line.strip().split("\t")
    if len(data_mapped) != 2:
        continue

    sTotal += float(data_mapped[1])
    trans += 1

print transactions, "\t", salesTotal

不断抛出这个错误:

UNDEF/bin/hadoop job  -Dmapred.job.tracker=0.0.0.0:8021 -kill job_201404041914_0012
14/04/04 23:13:53 INFO streaming.StreamJob: Tracking URL: http://0.0.0.0:50030/jobdetails.jsp?jobid=job_201404041914_0012
14/04/04 23:13:53 ERROR streaming.StreamJob: Job not successful. Error: NA
14/04/04 23:13:53 INFO streaming.StreamJob: killJob...
Streaming Command Failed!

我已经尝试过显式调用 python 函数以及指定 python 解释器。 (即/usr/bin/env python)

知道哪里出了问题吗?

最佳答案

作业失败,因为您的 reducer.py 存在语法错误。

问题出在这一行:

print transactions, "\t", salesTotal

没有名称为 transactionssalesTotal 的变量。

如果我在本地执行它,我会得到这个错误:

Traceback (most recent call last):
  File "r.py", line 14, in <module>
    print transactions, "\t", salesTotal
NameError: name 'transactions' is not defined

正确的行应该是:

print trans, "\t", sTotal

关于hadoop - 使用 Python 运行 MapReduce 流作业时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23233706/

相关文章:

spring - Hadoop JobRunner不启 Action 业

hadoop - 很少有 Hive 面试问题

python - Hadoop Streaming 命令失败并出现 Python 错误

hadoop - 保存 rdd 时 saveAsTextFile 失败

hadoop - SPLIT命令在apache-pig中不起作用

hadoop - HDFS 空间分配(大小/已用/可用)

hadoop - 将参数传递给配置单元查询

hadoop - Rack-local map任务和Data-local map任务有什么区别?

java - 执行 BufferedReader.close() 时 Hadoop FileSystem 关闭异常

hadoop - 将 snappy 压缩文件加载到 Elastic MapReduce 中