谈谈Hadoop框架的底层存储组件HDFS

对于大数据来说,数据量是巨大的,多样性的,而且后期是要进行本地计算的,这样的话数据的存储要求是可靠的来保证数据的不丢失,HDFS就实现了这样的一个功能。

在处理大数据的过程中,一个数据文件会相应存储在hdfs上不同节点的不同文件中,把这些文件组织起来放到不同的文件夹中,这种组织方式叫做命名空间。

HDFS的结构也是遵循主从模式的,主节点主要负责维护命名空间,即维护一个文件在硬盘存储的对应位置,从节点负责存储真实的数据。由于需要存储的文件的格式、大小等不一定相同,所以HDFS提供了一个虚拟的独立存储单位,定义为block(块),方便统一对文件的存储和操作。

主节点:可以有两个。namenode、secondnamenode。
从节点:可以有多个。datanode。
在这需要注意一点,namenode和datanode的version必须保持一致,否则会初始化失败。

文件块:文件块的区分是从文件0偏移量开始,按照固定大小,顺序对文件进行划分并编号,划分好的每一个小文件成为一个block。默认block的大小是128M,如果一个文件的大小没有128M,此时只是逻辑上占有128M,而在实际存储时占用实际文件大小的空间。

HDFS存储数据的可靠性主要表现在其的副本机制,默认是3个,而且有其自己的一套存储策略。一个分布式的集群包含有很多的机架,每个机架又包含很多节点,机架内的节点之间的传输效率高于跨机架的节点之间的传输效率,并且机架之间机器的网络通讯通常要收到上层交换机的间网络带宽的限制。所以为了数据的安全和高效,Hadoop默认的存储策略是:
1、第一个副本存储在client所在的node中。(如果client不在集群中,则随机存储一个node)
2、第二个副本存储在与第一个副本不同机架的其他任意机架的任意node中。
3、第三个副本存储在与第一个副本同一个机架但是不同的node中。
4、如果还有其他副本设置,则随机选择存储。
这样的存储策略可以保证如果第一个节点失效时,能够优先在本机架找到另一个副本,另外如果整个机架发生了故障,能够保证在其他的机架中同样能够找到副本。这样既保证了数据的可靠,又兼容了高效。

当然Hadoop对机架的感知并非是自适应的,不能自动分辨哪个节点是属于哪个机架的,而是需要集群管理者告知其哪个节点属于哪个机架,这样Hadoop的namenode在启动初始化时,能够将机器和节点的对应信息加载到内存中,作为读写block时选择DataNode的策略。我们可以通过namenode所在节点的Hadoop-site.xml文件进行配置,此处不再详述。

你可能感兴趣的:(Hadoop)