我正在运行流式 Hadoop 作业,并且字节偏移量不会作为映射器的输出(键)生成,就像我所期望的那样。命令:
$HADOOP_INSTALL/bin/hadoop \
jar $HADOOP_INSTALL/contrib/streaming/hadoop-streaming-$HADOOP_VERSION.jar \
-D stream.map.input.ignoreKey=false \
-inputformat org.apache.hadoop.mapred.TextInputFormat \
-file ./mapper.py \
-file ./reducer.py \
-mapper ./mapper.py \
-reducer ./reducer.py \
-input $INPUT_DIR \
-output $OUTPUT_DIR \
-cmdenv REGEX=$REGEX
我的理解是 TextInputFormat 是默认的,所以我也尝试了不带 -inputformat 选项的上述命令。我也尝试删除 -D,但我被告知在使用流 API 时需要将字节偏移量作为密钥。
不管怎样,我只是在一个学生项目中尝试使用 Hadoop。目前,映射器是 HDFS 中文件的一个非常简单的 python grep,将每一行与提供的正则表达式进行匹配:
pattern = re.compile(os.environ['REGEX'])
for line in sys.stdin:
match = pattern.search(line)
if (match):
sys.stdout.write(line)
但现在,唯一输出(到减速器)的是匹配行。我期待制表符或空格分隔的键/值对,其中 key=byte_offset 和 value=regex_line_match。
谁能告诉我或建议为什么会发生这种情况?
另外,我也有兴趣回答这两个(相关)问题:
- 映射器是否可以手动确定字节偏移量
对于它正在处理的与文件相关的每一行数据
数据属于哪个?
- 映射器可以
确定文件中数据的总字节数
是加工所属?
如果这些问题中的任何一个是肯定的,那么如何? (Python,或者一般的流媒体)。
Edit:
如果我使用-inputformat org.apache.hadoop.mapred.lib.NLineInputFormat
然后生成字节偏移量作为映射器输出的键。但这项工作需要一段时间really完成时间很长(我的输入文件只有大约 50 行文本!)。
None
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)