我有两个文件。我希望一个文件在分布式缓存中,而另一个文件则发送到映射器。
但是分布式缓存中的那个是非常大的文件。我计划的是通过映射器划分该文件,然后将块并行发送到另一个映射进程。
任何想法如何实现这一点。
答案 0 :(得分:0)
首先,分布式缓存存在的原因是所有映射器都具有(读取)对公共文件的访问权限,例如:一系列停用词。如果您不需要,那么您不需要分布式缓存。此外,如果您描述的两个文件具有相同的格式并且您以相同的方式处理它们,那么只需将它们的根目录(ies)作为输入传递给您的映射器。 Hadoop将以相同的方式处理它们并将它们分开。如果不是这样,那么继续阅读我的答案。
如果要将第一个映射器的输出用作第二个映射器的(单个)输入,则可以使用ChainMapper。
但我猜你也想使用第二个输入文件。 所以你可以split your job in a chain of two jobs。然后,第二个作业的映射器的输入可以是两个输入文件的组合:第一个作业的输出和文件,只要它们具有相同的格式。出于这个原因,您可以使用addInputPath方法。
否则,您可以直接从文件系统获取文件,如here所述。
请注意,如果您的大文件大于块的大小(默认为64 MB),并且它是可拆分的,则hadoop会将其“自动”拆分,当它作为输入提供给映射器时。