0

我有一个存储一些数据的文件,每个映射器都应该使用这些数据进行一些计算。

我知道如何从文件中读取数据,这可以在映射器函数中完成,但是,这个数据对于每个映射器都是相同的,所以我想在映射过程之前将它存储在某个地方(变量),然后使用映射器中的内容。

如果我在 map 函数中执行此操作,并且例如有一个包含 10 行的文件作为输入,那么 map 函数将被调用 10 次,对吗?所以如果我在 map 函数中读取文件内容,我会读取 10 次,这是不必要的

提前致谢

4

2 回答 2

0

如果我理解正确,您只想调用 1 个函数来读取文件中的所有行。假设是的,这是我对此的看法。

为了安全起见,映射器允许您一次读取 1 行,以便您可以控制要读取的输入行数。这需要一定的内存。例如,如果文件大如 1GB 大小怎么办。你愿意阅读所有内容吗?这将占用大量内存并影响性能。这是我之前提到的安全方面。

我的结论是没有 Mapper 函数可以读取文件的所有内容。你同意吗?

于 2012-05-07T05:10:02.677 回答
0

因为您的许多 Mapper 在不同的 JVM 内运行(可能在不同的机器上),所以在将数据提交到 Hadoop 之前,您无法将数据读入应用程序。但是,您可以使用分布式缓存“有效地分发特定于应用程序的大型只读文件”。

根据该链接:“它的效率源于每个作业只复制一次文件以及缓存未归档在从属设备上的档案的能力。”

于 2012-05-04T21:06:43.533 回答