Hadoop之HDFS基础知识

Hadoop之HDFS基础知识

一、HDFS概叙

1.HDFS是一个分布式文件系统,通过目录树来定位文件

2.HDFS优缺点

  1. 优点:高容错性、适合处理大数据、可以构建在廉价的机器上,通过多副本机制,提高可靠性
  2. 缺点:不适合低延迟数据的访问、无法对大量小文件进行存储、不支持并发写入,文件随机修改

3.HDFS组成架构

  1. namenode:
    1. 是一个主管者,管理HDFS的名称空间
    2. 配置副本策略
    3. 管理数据块的映射信息
    4. 处理客户端的请求
  2. datanode
    1. 是一个slave,namenode下达命令,datanode负责实施
    2. 存储实际的数据
    3. 执行数据块的读写操作
  3. secondarynamenode
    1. 并不是namenode的热备,当namenode挂掉后,不能马上替换namenode并提供服务
    2. 辅助namenode进行fsimage和edits的定期合并操作,并推送给namenode
    3. 紧急情况下,可以辅助恢复namenode

4.HDFS的文件块大小

  1. HDFS中的文件是按照数据块形式存储的,hadoop2.x中默认块大小是128M
  2. 数据块大小不能设置太大,也不能设置太小
    1. 太小会导致寻址时间大于传输时间
    2. 太小会导致传输时间大于寻址时间
    3. 以上都不符合数据块的设计原则,最佳状态是数据块的寻址时间是数据传输时间的1%

二、HDFS的数据流

  1. HDFS写数据流程(略)

  2. HDFS读数据流程(略)

  3. 网络拓扑-节点距离计算

    节点距离:两个节点到达最近的共同祖先的距离总和。

  4. 机架感知(副本存储节点选择)

    1. 第一个副本在Client所处的节点上。如果客户端在集群外,随机选一个
    2. 第二个副本和第一个副本位于相同机架,随机节点
    3. 第三个副本位于不同机架,随机节点

