HDFS常用命令与调优总结

HDFS集群优化 操作系统级别优化 1.优化文件系统 (推荐使用EXT4和XFS文件系统,相比较而言,更推荐后者,因为XFS已经帮我们做了大量的优化。) 2.预读缓冲   预读技术可以有效的减少磁盘寻道次数和应用的I/O等待时间,增加Linux文件系统预读缓冲区的大小(默认为256 sectors,128KB),可以明显提高顺序文件的读性能,建议调整到1024或2048 sectors。预读缓冲区的设置可以通过blockdev命令来完成。 3.放弃RAID和LVM磁盘管理方式,选用JBOD 复制代码 不使用RAID   应避 阅读详情

一、HDFS相关常用总结

1、HDFS文件块

  • 默认是128M
  • 寻址时间:就是指的查找到目标block的时间
  • 寻址时间最佳为传输时间的1%
  • 目前磁盘的传输速率普遍为100M/s
  • block的大小应该为=传输时间*传输速率

HDFS块大小调节标准

  • HDFS块设置太小会增加寻址时间
  • HDFS块设置太大会导致磁盘传输数据时间明显大于寻址时间,导致处理很慢
  • HDFS块的大小设置取决于传输速率,也就是最好=传输时间*传输速率

2、HDFS的shell命令

