首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法使用流python映射通过stdin读取Hadoop序列文件--在AWS上进行还原

无法使用流python映射通过stdin读取Hadoop序列文件--在AWS上进行还原
EN

Stack Overflow用户
提问于 2014-01-19 08:22:52
回答 2查看 871关注 0票数 0

我试图运行一个简单的单词计数地图-减少作业在亚马逊的弹性地图减少,但输出是胡说八道。输入文件是普通爬行文件的一部分,这些文件是hadoop序列文件。该文件应该是从爬行的网页中提取的文本(从html中去掉)。

我的AWS弹性MapReduce步骤如下所示:

代码语言:javascript
复制
Mapper: s3://com.gpanterov.scripts/mapper.py
Reducer: s3://com.gpanterov.scripts/reducer.py
Input S3 location: s3://aws-publicdatasets/common-crawl/parse-output/segment/1341690169105/textData-00112
Output S3 location: s3://com.gpanterov.output/job3/

作业成功运行,但输出却是胡说八道。只有奇怪的符号,根本就没有文字。我猜这是因为hadoop序列文件不能通过标准读取?但是,如何在这样的文件上运行job先生呢?我们必须先把序列文件转换成文本文件吗?

第00000部分的前几行如下所示:

代码语言:javascript
复制
'\x00\x00\x87\xa0 was found 1 times\t\n'
'\x00\x00\x8e\x01:\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\x03\x05\xc1=K\x02\x01\x00\x80a\xf0\xbc\xf3N\xbd\x0f\xaf\x145\xcdJ!#T\x94\x88ZD\x89\x027i\x08\x8a\x86\x16\x97lp0\x02\x87 was found 1 times\t\n'

这是我的地图:

代码语言:javascript
复制
#!/usr/bin/env python

import sys

for line in sys.stdin:
    words = line.split()
    for word in words:
      print word + "\t" + str(1)

我的减速机:

代码语言:javascript
复制
#!/usr/bin/env python

import sys

def output(previous_key, total):
    if previous_key != None:
      print previous_key + " was found " + str(total) + " times"

previous_key = None
total = 0

for line in sys.stdin:
    key, value = line.split("\t", 1)
    if key != previous_key:
      output(previous_key, total)
      previous_key = key
      total = 0 
    total += int(value)

output(previous_key, total)

输入文件没有任何问题。在本地机器上,我运行了hadoop fs -text textData-00112 | less,这会从网页中返回纯文本。任何关于如何在这些类型的输入文件(公共爬行hadoop序列文件)上运行python流mapreduce作业的输入都很受欢迎。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-01-19 11:06:39

您需要将SequenceFileAsTextInputFormat作为inputformat提供给hadoop流jar。

我从来没有使用过amazon,但是在正常的hadoop安装中会这样做:

代码语言:javascript
复制
HADOOP=$HADOOP_HOME/bin/hadoop
$HADOOP jar $HADOOP_HOME/contrib/streaming/hadoop-*-streaming.jar \
  -input <input_directory>
  -output <output_directory> \
  -mapper "mapper.py" \
  -reducer "reducer.py" \
  -inputformat SequenceFileAsTextInputFormat
票数 1
EN

Stack Overflow用户

发布于 2014-01-19 22:21:14

桑尼·南达的建议解决了这个问题。将-inputformat SequenceFileAsTextInputFormat添加到aws弹性mapreduce中的额外参数框中是有效的,作业的输出与预期的一样。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21214603

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档