三、NameNode和SecondaryNameNode

  1. NN和2NN工作机制(略)

  2. CheckPoint时间设置

    1. 默认的情况下,SecondaryNameNode每隔一小时执行一次。

    2. 默认的情况下,一分钟检查一次操作次数,当操作次数达到1百万时,SecondaryNameNode执行一次。

    3. hdfs-site.xml设置参数(下面参数都是默认的,需要自己更改):

      <property>
        <name>dfs.namenode.checkpoint.period</name>
        <value>3600</value>
        <description>SecondaryNameNode每隔一小时执行一次</description>
      </property>
      <property>
        <name>dfs.namenode.checkpoint.txns</name>
        <value>1000000</value>
        <description>操作动作次数</description>
      </property>
      <property>
        <name>dfs.namenode.checkpoint.check.period</name>
        <value>60</value>
        <description> 1分钟检查一次操作次数</description>
      </property >
      
  3. NameNode故障处理

    1. 方法一:将2NN上数据拷贝到NN的存储元数据的目录下,然后重启下NameNode

      scp -r kgg@hadoop103:/opt/module/hadoop-2.7.2/data/tmp/dfs/namesecondary/* ./name/
      
    2. 方法二:使用-importcheckpoint选项启动NN守护进程,从而将2NN中数据拷贝到NN的存储元数据的目录中

      1. 修改hdfs-site.xml

        <property>
          <name>dfs.namenode.checkpoint.period</name>
          <value>120</value>
        </property>
        
      2. 如果SecondaryNameNode不和NameNode在一个主机节点上,需要将SecondaryNameNode存储数据的目录拷贝到NameNode存储数据的平级目录,并删除in_use.lock文件

        [kgg@hadoop101 dfs]$ scp -r kgg@hadoop103:/opt/module/hadoop-2.7.2/data/tmp/dfs/namesecondary ./
        
        [kgg@hadoop101 namesecondary]$ rm -rf in_use.lock
        
        [kgg@hadoop101 dfs]$ pwd
        /opt/module/hadoop-2.7.2/data/tmp/dfs
        
        [kgg@hadoop101 dfs]$ ls
        data  name  namesecondary
        
      3. 导入检查点数据(等待一会ctrl+c结束掉)

        hdfs namenode -importCheckpoint
        
      4. 启动NameNode

        hadoop-daemon.sh start namenode
        
  4. 安全模式

    1. NN启动后,会加载Fsimage和edits到内存中,然后NN会监控DN,这个过程一直处于安全模式,NN的文件系统对外都是只读模式;
    2. DN启动后,NN会保存DN的所有块信息,在安全模式下,然后DN会向NN发送最新的块列表信息,NN了解到足够多的块位置信息后,可以高效运行文件系统;
    3. 如果满足“最小副本条件“,NN会在30秒后退出安全系统;最小副本条件就是在整个文件系统中99.9%的块满足最小副本级别(默认值:dfs.replication.min=1)。在启动一个刚刚格式化的HDFS集群时,因为系统中还没有任何块,所以NameNode不会进入安全模式。
  5. NameNode的本地目录可以配置成多个,且每个目录存放内容相同,增加了可靠性

    1. 具体配置在hdfs-site.xml文件中增加如下内容

      <property>
          <name>dfs.namenode.name.dir</name>
      	<value>file:///${hadoop.tmp.dir}/dfs/name1,file:///${hadoop.tmp.dir}/dfs/name2</value>
      </property>
      

四、DataNode

  1. DataNode工作机制(略)

  2. 数据完整性

    1. 每次读取数据块时,DN会对该数据块进行checkSum检查,
    2. 如果检查出来的结果和第一次写入的结果不一致,说明该块以损坏
    3. 客户端会向其他DN下载
    4. DN在其文件创建后周期性的检查checkSum
  3. 掉线时限参数设置

    1. DN挂掉后,NN不会第一时间判断该DN不能用,要经过一段时间再判断,这个时间叫做超时时间

    2. HDFS的默认超时时间是10分30秒

    3. 计算公式是:TimeOut=dfs.namenode.heartbeat.recheck-interval * 2+dfs.heartbeat.interval * 10

    4. 具体配置修改hdfs-site.xml 配置文件(下面参数为默认,需自己更改):

      <property>
          <name>dfs.namenode.heartbeat.recheck-interval</name>
          <value>300000</value>
          <description>该参数单位为毫秒</description>
      </property>
      <property>
          <name> dfs.heartbeat.interval </name>
          <value>3</value>
          <description>该参数单位为秒</description>
      </property>
      
  4. 服役新数据节点

    1. 直接添加,注意修改IP地址和主机名称

    2. 如果数据不均衡,可以用命令实现集群的再平衡

      start-balancer.sh
      
  5. 退役旧数据节点(在hdfs-site.xml中配置)

    1. 白名单退役(dfs.hosts)

      <property>
      	<name>dfs.hosts</name>
      	<value>/opt/module/hadoop-2.7.2/etc/hadoop/dfs.hosts</value>
      </property>
      
    2. 黑名单退役(dfs.hosts.exclude)

      <property>
      	<name>dfs.hosts.exclude</name>
      	<value>/opt/module/hadoop-2.7.2/etc/hadoop/dfs.hosts.exclude</value>
      </property>
      
    3. 两种方式都需要刷新NameNode和ResourceManager节点:

      hdfs dfsadmin -refreshNodes
      yarn rmadmin -refreshNodes
      
    4. 如果数据不均衡,可以用命令实现集群的再平衡

      start-balancer.sh
      
    5. 最后注意:不允许白名单和黑名单中同时出现同一个主机名称

  6. DataNode也可以配置成多个目录,每个目录存储的数据不一样。即:数据不是副本

    <property>
    	<name>dfs.datanode.data.dir</name>
    	<value>file:///${hadoop.tmp.dir}/dfs/data1,file:///${hadoop.tmp.dir}/dfs/data2</value>
    </property>
    

五、HDFS 2.X新特性

  1. 集群间数据拷贝

    1. scp实现两个远程主机之间的文件复制

      scp -r hello.txt root@hadoop103:/user/kgg/hello.txt  		// 推 push
      scp -r root@hadoop103:/user/kgg/hello.txt  hello.txt		// 拉 pull
      scp -r root@hadoop103:/user/kgg/hello.txt root@hadoop104:/user/kgg   //是通过本地主机中转实现两个远程主机的文件复制;如果在两个远程主机之间ssh没有配置的情况下可以使用该方式。
      
    2. 采用distcp命令实现两个Hadoop集群之间的递归数据复制

      bin/hadoop distcp hdfs://haoop102:9000/user/kgg/hello.txt hdfs://hadoop103:9000/user/kgg/hello.txt
      
  2. Hadoop存档

    1. Hadoop存档文件或HAR文件,是一个更高效的文件存档工具,它将文件存入HDFS块,在减少NameNode内存使用的同时,允许对文件进行透明的访问。具体说来,Hadoop存档文件对内还是一个一个独立文件,对NameNode而言却是一个整体,减少了NameNode的内存。

      bin/hadoop archive -archiveName input.har –p  /user/kgg/input   /user/kgg/output	//把/user/kgg/input目录里面的所有文件归档成一个叫input.har的归档文件,并把归档后文件存储到/user/kgg/output路径下
      hadoop fs -lsr /user/kgg/output/input.har
      hadoop fs -lsr har:///user/kgg/output/input.har	//查看归档
      hadoop fs -cp har:/// user/kgg/output/input.har/*  /user/kgg		//解归档文件
      

六、Hadoop HA高可用

  1. HDFS-HA
    1. HDFS-HA是通过双NameNode消除单点故障
  2. Yarn-HA
    1. Yarn-HA是通过双ResourceManager消除单点故障
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值