如何在Hadoop'中将拆分大小设置为一行;s MapReduce流媒体?

如何在Hadoop'中将拆分大小设置为一行;s MapReduce流媒体?,hadoop,mapreduce,hadoop-streaming,Hadoop,Mapreduce,Hadoop Streaming,目标:拥有矩阵副本的每个节点读取矩阵,通过映射器(矩阵、键)计算一些值,并发出 我正在尝试通过流使用python编写的映射器。没有减速器。 基本上,我正在尝试做类似的任务 方法:我生成了以下格式的输入文件(任务)(标题仅供参考): 然后我在这个任务上运行(hadoop流)mapper。映射程序解析行以获取参数-filename,key;然后映射器按文件名读取矩阵,并计算与键关联的值;然后发射 问题:当前的方法可以工作并产生正确的结果,但它在一个映射器中实现,因为输入文件的大小只有100行文本,并

目标:拥有矩阵副本的每个节点读取矩阵,通过映射器(矩阵、键)计算一些值,并发出

我正在尝试通过流使用python编写的映射器。没有减速器。 基本上,我正在尝试做类似的任务

方法:我生成了以下格式的输入文件(任务)(标题仅供参考):

然后我在这个任务上运行(hadoop流)mapper。映射程序解析行以获取参数-filename,key;然后映射器按文件名读取矩阵,并计算与键关联的值;然后发射


问题:当前的方法可以工作并产生正确的结果,但它在一个映射器中实现,因为输入文件的大小只有100行文本,并且不会被拆分为多个映射器如何在输入量很小的情况下强制进行这样的拆分?

我意识到,与其使用多个映射器而不使用还原器,不如使用完全相反的方法。现在我的架构如下所示:

  • 瘦映射器只需读取输入参数并发出键、值
  • 减脂器读取文件并使用接收到的密钥执行算法,然后发出结果
  • 设置-D mapreduce.job.reduces=10以更改并行化级别

这是愚蠢的(错误的)方法,但正确的方法也不明显

你为什么需要它?让我们把关于映射者数量的决定留给框架。请重新阅读问题陈述。我的输入必须很小,因为它只包含一个文件路径和密钥。文件会很大,但适合每台机器的内存。所以我只需要在同一数据上用不同的密钥并行运行多台机器。
/path/matrix.csv 0
/path/matrix.csv 0
...              99