我被问到这样一个问题假设我有1000万个文件,大小为2 KB,那么我可以将它存储在hdfs中吗?请回答这个问题。
答案 0 :(得分:2)
HDFS用于处理大文件。如果加载2 KB文件,它将增加名称节点上的开销和负载,因为它存储有关文件的元数据。
块大小是文件系统可以存储的最小数据单位。如果存储的文件大小为2kb,则会占用一个块。一旦越过64Mb边界,就需要第二个块,读取操作的数量将会很大,这将增加读取开销。
最好的方法是将所有2 Kb文件合并到一个文件中并将其保存在hadoop上。
答案 1 :(得分:0)
如果NameNode上有足够的内存用于所有文件元数据,您肯定可以存储在HDFS中。此外,不是通过使用默认的64 MB块大小浪费HDFS空间,而是可以指定每个文件的块大小,因此可以设置为2 KB(如果需要)。请注意,使用这样的HDFS通过减少每个文件块大小来存储大量的小文件是可以的。如果在大量小型文件上运行MapReduce计算,则会遇到问题。
另外,请注意64 MB是HDFS上的默认块大小,但您可以自由设置大尺寸(128 MB或256 MB或更大),甚至更小。 HDFS本身没有块大小的概念,它是底层的本机文件系统(通常是Linux)必须强制执行blocksize参数,而这正是Linux在幕后所做的。