云计算分布式框架 Hadoop

107课时
2.2K学过
8分

课程评价 (0)

请对课程作出评价:
0/300

学员评价

暂无精选评价
10分钟

HDFS结构模型

HDFS是一个主从(Master/Slave)结构模型。从最终用户的角度来看,它就像传统的文件系统一样,可以通过目录路径对文件执行CRUD(create、read、update、delete)操作。一个HDFS集群是由一个NameNode和若干个DataNode组成的。NameNode主节点是主服务器,管理文件系统的命名空间和客户端对文件的访问操作;DataNode是集群中一般节点,它负责节点的数据的存储。客户端通过NameNode向DataNode节点交互访问文件系统,联系NameNode获得文件的元数,而文件I/O操作则是直接和DataNode进行交互的。HDFS允许用户以文件的形式存储数据。

从数据内部来看,文件被分成若干个数据块,典型数据块大小是64M。HDFS的文件通常是按照64MB被切分成不同的数据块(Block)的,每个数据块尽可能地分散存储在不同的DataNode中,而若干个数据块存放在一组DataNode上。NameNode执行文件系统的命名空间操作,比如打开、关闭、重命名文件或目录等,它也负责数据块到具体DataNode的映射。DataNode负责处理文件系统客户端的文件读写请求,并在NameNode的统一调度下进行数据块的创建、删除和复制工作。其HDFS原理如下图所示。

假设客户端要访问一个文件,首先,客户端从NameNode中获得组成该文件的数据块位置列表,即知道数据块存储在那些DataNode上,然后,客户端直接从DataNode上读取文件数据。在这过程中,NameNode不参与与文件的传输。

NameNode和DataNode都是设计成可以在廉价linux主机上运行。HDFS采用Java语言开发,因此可以部署在大范围的机器上。一个典型案例是一台机器跑一个单独的NameNode节点,集群中的其他机器各跑一个DataNode实例。这个架构并不排除一台机器上跑多个DataNode,不过这比较少见。

NameNode是HDFS的守护程序,它主要负责记录大数据文件文件如何被分割成数据块,被分割后的数据块分别被存储到哪些DataNode数据节点上。NameNode主要功能是对内存以及I/O进行集中管理。NameNode节点是单一的,这样就可以大大简化了系统的架构。NameNode负责保管和管理所有的HDFS元数据,因而用户文件数据的读写就可以直接在DataNode上而不需要通过NameNode。在一般情况下,NameNode服务器不存储任何用户信息或执行计算任务,这样可以降低服务器的性能。如果DataNode服务器因出现软硬件的宕机问题,Hadoop集群依然可以继续运转,或者快速重启。但是,由于NameNode是Hadoop集群中的一个单点,一旦NameNode服务器宕机,整个系统将无法运行。

集群中的每个Slave从服务器都运行一个DataNode后台程序,这个后台程序负责把HDFS数据块读写到本地的文件系统。当客户端读/写数据时,首先经过NameNode告诉客户端去哪个DataNode进行具体的读/写操作,然后客户端就可以直接与该DataNode服务器的后台程序进行通信,进行相关的数据读/写操作了。