我有两份档案。我想一个文件是在分布式缓存和其他被发送到Map器。但是分布式缓存中的一个文件非常大。我计划的是通过一个Map器来划分这个文件,然后将这些块并行地发送给另一个Map进程。你知道怎么实现吗。
wyyhbhjk1#
首先,分布式缓存存在的原因是,所有Map程序都可以(读取)访问公共文件,例如停止字列表。如果不需要,那么就不需要分布式缓存。此外,如果您描述的两个文件的格式相同,并且您以相同的方式处理它们,那么只需将它们的根目录作为输入传递给Map器。hadoop将以相同的方式处理它们,并将它们拆分。如果不是这样,那就继续读我的答案。如果要将第一个Map器的输出用作第二个Map器的(单个)输入,则可以使用链Map器。但我猜你也希望使用第二个输入文件。所以你可以把你的工作分成两份工作。然后,第二个作业Map器的输入可以是两个输入文件的组合:第一个作业的输出和一个文件,只要它们的格式相同。因此,可以使用addinputpath方法。否则,您可以直接从文件系统获取文件,如下所述。请注意,如果您的大文件大于一个块的大小(默认为64MB),并且它是可拆分的,hadoop会“自动”将其拆分,当它作为Map器的输入提供时。
1条答案
按热度按时间wyyhbhjk1#
首先,分布式缓存存在的原因是,所有Map程序都可以(读取)访问公共文件,例如停止字列表。如果不需要,那么就不需要分布式缓存。此外,如果您描述的两个文件的格式相同,并且您以相同的方式处理它们,那么只需将它们的根目录作为输入传递给Map器。hadoop将以相同的方式处理它们,并将它们拆分。如果不是这样,那就继续读我的答案。
如果要将第一个Map器的输出用作第二个Map器的(单个)输入,则可以使用链Map器。
但我猜你也希望使用第二个输入文件。所以你可以把你的工作分成两份工作。然后,第二个作业Map器的输入可以是两个输入文件的组合:第一个作业的输出和一个文件,只要它们的格式相同。因此,可以使用addinputpath方法。
否则,您可以直接从文件系统获取文件,如下所述。
请注意,如果您的大文件大于一个块的大小(默认为64MB),并且它是可拆分的,hadoop会“自动”将其拆分,当它作为Map器的输入提供时。