目前我正在使用默认分区程序运行一些Hadoop作业,这通常会为每个reducer提供相同的数据块。但是,我的reducer键包含两个字段:
1,foo
2,bar
1,baz
并且每个reducer根据第一个键写入不同的文件夹。
假设我有两个reducer,每个都获得50%的数据,并写下以下文件:
1/chunk-0 # first reducer
chunk-1 # second reducer
2/chunk-0 # first reducer
/chunk-1 # second reducer
但是,如果,例如,20%的第一个reducer数据具有键1,80%具有键2,50%的第二个reducer数据具有键1,50%具有键2,则chunk-0
和{每个文件夹中的{1}}不均匀。
如何确保在最终输出中,每个文件夹中的块大小相等?似乎我需要一个分区函数,可以执行以下操作:对于每个reducer,n%的reducer数据是key 1,m%的reducer数据是key 2.或者在Hadoop之外进行分区会更简单?