2012-05-04 62 views
0

我有一个存储一些数据的文件,这些数据应该被每个映射器用于一些计算。Java Hadoop:是否可以只读取一次文件的内容?

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

如果我在map函数中做了这个,并且例如有一个10行的文件作为输入,那么map函数将被调用10次,是否正确?所以如果我在map函数读取文件内容,我会读它10倍这是不必要的

在此先感谢

回答

0

因为很多的映射器不同的JVM内运行的(也可能在不同的机器),在将数据提交给Hadoop之前,无法将数据读入应用程序。但是,您可以使用Distributed Cache来“高效地分发特定于应用程序的大型只读文件”。

按照该链接:“其效率源于这样一个事实,即每个作业只复制一次文件,并且能够缓存从属文件未归档的文件。”

0

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

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

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

相关问题