2016-11-24 56 views
-2

我被问到了这个问题假设我有10百万个文件,其大小为2 KB,那么我可以将它存储在hdfs中吗?请回答这个问题。假设我有10万个大小为2 KB的文件,那么我可以将它存储在hdfs中吗?

+0

当然你可以存储.. – subodh

+2

欢迎来到StackOverflow。请注意,这不是一个免费的代码写入服务,但我们渴望帮助其他程序员(和有志之士)编写他们自己的代码。请阅读[如何提出一个好问题](http://stackoverflow.com/help/how-to-ask)上的帮助主题。之后,请用您迄今编写的代码更新您的问题,以完成您希望实现的任务。 –

回答

2

HDFS是为了处理大量的文件。如果你加载2 KB的文件就会开销和负载加大对名称节点,因为它存储有关文件的元数据。

块大小是文件系统可以存储的最小数据单位。如果你存储一个2kb的文件,它将占用一个块。一旦你跨越了64Mb边界,你需要第二个块,读操作的数量将会很大,这会增加读取开销。

最好的办法是将所有2 Kb文件合并成一个文件并保存在hadoop上。

0

如果NameNode上有足够的内存用于所有文件元数据,那么可以存储在HDFS中。此外,不要使用默认的64 MB块大小来浪费HDFS空间,您可以指定每个文件的块大小,因此可以设置为2 KB(如果需要)。请注意,像这样使用HDFS通过减少每个文件的块大小来存储大量的小文件是很好的。如果在大量小文件上运行MapReduce计算,将遇到问题。

另外,请注意64 MB是HDFS上的默认块大小,但您可以自由设置大尺寸(128 MB或256 MB或更大),甚至更小。 HDFS本身没有块大小的概念,它是底层的本地文件系统(通常是Linux),它必须实施blocksize参数,这就是Linux在后台执行的操作。