2016-11-14 328 views
3

我需要在HDFS上存储大约10TB的大文件。我需要了解的是HDFS如何存储这个文件。假设群集的复制因子是3,并且每个节点上有10个节点的磁盘空间超过10 TB的群集,即总群集容量超过100TB。在hadoop HDFS中存储大文件?

现在HDFS会随机选择三个节点并将文件存储在这三个节点上。那么这听起来很简单。请确认?

或者HDFS是否将文件拆分为 - 分别称为每个1TB的10个拆分,然后将每个拆分存储在随机选择的3个节点上。所以分裂是可能的,如果是的话,它是通过它启用的配置方面。 如果HDFS必须分割二进制或文本文件 - 它是如何分割的。只需按字节。

+1

除非您打算使用的格式是可分割的,否则这是一个糟糕的主意。从HDFS的角度来看,这并不重要,但对于MapReduce而言,如果它不可分割,则只有一个映射器能够处理所述文件。 –

回答

8

是的,它分割文件(默认情况下,在128mb块)。每个块将被存储在3个随机节点上。因此,您将有10TB的数据均匀分布在10个节点上。

+1

您可以添加更多关于如何完成拆分的细节 - 如果字节再见字节或其他机制。为什么我需要知道这一点 - 如果我编写map reduce程序,hadoop如何知道哪些数据位于哪个节点等等关于数据局部性的信息。 – samshers

+2

名称节点管理关于文件被分割成的所有不同块的元数据,其中每个块(在哪个数据节点上)以及副本的制作位置。可以配置块大小和复制因子。将文件分割由您用来将文件写入HDFS的客户端完成。如果一条线大于块大小,那么该线仍然会被分割并放置在两个块中。看到这个链接详细解释 - http://stackoverflow.com/questions/14291170/how-does-hadoop-process-records-split-across-block-boundaries –