使用KeyFieldBasedPartitioner进行hadoop文件拆分



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

sample name t index t score

我正在尝试使用Hadoop Streaming根据样本名称拆分这个文件。我提前知道有多少样品,所以可以指定我需要多少减速器。这个帖子正在做一些非常相似的事情,所以我知道这是可能的。

我尝试使用以下脚本将此文件拆分为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*文件包含多个样本名称。

有没有更好的方法来确保每个reducer只有一个样本名称?

FYI,实际上有一种更干净的方法可以使用自定义OutputFormat 分割文件

这个链接描述了如何真正做好这件事。我最终为我的特定应用程序定制了另一个链接。总之,它只是Java 的几行额外的代码

相关内容

  • 没有找到相关文章

最新更新