目标:每个节点都有一个矩阵副本,读取矩阵,通过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器。如何在输入大小很小的情况下强制进行这种拆分?
1条答案
按热度按时间kyks70gy1#
我意识到,我可以做完全相反的事情,而不是做几个Map器和没有还原器。现在我的架构如下:
瘦Map器只需读取输入参数并发出key、value
减脂器读取文件并用接收到的密钥执行算法,然后发出结果
设置-d mapreduce.job.reduces=10以更改并行化级别
这是愚蠢的(错误的)方法,但正确的方法也不明显。