使用keyfieldbasedpartitioner的hadoop文件分割

ui7jx7zq  于 2021-06-04  发布在  Hadoop
关注(0)|答案(1)|浏览(443)

我有一个大文件,格式如下

sample name \t index \t score

我正在尝试使用hadoop流媒体根据示例名称拆分这个文件。我提前知道有多少样品,所以可以指定我需要多少还原剂。这篇文章做的事情非常相似,所以我知道这是可能的。
我尝试使用以下脚本将此文件拆分为16个文件(共16个示例)

hadoop jar $STREAMING \
    -D mapred.text.key.partitioner.options=-k1,1 \
    -D stream.num.map.output.key.fields=2 \
    -D mapred.reduce.tasks=16 \
    -partitioner org.apache.hadoop.mapred.lib.KeyFieldBasedPartitioner \
    -mapper cat \
    -reducer org.apache.hadoop.mapred.lib.IdentityReducer \
    -input input_dir/*part* -output output_dir

这在某种程度上是可行的—有些文件只包含一个示例名称。但是,大多数part文件是空的,一些part文件包含多个示例名称。
有没有更好的方法确保每个减速机只有一个样本名称?

bf1o4zei

bf1o4zei1#

仅供参考,实际上有一种更干净的方法可以使用自定义输出格式分割文件
这个链接描述了如何做到这一点。最后我为我的特定应用程序定制了另一个链接。总而言之,它只是java的几行额外代码

相关问题