HDFS伪分布式环境搭建

  

HDFS概述及设计目标

  

什么是HDFS:

  
      <李>是Hadoop实现的一个分布式文件系统(Hadoop分布式文件系统),简称HDFS李   <李>源自于谷歌的GFS论文   <李>论文发表于2003年,HDFS是GFS的克隆版   
  

HDFS的设计目标:

  
      <李>非常巨大的分布式文件系统李   <李>运行在普通廉价的硬件上李   <李>易扩展,为用户×××能不错的文件存储服务,也就是容错性李   
  

HDFS官方文档地址如下:

  
  https://hadoop.apache.org/docs/stable/hadoop-project-dist/hadoop-hdfs/HdfsDesign.html

     <人力资源/>   

HDFS架构

  

HDFS是主/从式的架构。一个HDFS集群会有一个NameNode(简称NN),也就是命名节点,该节点作为主服务器存在(主服务器).NameNode用于管理文件系统的命名空间以及调节客户访问文件。此外,还会有多个DataNode(简称DN),也就是数据节点,数据节点作为从节点存在(从属服务器),通常每一个集群中的DataNode,都会被NameNode所管理,DataNode用于存储数据。

  

HDFS公开了文件系统名称空间,允许用户将数据存储在文件中,就好比我们平时使用操作系统中的文件系统一样,用户无需关心底层是如何存储数据的。而在底层,一个文件会被分成一个或多个数据块,这些数据块会被存储在一组数据节点中。在鼎晖中数据块的默认大小是128,这个大小我们可以通过配置文件进行调节,然后在上我们可以执行文件系统的命名空间操作,例如打开、关闭,重命名文件等。这也决定了数据块到数据节点的映射。

  

我们可以来看看HDFS的架构图:
 HDFS伪分布式环境搭建

  

HDFS被设计为可以运行在普通的廉价机器上,而这些机器通常运行着一个Linux操作系统.HDFS是使用java语言编写的,任何支持java的机器都可以运行HDFS。使用高度可移植的java语言编写的HDFS,意味着可以部署在广泛的机器上。一个典型的HDFS集群部署会有一个专门的机器只能运行NameNode,而其他集群中的机器各自运行一个DataNode实例。虽然一台机器上也可以运行多个节点,但是并不建议这么做,除非是学习环境。

  

总结:   

      <李> HDFS是主/从式的架构,一个HDFS集群会有一个NameNode以及多个DataNode李   <李>一个文件会被拆分为多个数据块进行存储,默认数据块大小是128   <李>即便一个数据块大小为130米,也会被拆分为2个,一个大小为128,一个大小为2 m   <李> HDFS是使用Java编写的,使得其可以运行在安装了JDK的操作系统之上李   
  

神经网络:   

      <李>负责客户端请求的响应李   <李>负责元数据(文件的名称,副本系数,块存放的DN)的管理李   
  DN:

  
      <李>存储用户的文件对应的数据块(块)   <李>会定期向神经网络发送心跳信息,汇报本身及其所有的块信息和健康状况李   
  <人力资源/>   

HDFS副本机制

  

在HDFS中,一个文件会被拆分为一个或多个数据块。默认情况下,每个数据块都会有三个副本。每个副本都会被存放在不同的机器上,而且每一个副本都有自己唯一的编号。

  

如下图:
 HDFS伪分布式环境搭建

  <人力资源/>   

HDFS副本存放策略

  

NameNode节点选择一个DataNode节点去存储块副本得过程就叫做副本存放,这个过程的策略其实就是在可靠性和读写带宽间得权衡。

  

《Hadoop权威指南》中的默认方式:

  
      <李>第一个副本会随机选择,但是不会选择存储过满的节点。   <李>第二个副本放在和第一个副本不同且随机选择的机架上。   <李>第三个和第二个放在同一个机架上的不同节点上。   <李>剩余的副本就完全随机节点了。   
  

如下图:
 HDFS伪分布式环境搭建

  

可以看出这个方案比较合理:

  
      <李>可靠性:块存储在两个机架上李   <李>写带宽:写操作仅仅穿过一个网络交换机李   <李>读操作:选择其中得一个机架去读   <李>块分布在整个集群上。

    HDFS伪分布式环境搭建