如何在hadoop的mapreduce流媒体中设置拆分大小等于一行?

polhcujo  于 2021-06-02  发布在  Hadoop
关注(0)|答案(1)|浏览(278)

目标:每个节点都有一个矩阵副本,读取矩阵,通过Map器(矩阵,键)计算一些值,并发出<key,value>
我正在尝试通过流媒体使用python编写的mapper。没有减速器。基本上,我正在尝试做类似的任务https://hadoop.apache.org/docs/current/hadoop-streaming/hadoopstreaming.html#how_do_i_process_files_one_per_map
方法:我以以下格式生成了一个输入文件(tasks)(标题仅供参考):

/path/matrix.csv 0
/path/matrix.csv 0
...              99

然后我在这个任务上运行(hadoop流)mapper。Map程序解析行以获得参数-filename,key;然后Map器按文件名读取矩阵并计算与键相关的值;然后发射<key,value>。
问题:当前的方法可以工作并产生正确的结果,但它是在一个Map器中实现的,因为输入文件的大小只有100行文本,并且不会被拆分为多个Map器。如何在输入大小很小的情况下强制进行这种拆分?

kyks70gy

kyks70gy1#

我意识到,我可以做完全相反的事情,而不是做几个Map器和没有还原器。现在我的架构如下:
瘦Map器只需读取输入参数并发出key、value
减脂器读取文件并用接收到的密钥执行算法,然后发出结果
设置-d mapreduce.job.reduces=10以更改并行化级别
这是愚蠢的(错误的)方法,但正确的方法也不明显。

相关问题