当前位置:  开发笔记 > 前端 > 正文

您如何建议使用Hadoop流媒体进行"加入"?

如何解决《您如何建议使用Hadoop流媒体进行"加入"?》经验,为你挑选了1个好方法。

我有两个文件,格式如下:

field1, field2, field3
field4, field1, field5

不同的字段编号表示不同的含义.

我想使用基于相互字段的Hadoop Streaming加入这两个文件(field1在上面的示例中),因此输出将是field1, field2, field3, field4, field5(其他顺序可以正常,因为它们具有所有字段).



1> Joe Stein..:

Hadoop有一个名为KeyFieldBasedPartitioner的库http://hadoop.apache.org/mapreduce/docs/r0.21.0/api/org/apache/hadoop/mapred/lib/KeyFieldBasedPartitioner.html

在您的作业启动中将此作为选项用作流式作业的分区程序,允许您将映射器输出分解为键/值对,并将键一起混合到同一个reducer和排序,包括值http:// hadoop.apache.org/mapreduce/docs/r0.21.0/streaming.html#More+Usage+Examples

$HADOOP_HOME/bin/hadoop  jar $HADOOP_HOME/hadoop-streaming.jar \
-D stream.map.output.field.separator=. \
-D stream.num.map.output.key.fields=4 \
-D mapreduce.map.output.key.field.separator=. \
-D mapreduce.partition.keypartitioner.options=-k1,2 \
-D mapreduce.job.reduces=12 \
-input myInputDirs \
-output myOutputDir \
-mapper org.apache.hadoop.mapred.lib.IdentityMapper \
-reducer org.apache.hadoop.mapred.lib.IdentityReducer \
-partitioner org.apache.hadoop.mapred.lib.KeyFieldBasedPartitioner 

这里,-D stream.map.output.field.separator =.和-D stream.num.map.output.key.fields = 4在这里解释http://hadoop.apache.org/mapreduce/docs/r0.21.0/streaming.html#Customizing+How+Lines+are+Split + into + Key%2FValue + Pairs基本上是你输出映射器字段以定义键/值对的方式.

上述MapReduce作业的地图输出键通常有四个以"."分隔的字段.但是,MapReduce框架将使用-D mapreduce.partition.keypartitioner.options = -k1,2选项按键的前两个字段对映射输出进行分区.这里,-D mapreduce.map.output.key.field.separator =.指定分区的分隔符.这保证了键中前两个字段相同的所有键/值对将被分区到同一个reducer中.

这实际上等同于将前两个字段指定为主键,将接下来的两个字段指定为辅助字段.主键用于分区,主键和辅助键的组合用于排序.

为了进行连接,只需输出映射器中的字段,并在配置启动时为作为键的字段设置选项,而reducer将按键适当地连接所有值.如果你想从多个源获取数据,只需在命令行上添加更多的输入...如果它们的输入长度不同,那么在mapper中你可以识别它并从mapper创建一个标准格式输出.

推荐阅读
wurtjq
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有