在Hadoop中使用动态分布式缓存



我有两个文件。我希望一个文件在分布式缓存中,另一个发送到映射器。

但是分布式缓存中的一个是非常大的文件。我计划的是通过映射器分割该文件,然后将块并行发送到另一个映射过程。

知道如何实现这一点吗。

首先,分布式缓存之所以存在,是因为所有映射程序都可以(读取)访问一个公共文件,例如一个停止字列表。如果不需要,那么就不需要分布式缓存。此外,如果您描述的两个文件的格式相同,并且您以相同的方式处理它们,那么只需将它们的根目录作为输入传递给映射器即可。Hadoop将以相同的方式处理这两个问题,并将两者分开。如果不是这样,那就继续读我的答案。

如果要将第一个映射器的输出用作第二个映射器(单个)输入,则可以使用ChainMap。

但我猜您也希望使用第二个输入文件。所以你可以把你的工作分成两份工作。然后,第二个作业的映射器的输入可以是两个输入文件的组合:第一个作业的输出和一个文件,只要它们的格式相同。因此,可以使用addInputPath方法。

否则,您可以直接从文件系统获取文件,如下所述。

请注意,如果您的大文件大于一个块的大小(默认情况下为64MB),并且它是可拆分的,那么hadoop在将其作为映射器的输入时会"自动"拆分它。

最新更新