3.常用命令实操
(0)启动Hadoop集群(方便后续的测试)
[gklearlove@hadoop102 hadoop-2.7.2]$ sbin/start-dfs.sh
[gklearlove@hadoop103 hadoop-2.7.2]$ sbin/start-yarn.sh
(1)-help:输出这个命令参数
[gklearlove@hadoop102 hadoop-2.7.2]$ hadoop fs -help rm
(2)-ls: 显示目录信息
[gklearlove@hadoop102 hadoop-2.7.2]$ hadoop fs -ls /
(3)-mkdir:在HDFS上创建目录
[gklearlove@hadoop102 hadoop-2.7.2]$ hadoop fs -mkdir -p /sanguo/shuguo
(4)-moveFromLocal:从本地剪切粘贴到HDFS
[gklearlove@hadoop102 hadoop-2.7.2]$ touch kongming.txt
[gklearlove@hadoop102 hadoop-2.7.2]$ hadoop fs  -moveFromLocal  ./kongming.txt  /sanguo/shuguo
(5)-appendToFile:追加一个文件到已经存在的文件末尾
[gklearlove@hadoop102 hadoop-2.7.2]$ touch liubei.txt
[gklearlove@hadoop102 hadoop-2.7.2]$ vi liubei.txt
输入
san gu mao lu
[gklearlove@hadoop102 hadoop-2.7.2]$ hadoop fs -appendToFile liubei.txt /sanguo/shuguo/kongming.txt
(6)-cat:显示文件内容
[gklearlove@hadoop102 hadoop-2.7.2]$ hadoop fs -cat /sanguo/shuguo/kongming.txt
(7)-chgrp 、-chmod、-chown:Linux文件系统中的用法一样,修改文件所属权限
[gklearlove@hadoop102 hadoop-2.7.2]$ hadoop fs  -chmod  666  /sanguo/shuguo/kongming.txt
[gklearlove@hadoop102 hadoop-2.7.2]$ hadoop fs  -chown  gklearlove:gklearlove   /sanguo/shuguo/kongming.txt
(8)-copyFromLocal:从本地文件系统中拷贝文件到HDFS路径去
[gklearlove@hadoop102 hadoop-2.7.2]$ hadoop fs -copyFromLocal README.txt /
(9)-copyToLocal:从HDFS拷贝到本地
[gklearlove@hadoop102 hadoop-2.7.2]$ hadoop fs -copyToLocal /sanguo/shuguo/kongming.txt ./
(10)-cp :从HDFS的一个路径拷贝到HDFS的另一个路径
[gklearlove@hadoop102 hadoop-2.7.2]$ hadoop fs -cp /sanguo/shuguo/kongming.txt /zhuge.txt
(11)-mv:在HDFS目录中移动文件
[gklearlove@hadoop102 hadoop-2.7.2]$ hadoop fs -mv /zhuge.txt /sanguo/shuguo/
(12)-get:等同于copyToLocal,就是从HDFS下载文件到本地
[gklearlove@hadoop102 hadoop-2.7.2]$ hadoop fs -get /sanguo/shuguo/kongming.txt ./
(13)-getmerge:合并下载多个文件,比如HDFS的目录 /user/gklearlove/test下有多个文件:log.1, log.2,log.3,...
[gklearlove@hadoop102 hadoop-2.7.2]$ hadoop fs -getmerge /user/gklearlove/test/* ./zaiyiqi.txt
(14)-put:等同于copyFromLocal
[gklearlove@hadoop102 hadoop-2.7.2]$ hadoop fs -put ./zaiyiqi.txt /user/gklearlove/test/
(15)-tail:显示一个文件的末尾
[gklearlove@hadoop102 hadoop-2.7.2]$ hadoop fs -tail /sanguo/shuguo/kongming.txt
(16)-rm:删除文件或文件夹
[gklearlove@hadoop102 hadoop-2.7.2]$ hadoop fs -rm /user/gklearlove/test/jinlian2.txt
(17)-rmdir:删除空目录
[gklearlove@hadoop102 hadoop-2.7.2]$ hadoop fs -mkdir /test
[gklearlove@hadoop102 hadoop-2.7.2]$ hadoop fs -rmdir /test
(18)-du统计文件夹的大小信息
[gklearlove@hadoop102 hadoop-2.7.2]$ hadoop fs -du -s -h /user/gklearlove/test
2.7 K  /user/gklearlove/test

[gklearlove@hadoop102 hadoop-2.7.2]$ hadoop fs -du  -h /user/gklearlove/test
1.3 K  /user/gklearlove/test/README.txt
15     /user/gklearlove/test/jinlian.txt
1.4 K  /user/gklearlove/test/zaiyiqi.txt
(19)-setrep:设置HDFS中文件的副本数量
[gklearlove@hadoop102 hadoop-2.7.2]$ hadoop fs -setrep 10 /sanguo/shuguo/kongming.txt
 
图3-3  HDFS副本数量
这里设置的副本数只是记录在NameNode的元数据中,是否真的会有这么多副本,还得看DataNode的数量。因为目前只有3台设备,最多也就3个副本,只有节点数的增加到10台时,副本数才能达到10。

在这里插入图片描述

3、HDFS相关实用概念总结

  • HDFS写数据时,NameNode会判断哪个DataNode距离最近,然后写入,所以节点距离的计算方法是:两个节点到达最近的共同祖先的距离总和。

  • Fsimage:NameNode内存中元数据序列化后形成的文件,包含HDFS文件系统的所有目录和文件inode的序列化信息

  • Edits:记录客户端更新元数据信息的每一步操作(可通过Edits运算出元数据),文件系统客户端执行的所有写操作首先会被记录到Edits文件中。

  • NameNode启动过程:将Fsimage文件读入内存,加载Edits里面的更新操作,保证内存中的元数据信息都是最新、同步的。NameNode启动时就会将Fsimage和Edits合并

  • 集群安全模式:

    • NameNode启动(此时处于安全模式):首先将镜像文件载入内存,并执行Edits文件中的各种操作。一旦在内存中成功建立文件系统元数据的映像,则创建一个新的Fsimage文件和空的Edits日志。此时,NameNode开始监听DataNode请求。在这个过程中,NameNode一直运行在安全模式,即NameNode的文件系统对于客户端来说是只读的。

    • DataNode启动:系统的数据块的位置并不是由NameNode维护的,而是以块列表形式储存在DataNode中。在系统正常操作期间,NameNode会在内存中保留所有块位置的映射信息。在安全模式下,各个DataNode会向NameNode发送最新的块列表信息,NameNode了解到足够多的快位置信息后,即可高效运行文件系统

    • 安全模式退出判断:

      • 最小副本条件:整个文件系统99.9%的块都满足对小副本级别(默认值:dfs.replication.min=1)。此时NameNode会在30秒后退出安全模式。
    • HDFS刚刚格式化启动时,NameNode不会进入安全模式,因为系统没有任何数据块。

    • 相关命令:

      (1)bin/hdfs dfsadmin -safemode get (功能描述:查看安全模式状态)

      (2)bin/hdfs dfsadmin -safemode enter (功能描述:进入安全模式状态)

      (3)bin/hdfs dfsadmin -safemode leave (功能描述:离开安全模式状态)

      (4)bin/hdfs dfsadmin -safemode wait (功能描述:等待安全模式状态)

4、HDFS查看Fsimage和Edits

  • oiv查看Fsimage文件

    hdfs oiv -p 文件类型 -i镜像文件 -o 转换后文件输出路径

    例子:

    hdfs oiv -p XML -i fsimage_0000000000000000025
    
  • oev查看Edits文件

    hdfs oev -p 文件类型 -i编辑日志 -o 转换后文件输出路径

    例子:

    hdfs oev -p XML -i edits_0000000000000000012-0000000000000000013 -o /opt/module/hadoop-2.7.2/edits.xml
    

5、HDFS相关参数总结

  • CheckPoint时间设置
    • 默认是一小时或操作次数达到1百万时SecondaryNameNode合并一次。一分钟检查一次操作次数

    • 修改步骤:

      • 文件hdfs-default.xml

      • 参数:

        #最大间隔合并时间
        <property>
          <name>dfs.namenode.checkpoint.period</name>
          <value>3600</value>
        </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 >
        
  • 掉线时限参数设置
    • 掉线定义:当DataNode进程死亡或者网络故障造成DataNode无法与NameNode通信时,NameNode不会立即把该节点判定为死亡,要经过一段时间,这段时间为超时时长,HDFS默认的超时时长为10分+30秒

    • 掉线时限公式:

      TimeOut=2 * dfs.namenode.heartbeat.recheck-interval+10 * dfs.heartbeat.interval
      
    • 其中对应的hdfs-site.xml配置文件的两个参数:dfs.heartbeat.interval单位是秒,heartbeat.recheck.interval单位是毫秒

      <property>
          <name>dfs.namenode.heartbeat.recheck-interval</name>
          <value>300000</value>
      </property>
      
      <property>
          <name>dfs.heartbeat.interval</name>
          <value>3</value>
      </property>
      

6、HDFS实用场景

  • NameNode多目录配置:NameNode本地目录可以配置成多个,且内容相同,这样增加了可靠性,步骤如下:
    • 在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>
      
    • 停止集群,删除data和logs中所有数据

      [gklearlove@hadoop102 hadoop-2.7.2]$ rm -rf data/ logs/
      [gklearlove@hadoop103 hadoop-2.7.2]$ rm -rf data/ logs/
      [gklearlove@hadoop104 hadoop-2.7.2]$ rm -rf data/ logs/
      
    • 格式化集群并启动

      [gklearlove@hadoop102 hadoop-2.7.2]$ bin/hdfs namenode –format
      [gklearlove@hadoop102 hadoop-2.7.2]$ sbin/start-dfs.sh
      
    • 查看结果

      [gklearlove@hadoop102 dfs]$ ll
      总用量 12
      drwx------. 3 gklearlove gklearlove 4096 12月 11 08:03 data
      drwxrwxr-x. 3 gklearlove gklearlove 4096 12月 11 08:03 name1
      drwxrwxr-x. 3 gklearlove gklearlove 4096 12月 11 08:03 name2
      
  • NameNode故障处理
    • 方法一:将SecondaryNameNode中数据拷贝到NameNode存储数据的目录

      • kill -9 NameNode进程

      • 删除NameNode存储的数据(/opt/module/hadoop-2.7.2/data/tmp/dfs/name)

        [gklearlove@hadoop102 hadoop-2.7.2]$ rm -rf /opt/module/hadoop-2.7.2/data/tmp/dfs/name/*
        
      • 拷贝SecondaryNameNode中数据到原NameNode存储数据目录

        [gklearlove@hadoop102 dfs]$ scp -r gklearlove@hadoop104:/opt/module/hadoop-2.7.2/data/tmp/dfs/namesecondary/* ./name/
        
      • 重新启动NameNode

        [gklearlove@hadoop102 hadoop-2.7.2]$ sbin/hadoop-daemon.sh start namenodebk
        
    • 方法二:使用-importCheckpoint选项启动NameNode守护进程,从而将SecondaryNameNode中数据拷贝到NameNode目录中。

      • 修改hdfs-site.xml中的

        <property>
          <name>dfs.namenode.checkpoint.period</name>
          <value>120</value>
        </property>
        
        <property>
          <name>dfs.namenode.name.dir</name>
          <value>/opt/module/hadoop-2.7.2/data/tmp/dfs/name</value>
        </property>
        
      • kill -9 NameNode进程

      • 删除NameNode存储的数据

        rm -rf /opt/module/hadoop-2.7.2/data/tmp/dfs/name/*
        
      • 如果SecondaryNameNode不和NameNode在一个主机节点上,需要将SecondaryNameNode存储数据的目录拷贝到NameNode存储数据的平级目录,并删除in_use.lock文件

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

        bin/hdfs namenode -importCheckpoint
        
      • 启动NameNode

        sbin/hadoop-daemon.sh start namenode
        
  • 服役新数据节点
    • 随着业务增长,数据量增大,原来的数据节点已经无法满足,所以要增加数据节点

    • 步骤:

      • 机器准备

        1. 克隆一台相同的机器
        2. 修改IP地址和主机名称
        3. 删除原来HDFS文件系统留存的文件(/opt/module/hadoop-2.7.2/data和log)
        4. source一下配置文件
      • 配置步骤

        1. 启动DataNode:

          [gklearlove@hadoop105 hadoop-2.7.2]$ sbin/hadoop-daemon.sh start datanode
          [gklearlove@hadoop105 hadoop-2.7.2]$ sbin/yarn-daemon.sh start nodemanager
          
        2. 上传文件测试

          hadoop fs -put /opt/module/hadoop-2.7.2/LICENSE.txt /
          
        3. 如果数据不均衡,用命令实现集群的再平衡

          ./start-balancer.sh
          
  • 退役旧数据节点
    • 添加白名单形式:在白名单内的主机节点,允许访问NameNode,不在白名单的主机节点都会被退出。配置白名单如下:

      • 在NameNode的/opt/module/hadoop-2.7.2/etc/hadoop目录下创建dfs.hosts文件

        vi dfs.hosts
        将不需要退出的节点写入,比如hadoop4是需要退出的,那么就写1 2 3 
        hadoop1
        hadoop2
        hadoop3
        
      • 在NameNode的hdfs-site.xml配置文件中增加dfs.hosts属性

        <property>
        <name>dfs.hosts</name>
        <value>/opt/module/hadoop-2.7.2/etc/hadoop/dfs.hosts</value>
        </property>
        
      • 配置文件分发

        xsync hdfs-site.xml
        
      • 刷新NameNode

        hdfs dfsadmin -refreshNodes
        
      • 更新ResourceManager节点

        yarn rmadmin -refreshNodes
        
      • 如果数据不均衡,就使用命令实现均衡

        ./start-balancer.sh
        
    • 添加黑名单形式:在黑名单的节点都会被强制退出,步骤如下:

      • 在NameNode的/opt/module/hadoop-2.7.2/etc/hadoop目录下创建dfs.hosts.exclude文件

        [gklearlove@hadoop102 hadoop]$ pwd
        /opt/module/hadoop-2.7.2/etc/hadoop
        [gklearlove@hadoop102 hadoop]$ touch dfs.hosts.exclude
        
      • 添加需要退出的主机名

        比如这里需要让hadoop4退出
        vi dfs.hosts.exclude
        
        hadoop4
        
      • 在hdfs-site.xml配置文件中增加dfs.hosts.exclude属性

        <property>
        <name>dfs.hosts.exclude</name>
              <value>/opt/module/hadoop-2.7.2/etc/hadoop/dfs.hosts.exclude</value>
        </property>
        
      • 刷新NameNode、刷新ResourceManager

        hdfs dfsadmin -refreshNodes
        
        yarn rmadmin -refreshNodes
        
      • 通过Web服务器查看退役状态:decommission in progress表示退役中,decommissioned表示退役成功

      • 退役成功后,停掉它的datanode和nodemanager

         sbin/hadoop-daemon.sh stop datanode
         
         sbin/yarn-daemon.sh stop nodemanager
        
      • 如果数据不均衡,就要使用命令来让集群平衡

         sbin/start-balancer.sh 
        
  • DataNode多目录配置
    • DataNode也可以配置成多个目录,每个目录存储的数据不一样。即:数据不是副本

    • 具体配置如下:

      • 修改hdfs-site.xml

        <property>
                <name>dfs.datanode.data.dir</name>
        <value>file:///${hadoop.tmp.dir}/dfs/data1,file:///${hadoop.tmp.dir}/dfs/data2</value>
        </property>
        
  • 实现两个Hadoop集群之间的递归数据复制
    • bin/hadoop distcp
      hdfs://haoop102:9000/user/gklearlove/hello.txt hdfs://hadoop103:9000/user/gklearlove/hello.txt
      
  • 小文件存档
    • HDFS存储小文件弊端:每个文件按块存储,每个块的元数据存储在NameNode的内存中,因此存储小文件会非常低效,因为存储大量小文件的元数据会耗尽NameNode中的大部分内存

    • 但是,存储小文件所需要的磁盘容量和数据块的大小无关:也就是说1M的数据使用128M的块存储,实际使用的仍然是1M磁盘空间而不是128M。

    • 解决方法:使用HDFS存档文件或叫做HAR文件。

      • HDFS存档文件(HARwenjian ):一个更高效的文件存档工具,在逻辑上将多个小文件变成一个整体。具体来说就是HDFS的小文件还是一个一个的独立文件,但是对于NameNode来说却是一个整体,也就是中间人的作用,减少了NameNode的内存。

      • 归档后的har文件不可修改,如果需要修改则需要重新归档

      • 使用步骤:

        1. 启动YARN进程

          start-yarn.sh
          
        2. 归档文件:将小文件归档称一个以.har后缀的归档文件。

          #这里把/user/gklearlove/input的所有小文件归档称一个叫做input.har的归档文件,放到/user/gklearlove/output下,注意这里都是hdfs文件系统上
          bin/hadoop archive -archiveName input.har –p  /user/gklearlove/input   /user/gklearlove/output
          
        3. 查看归档

          hadoop fs -lsr /user/gklearlove/output/input.har
          
          hadoop fs -lsr har:///user/gklearlove/output/input.har
          
        4. 解归档文件(如果只是需要归档则不需要这一步)

          hadoop fs -cp har:///user/gklearlove/output/input.har/*    /user/gklearlove
          
  • 回收站:可以将删除的文件在不超时的情况下,恢复原数据。
    • 开启方式:

      • 在core-site.xml设置两个参数

        1. fs.trash.interval=文件在回收站的存活时间,默认值=0
        2. fs.trash.checkpoint.interval=检查回收站的间隔时间,默认是=0
        3. 一般来说:fs.trash.checkpoint.interval<fs.trash.interval
        数据值是分钟
        <property>
           <name>fs.trash.interval</name>
        <value>10</value>
        </property>
        <property>
           <name>fs.trash.checkpoint.interval</name>
        <value>1</value>
        </property>
        
      • 查看回收站

        路径在:

        HDFS的文件路径
        /user/gklearlove/.Trash/….
        
      • 修改访问垃圾回收站用户名称,默认是dr.who,在 core-site.xml

        <property>
          <name>hadoop.http.staticuser.user</name>
          <value>gklearlove</value>
        </property>
        
    • 使用方法

      • 在程序中删除文件不会经过回收站,需要调用moveToTrash()才进入回收站

        Trash trash = New Trash(conf);
        trash.moveToTrash(path);
        
      • 恢复回收站数据

        hadoop fs -mv
        /user/gklearlove/.Trash/Current/user/gklearlove/input    /user/gklearlove/input
        
      • 清空回收站

        hadoop fs -expunge
        
  • 快照管理:快照相当于做一个备份,但不会立即复制所有文件,而是记录文件的变化

在这里插入图片描述

  • 开启/禁用指定目录的快照功能

    开启:
    hdfs dfsadmin -allowSnapshot /user/gklearlove/input
    禁用:
    hdfs dfsadmin -disallowSnapshot /user/gklearlove/input
    
  • 对目录创建快照

    创建快照(不指定名称)
    hdfs dfs -createSnapshot /user/gklearlove/input
    创建快照(指定名称)
    hdfs dfs -createSnapshot /user/gklearlove/input  快照名称
    
    查看指定目录快照
    hdfs dfs -lsr /user/gklearlove/input/.snapshot/
    
  • 重命名快照

    hdfs dfs -renameSnapshot /user/gklearlove/input/  旧名称 新名称
    
  • 列出当前用户所有可快照目录

    hdfs lsSnapshottableDir
    
  • 比较两个快照目录的不同之处

    hdfs snapshotDiff
     /user/gklearlove/input/  .  .snapshot/gklearlove170508	
    
  • 恢复快照

    hdfs dfs -cp
    /user/gklearlove/input/.snapshot/s20170708-134303.027 /user
    
  • HDFS-HA高可用(需要做的事情如下,理论上)
    • 元数据管理方式需要改变
      1. 内存中各自保存一份元数据;
      2. Edits日志只有Active状态的NameNode节点可以做写操作;
      3. 两个NameNode都可以读取Edits;
      4. 共享的Edits放在一个共享存储中管理(qjournal和NFS两个主流实现);
    • 需要一个状态管理功能模块
      • 实现了一个zkfailover,常驻在每一个namenode所在的节点,每一个zkfailover负责监控自己所在NameNode节点,利用zk进行状态标识,当需要进行状态切换时,由zkfailover来负责切换,切换时需要防止brain split现象的发生。
    • 必须保证两个NameNode之间能够ssh无密码登录
    • 隔离(Fence),即同一时刻仅仅有一个NameNode对外提供服务
  • HDFS-HA高可用配置(手动转移)(在配置好ZooKeeper的基础上):
    • 在opt目录下创建一个ha文件夹

      mkdir ha
      
    • 将/opt/app/下的 hadoop-2.7.2拷贝到/opt/ha目录下

      cp -r hadoop-2.7.2/ /opt/ha/
      
    • 配置hadoop-env.sh

      export JAVA_HOME=/opt/module/jdk1.8.0_144
      
    • 配置core-site.xml

      <configuration>
      <!-- 把两个NameNode)的地址组装成一个集群mycluster -->
      		<property>
      			<name>fs.defaultFS</name>
              	<value>hdfs://mycluster</value>
      		</property>
      
      		<!-- 指定hadoop运行时产生文件的存储目录 -->
      		<property>
      			<name>hadoop.tmp.dir</name>
      			<value>/opt/ha/hadoop-2.7.2/data/tmp</value>
      		</property>
      </configuration>
      
    • 配置hdfs-site.xml

      <configuration>
      	<!-- 完全分布式集群名称 -->
      	<property>
      		<name>dfs.nameservices</name>
      		<value>mycluster</value>
      	</property>
      
      	<!-- 集群中NameNode节点都有哪些 -->
      	<property>
      		<name>dfs.ha.namenodes.mycluster</name>
      		<value>nn1,nn2</value>
      	</property>
      
      	<!-- nn1的RPC通信地址 -->
      	<property>
      		<name>dfs.namenode.rpc-address.mycluster.nn1</name>
      		<value>hadoop102:9000</value>
      	</property>
      
      	<!-- nn2的RPC通信地址 -->
      	<property>
      		<name>dfs.namenode.rpc-address.mycluster.nn2</name>
      		<value>hadoop103:9000</value>
      	</property>
      
      	<!-- nn1的http通信地址 -->
      	<property>
      		<name>dfs.namenode.http-address.mycluster.nn1</name>
      		<value>hadoop102:50070</value>
      	</property>
      
      	<!-- nn2的http通信地址 -->
      	<property>
      		<name>dfs.namenode.http-address.mycluster.nn2</name>
      		<value>hadoop103:50070</value>
      	</property>
      
      	<!-- 指定NameNode元数据在JournalNode上的存放位置 -->
      	<property>
      		<name>dfs.namenode.shared.edits.dir</name>
      	<value>qjournal://hadoop102:8485;hadoop103:8485;hadoop104:8485/mycluster</value>
      	</property>
      
      	<!-- 配置隔离机制,即同一时刻只能有一台服务器对外响应 -->
      	<property>
      		<name>dfs.ha.fencing.methods</name>
      		<value>sshfence</value>
      	</property>
      
      	<!-- 使用隔离机制时需要ssh无秘钥登录-->
      	<property>
      		<name>dfs.ha.fencing.ssh.private-key-files</name>
      		<value>/home/gklearlove/.ssh/id_rsa</value>
      	</property>
      
      	<!-- 声明journalnode服务器存储目录-->
      	<property>
      		<name>dfs.journalnode.edits.dir</name>
      		<value>/opt/ha/hadoop-2.7.2/data/jn</value>
      	</property>
      
      	<!-- 关闭权限检查-->
      	<property>
      		<name>dfs.permissions.enable</name>
      		<value>false</value>
      	</property>
      
      	<!-- 访问代理类:client,mycluster,active配置失败自动切换实现方式-->
      	<property>
        		<name>dfs.client.failover.proxy.provider.mycluster</name>
      <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
      	</property>
      </configuration>
      
    • 拷贝配置好的hadoop环境到其他节点

    • 启动HDFS-HA集群

      • 在各个JournalNode节点上,输入以下命令启动journalnode服务

        sbin/hadoop-daemon.sh start journalnode
        
      • 在[nn1]上,对其进行格式化,并启动

        	bin/hdfs namenode -format
        	sbin/hadoop-daemon.sh start namenode
        
      • 在[nn2]上,同步nn1的元数据信息

        bin/hdfs namenode -bootstrapStandby
        
      • 启动nn2

        sbin/hadoop-daemon.sh start namenode
        
      • 查看web页面显示,如图所示

在这里插入图片描述

在这里插入图片描述

- 在[nn1]上,启动所有datanode

  ```shell
  	sbin/hadoop-daemons.sh start datanode
  ```

- 将[nn1]切换为Active

  ```shell
  bin/hdfs haadmin -transitionToActive nn1
  ```

- 查看是否Active

  ```shell
  bin/hdfs haadmin -getServiceState nn1
  ```
  • HDFS-HA自动故障转移工作机制
    • 自动故障转移工作机制就是指的当现役的NameNode故障时,会自动转移到备用的NameNode。部署自动故障转移需要两个新的东西:ZooKeeper和ZKFailoverController(ZKFC)进程。也就是说自动故障转移依赖ZooKeeper的故障检测功能,和现役NameNode选择功能。
      • ZooKeeper做的事情是:
        1. 故障检测:集群中的每个NameNode在ZooKeeper中维护了一个持久会话,如果机器崩溃,ZooKeeper中的会话将终止,ZooKeeper通知另一个NameNode需要触发故障转移。
        2. 现役NameNode选择:ZooKeeper提供了一个简单的机制用于唯一的选择一个节点为active状态。如果目前现役NameNode崩溃,另一个节点可能从ZooKeeper获得特殊的排外锁以表明它应该成为现役NameNode。
      • ZKFC(每个NameNode都会运行的进程,是ZooKeeper的客户端,也监视和管理NameNode的状态)做的事情是:
        1. 健康监测:ZKFC使用一个健康检查命令定期地ping与之在相同主机的NameNode,只要该NameNode及时地回复健康状态,ZKFC认为该节点是健康的。如果该节点崩溃,冻结或进入不健康状态,健康监测器标识该节点为非健康的。
        2. ZooKeeper会话管理:当本地NameNode是健康的,ZKFC保持一个在ZooKeeper中打开的会话。如果本地NameNode处于active状态,ZKFC也保持一个特殊的znode锁,该锁使用了ZooKeeper对短暂节点的支持,如果会话终止,锁节点将自动删除。
        3. 基于ZooKeeper的选择:如果本地NameNode是健康的,且ZKFC发现没有其它的节点当前持有znode锁,它将为自己获取该锁。如果成功,则它已经赢得了选择,并负责运行故障转移进程以使它的本地NameNode为Active。故障转移进程与前面描述的手动故障转移相似,首先如果必要保护之前的现役NameNode,然后本地NameNode转换为Active状态。
  • 配置HDFS-HA自动故障转移(在手动基础上)
    • 在hdfs-site.xml中增加

      <property>
      	<name>dfs.ha.automatic-failover.enabled</name>
      	<value>true</value>
      </property>
      
    • 在core-site.xml文件中增加

      <property>
      	<name>ha.zookeeper.quorum</name>xml
      	<value>hadoop102:2181,hadoop103:2181,hadoop104:2181</value>
      </property>
      
    • 启动

      • 关闭所有HDFS服务

        sbin/stop-dfs.sh
        
      • 启动Zookeeper集群

        bin/zkServer.sh start
        
      • 初始化HA在Zookeeper中状态

        bin/hdfs zkfc -formatZK
        
      • 启动HDFS服务

        sbin/start-dfs.sh
        
      • 在各个NameNode节点上启动DFSZK Failover Controller,先在哪台机器启动,哪个机器的NameNode就是Active NameNode

        sbin/hadoop-daemin.sh start zkfc
        
    • 验证

      • 将Active NameNode进程kill

        kill -9 namenode的进程id
        
      • 将Active NameNode机器断开网络

        service network stop
        
  • 配置YARN-HA集群

    • 配置yarn-site.xml文件

      <configuration>
      
          <property>
              <name>yarn.nodemanager.aux-services</name>
              <value>mapreduce_shuffle</value>
          </property>
      
          <!--启用resourcemanager ha-->
          <property>
              <name>yarn.resourcemanager.ha.enabled</name>
              <value>true</value>
          </property>
       
          <!--声明两台resourcemanager的地址-->
          <property>
              <name>yarn.resourcemanager.cluster-id</name>
              <value>cluster-yarn1</value>
          </property>
      
          <property>
              <name>yarn.resourcemanager.ha.rm-ids</name>
              <value>rm1,rm2</value>
          </property>
      
          <property>
              <name>yarn.resourcemanager.hostname.rm1</name>
              <value>hadoop102</value>
          </property>
      
          <property>
              <name>yarn.resourcemanager.hostname.rm2</name>
              <value>hadoop103</value>
          </property>
       
          <!--指定zookeeper集群的地址--> 
          <property>
              <name>yarn.resourcemanager.zk-address</name>
              <value>hadoop102:2181,hadoop103:2181,hadoop104:2181</value>
          </property>
      
          <!--启用自动恢复--> 
          <property>
              <name>yarn.resourcemanager.recovery.enabled</name>
              <value>true</value>
          </property>
       
          <!--指定resourcemanager的状态信息存储在zookeeper集群--> 
          <property>
              <name>yarn.resourcemanager.store.class</name>     <value>org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore</value>
      </property>
      
      </configuration>
      
    • 同步更新其他节点的配置信息

    • 启动HDFS

      1. 在各个JournalNode节点上,输入以下命令启动journalnode服务:

        sbin/hadoop-daemon.sh start journalnode
        
      2. 在[nn1]上,对其进行格式化,并启动:

        bin/hdfs namenode -format
        sbin/hadoop-daemon.sh start namenode
        
      3. 在[nn2]上,同步nn1的元数据信息

        bin/hdfs namenode -bootstrapStandby
        
      4. 启动[nn2]

        sbin/hadoop-daemon.sh start namenode
        
      5. 启动所有DataNode

        sbin/hadoop-daemons.sh start datanode
        
      6. 将[nn1]切换为Active

        bin/hdfs haadmin -transitionToActive nn1
        
    • 启动YARN

      • 在hadoop102中执行:

        sbin/yarn-daemon.sh start resourcemanager
        
      • 在hadoop103中执行

        sbin/yarn-daemon.sh start resourcemanager
        
      • 查看服务状态

        bin/yarn rmadmin -getServiceState rm1
        

在这里插入图片描述

  • HDFS Federation架构设计
    • 提出的原因:

      • NameNode架构的局限性

        1. Namespace的限制:

          由于NameNode在内存中存储所有的元数据(metadata),因此单个NameNode所能存储的对象(文件+块)数目受到NameNode所在JVM的heap size的限制。50G的heap能够存储20亿(200million)个对象,这20亿个对象支持4000个DataNode,12PB的存储(假设文件平均大小为40MB)。随着数据的飞速增长,存储的需求也随之增长。单个DataNode从4T增长到36T,集群的尺寸增长到8000个DataNode。存储的需求从12PB增长到大于100PB。

        2. 隔离问题:

          由于HDFS仅有一个NameNode,无法隔离各个程序,因此HDFS上的一个实验程序就很有可能影响整个HDFS上运行的程序。

        3. 性能的瓶颈

          由于是单个NameNode的HDFS架构,因此整个HDFS文件系统的吞吐量受限于单个NameNode的吞吐量。

    • 架构设计方案:

      • 多个NameNode,每个NameNode负责不同的业务,使用不同的Namespace(隔离性)
(超详细)HDFS常用命令及HDFS API基础编程 HDFS常用命令及基础编程 JunLeon——go big or go home 前言: ​ Hadoop 分布式文件系统 (HDFS) 是一种分布式文件系统,旨在运行在商品硬件上。它与现有的分布式文件系统有很多相似之处。但是与其他分布式文件系统的区别是显着的。HDFS 具有高度容错性,旨在部署在低成本硬件上。HDFS 提供对应用程序数据的高吞吐量访问,适用具有大型数据集的应用程序。HDFS 放宽了一些 POSIX 要求,以启用对文件系统数据的流式访问。HDFS 最初是作为 Apac... 阅读详情

相关推荐

记一次 HDFS NameNode GC 调优

没有碰到过 GC 问题的人生对写 Java 的人来说是不完整的。大数据生态圈的框架大都以 JVM 系语言开发(Java Scala 为主),毕竟生态成熟嘛要啥有啥。HDF...

漫谈大数据 3660

hdfs删除后空间不是释放,trash回收机制

在2023-06-19删除完的文件后,将删除的文件移动到/user/hadoop/.Trash/current文件夹下,3天后2023-06-22检查点生成机制运行,将回收站中的数据移动到/user/hadoop/.Trash/20230622080017,此时也会删除当前时间三天前过期的检查点数据,在2023-06-25检查点生成后,没有把/user/hadoop/.Trash/20230622080017的原因,因为回收站数据量比较大,时间戳时间稍晚20230622080017无法被正常删除。

weixin_43135696的博客 2647

大数据性能调优总结

目录 12.1配置原则 如何发挥集群最佳性能 影响性能的因素 12.2Manager 12.2.1提升Manager配置服务参数的效率 12.2.2根据集群节点数优化Manager配置 12.3HBase 12.3.1提升BulkLoad效率 12.3.2提升连续put场景性能 12.3.3Put和Scan性能综合调优 12.3.4提升实时写数据效率 ...

沧海一粟的博客 5972

Hadoop 性能调优

调优可以通过系统配置、程序编写和作业调度算法来进行。 hdfs 的 block.size 可以调到128/256(网络很好的情况下,默认为 64) 调优的大头:mapred.map.tasks、mapred.reduce.tasks 设置 mr 任务数(默认都是 1) mapred.tasktracker.map.tasks.maximum 每台机器上的最大 map 任务数 mapred.tasktracker.reduce.tasks.maximum 每台机器上的最大 reduce 任务数 mapred.

Jee.Li 1105

大数据HBase(十七):HBase全面调优

全网最详细的大数据HBase文章系列,强烈建议收藏加关注! 新文章都已经列出历史文章目录,帮助大家回顾前面的知识重点。 目录 系列历史文章 HBase的360度全面调优 一、通用调优 二、Linux调优 三、HDFS调优 四、HBase的调优 五、内存优化 六、Zookeeper的调优 系列历史文章 2021年大数据HBase(十七):HBase的360度全面调优 2021年大数据HBase(十六):HBase的协处理器(Coprocessor) 2021年大数据HBase..

Lansonli(蓝深李)的博客 2639

红日-VulnStack靶场-ATT&CK(二):从Weblogic漏洞到域控渗透实战

本文详细解析了红日安全团队VulnStack靶场中从Weblogic漏洞到域控渗透的完整攻击链。通过实战演示Weblogic反序列化漏洞利用、Cobalt Strike持久化控制、域内信息收集及PsExec横向移动等关键技术,复现了企业内网渗透的典型场景,并提供了防御建议。

tgb3456789的博客 935

Hadoop 调优之 HDFS 调优篇

前言 本文隶属于专栏《1000个问题搞定大数据技术体系》,该专栏为笔者原创,引用请注明来源,不足和错误之处请在评论区帮忙指出,谢谢! 本专栏目录结构和参考文献请见1000个问题搞定大数据技术体系 姊妹篇 Hadoop 调优之 Linux 操作系统调优篇 Hadoop 调优之 MapReduce 调优篇 Hadoop 调优之 YARN 调优篇 Hive 如何进行企业级调优? 正文 1. hdfs-site.xml <propertv> <name>dfs.block.si

Shockang的博客 3万+

Groq LPU架构解析:确定性线性处理器如何重塑AI推理

语言模型推理正从‘通用算力堆叠’转向‘确定性硬件定制’。LPU(Language Processing Unit)作为一种面向大模型推理的领域专用处理器,摒弃传统GPU的并行调度、多级缓存与动态执行范式,转而采用空间计算、静态编译与单线程线性流水线设计,实现纳秒级延迟可控性和92%+的HBM带宽利用率。其核心价值在于将模型结构、内存访问、时序路径全部在编译期固化,从而消除运行时抖动——这正是当前MLOps工程师应对A100显存碎片、vLLM调度开销与P99延迟不稳等痛点的关键技术路径。Groq 3 LPU与

weixin_30599521的博客 325

[ hadoop ] 集群性能调优全面总结

集群性能调优全面总结

张伟的专栏 1719

数仓 - 促销敏感度、评论敏感度

1. 促销敏感度 步骤1. 首先按照最后一次下单时间及有无复购情况将用户分为四大群体: 近一年有购物行为且复购的用户 -- L1 (今年复购用户) 近一年有购物行为但无复购的用户 --L2 (今年一单购用户) 最后一次下单时间在1年之前且有复购的用户 --L3 (今年无购且只有一单用户) 最后一次下单时间在1年之前但无复购的用户 -- L4 (今年无购多单用户) 步骤2. 每一类用户群再根据优惠订单占比、每单优惠金额占比的平均值、优惠金额这三个指标进行k-means聚类,分为: 非常敏感 -

weixin_41332009的博客 1898

PCIe链路训练Recovery状态机:从RcvrLock到链路稳定的关键路径

本文深入解析PCIe链路训练中的Recovery状态机,特别是RcvrLock状态的关键作用。从Block对齐、均衡预设值应用到状态转移条件,详细介绍了确保链路稳定的技术要点,并提供了高速率下的特殊处理方法和常见问题排查指南,帮助工程师解决PCIe链路不稳定问题。

weixin_28739079的博客 174

【Hadoop】HDFS 使用教程:从核心原理到工程实战的完整指南

本文全面介绍了Hadoop分布式文件系统(HDFS)的核心概念与工程实践。内容涵盖HDFS架构原理、环境配置、常用命令操作、文件读写流程,以及日志存储分析等实战案例。重点讲解了HDFS适合处理大文件顺序读写的特性,提供了副本管理、回收站设置等高级技巧,并总结了常见错误排查方法。文章强调HDFS在大数据体系中的基础地位,同时指出其不适合小文件和随机访问场景的局限性,为开发者提供了从理论到实践的完整指导。

feizuiku0116的博客 2228

制造业批次管理中双计量单位动态转换的实践指南

本文详细介绍了制造业批次管理中双计量单位动态转换的实践指南,特别是在SAP系统中的配置与操作步骤。通过实际案例展示了如何解决采购与生产部门计量单位不一致的问题,提升物料管理效率。重点讲解了批次特性配置、移动类型调整及常见问题排查方法,适用于金属加工、化工等多个行业。

weixin_29228203的博客 158

CentOS7安装CDH(七):CDH集群Hadoop的HA配置

目录 0. 相关文章链接 1.HDFS的HA配置 2. HDFS中的2个常用命令 3.Yarn的HA配置 4.Yarn中的常用命令 0. 相关文章链接 CentOS7安装CDH(一):CentOS7系统安装 CentOS7安装CDH(二):CentOS7各个软件安装和启动 CentOS7安装CDH(三):CDH中的问题和解决方法 CentOS7安装CDH(四):CDH的版...

yang_shibiao的博客 1885

FastH3 + vLLM-Omni:MiniMax H3 视频生成本地部署与加速实战

随着多模态大模型在视频生成领域的普及,如何高效部署和加速推理成为工程实践的关键。vLLM作为高性能推理框架,通过PagedAttention和continuous batching显著优化了大模型吞吐;而FastH3则针对特定模型结构进行算子融合和CUDA优化。结合vLLM-Omni对多模态输入的支持,可以将MiniMax H3的视频生成耗时从分钟级压缩至秒级。本文以视频生成模型为例,详细拆解环境配置、推理优化与问题排查,为多模态模型本地部署提供参考。

ciya3282的博客 482

信道估计准则演进:从LS、MMSE到LMMSE的工程权衡

本文深入探讨了信道估计准则的演进历程,从LS、MMSE到LMMSE的工程权衡。通过对比分析三大经典算法的数学本质、工程实现及适用场景,揭示了在计算复杂度、实时性和性能之间的关键取舍。文章结合4G/5G基站项目实战经验,提供了算法选型的三维决策模型和前沿发展建议,为无线通信系统设计提供实用指导。

weixin_29327525的博客 282

HDFS Balancer

HDFS Balancer是用于均衡DataNode存储使用率的工具,通过迁移数据块使各节点使用率差距不超过设定阈值(默认10%)。常用命令为hdfs balancer -threshold 10,支持指定节点、调整策略等参数。关键配置包括设置带宽限制dfs.datanode.balance.bandwidthPerSec(默认100MB/s)以避免影响业务,建议根据磁盘类型调整。Balancer不会影响正在写入的文件或破坏副本策略,但会消耗IO和网络资源,应避开业务高峰执行。大集群需调优参数如max-si

houzhizhen的专栏 753

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

HDFS核心操作与实战命令全解析(从入门到精通)

本文全面解析HDFS核心操作与实战命令,从基础入门到生产环境优化,涵盖文件传输、目录管理、权限控制、副本策略及性能调优等关键场景。特别针对Hadoop分布式文件系统(HDFS)的常用命令进行深度剖析,帮助开发者高效管理PB级数据存储,提升集群运维能力。

weixin_30572613的博客 736

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

【HDFS入门】HDFS性能调优实战:关键参数对吞吐量的影响深度解析

HDFS作为Hadoop生态系统的核心存储组件,其性能表现直接影响整个大数据平台的效率。在众多可调优参数中,(块大小)是两个最基础也最关键的配置项

IT成长日记的博客 1474

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

HDFS调优

今天,我来介绍下何为调优以及从两大块简单的介绍下调优的方法 一、调优的目的 充分利用机器的性能,更快的完成mr程序的计算任务。甚至是再有限的机器下,能够支持运行更多的mr程序。通常再poc比拼测试中,代码调试中运用到的比较多。 二、调优的总体概述 从mr程序的内部运行机制,我们可以了解到一个mr程序由mapper和reducer两个阶段组成,其中mapper阶段包括数据的读取、map处理以及写出操...

Y_BigFFFFFF的博客 875

HDFS 参数调优

HDFS 参数调优NameNode 数据目录DataNode 数据目录数据块的副本数数据块大小HDFS 做均衡时使用的最大带宽磁盘可损坏数数据传输连接数NameNode 处理 RPC 调用的线程数NameNode 处理 DataNode 上报数据块和心跳的线程数DataNode 处理 RPC 调用的线程数DataNode 最大传输线程数读写数据时的缓存大小冗余数据块删除新增块延迟汇报增大同时打开的文件描述符和网络连接上限 NameNode 数据目录 本地文件系统路径,决定 NN 在何处存放 fsimage

记录点点滴滴 3378

【HDFS入门】HDFS性能调优实战:压缩与编码技术深度解析

Hadoop分布式文件系统(HDFS)作为大数据生态系统的存储基石,其性能直接影响整个数据处理流程的效率。在实际生产环境中,合理的性能调优可以显著提升HDFS的吞吐量、降低存储成本并优化资源利用率。

IT成长日记的博客 1507

HDFS 读写异常容错机制与调优技巧

HDFS 读写容错与调优!

小林玩大数据 1987

HDFS数据传输速度调优完全指南:原理、手段与实践

硬件是基础:SSD、万兆网络、充足内存是高性能的基石配置是关键:块大小、副本因子、数据包大小、RPC线程数等参数需要根据场景精细调整数据特征是导向:大文件与小文件、顺序读与随机读需要不同的优化策略架构设计是保障:机架感知、数据本地化、负载均衡机制确保整体效率监控是眼睛:只有持续监控和调优,才能保持集群的最佳状态通过本文介绍的优化手段,某电商企业日志系统性能提升37%,某金融风控平台任务时间缩短41%,某云计算公司吞吐量提升58%。这些案例充分说明,系统性的性能调优能够带来显著的收益。

✨ 欢迎来到【Seal ^_^ 的优快云博客】!✨ 1896
上一篇: Hive自定义函数使用步骤(简略版)
下一篇: Druid学习与总结
Gklearlove
博客等级 码龄9年 8粉丝 32原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值