您好,欢迎来到华佗小知识。
搜索
您的当前位置:首页HDFS的配置详解和日常维护

HDFS的配置详解和日常维护

来源:华佗小知识
HDFS的配置详解和⽇常维护

             HDFS的配置详解和⽇常维护

                                     作者:尹正杰版权声明:原创作品,谢绝转载!否则将追究法律责任。

⼀.HDFS运维概述

  HDFS的运维主要分为两⽅⾯,⼀⽅⾯是对⽂件系统的管理,这部分与linux⽂件系统的操作有很多相似之处,较易掌握;另⼀⽅⾯是对分布式进程的管理.  通过Cloudera Manager Server的Web UI去访问HDFS界⾯。具体操作如下:

1>.点击HDFS服务

2>.点击\"Web UI\随机选择⼀个NameNode节点(我这⾥做了hdfs ha模式)。

3>.查看Hadoop版本

4>.除了上⾯的⽅式查看Hadoop版本,我们还可以⽤以下的⽅式查看

5>.随机选中⼀个节点

6>.点击\"组件\",可以查看各个软件的版本

⼆.HDFS配置⽂件详解

1>.以下参数讲解以社区版2.6.0的参数名和默认值为准(配置⽂件为:hdfs-default.xml / hdfs-site.xml )。

  链接地址:http://hadoop.apache.org/docs/r2.6.0/hadoop-project-dist/hadoop-hdfs/hdfs-default.xml

2>.dfs.namenode.name.dir

  指定⼀个本地⽂件系统路径,决定NN在何处存放fsimage。可以通过逗号分隔指定多个路径,在Hadoop1.0时代这是⼀种为NN做⾼可⽤的⽅法,但⽬前有更完善的Journal Node解决⽅案,留默认值即可。

3>.dfs.permissions.enabled

默认为true。如果为true,则启⽤HDFS的权限检查,否则不启⽤。在⽣产 环境,⼀定要启⽤,测试环境可以⾃⾏决定。

4>.dfs.permissions.superusergroup

默认supergroup,指定HDFS的超级⽤户组的组名,可按需设置。

5>.dfs.datanode.data.dir

  默认file://${hadoop.tmp.dir}/dfs/data,指定DN存放块数据的本地盘路径,可以通过逗号分隔指定多个路径。在⽣产环境可能会在⼀个DN上挂多块盘,因此需要修改该值。

6>.dfs.replication

  块副本数,默认为3。默认值是⼀个⽐较稳妥的值。

7>.dfs.blocksize

块⼤⼩,默认为134217728,即128MB。对⼤多数⽣产环境来说是⼀个⽐较稳妥的值。因为该值决定了MR的默认map数,也会影响NN消耗的内存量, 需要谨慎修改。

8>.dfs.namenode.handler.count

  NN处理rpc请求的线程数,默认为10,对⼤多数集群来说该值过⼩,设置该值的⼀般原则是将其设置为集群⼤⼩的⾃然对数乘以20,即20logN,N为集群⼤⼩。例如对100个节点的集群该值可以设到90。   

  当然,我们可以通过python帮我们计算合适的值。

  [root@node101.yinzhengjie.org.cn ~]# python -c 'import math ; print int(math.log(100) * 20)'   92

  [root@node101.yinzhengjie.org.cn ~]#

9>.dfs.datanode.balance.bandwidthPerSec

  HDFS做均衡时使⽤的最⼤带宽,默认为1048576,即1MB/s,对⼤多数千兆 甚⾄万兆带宽的集群来说过⼩。不过该值可以在启动balancer脚本时再设 置,可以不修改集群层⾯默认值。

10>.dfs.hosts / dfs.hosts.exclude

  指定连接NN的主机的⽩/⿊名单。通常⿊名单⽐较有⽤,例如在对DN进⾏ 更换硬盘操作时,可以先将其加⼊⿊名单进⾏摘除,等运维操作结束后再放⾏。  参考链接:https://www.cnblogs.com/yinzhengjie/p/10693499.html。

11>.dfs.datanode.failed.volumes.tolerated

  DN多少块盘损坏后停⽌服务,默认为0,即⼀旦任何磁盘故障DN即关闭。 对盘较多的集群(例如每DN12块盘),磁盘故障是常态,通常可以将该值设置为1或2,避免频繁有DN下线。

12>.dfs.ha.automatic-failover.enabled

  是否启⽤HDFS的⾃动故障转移,默认为false。像CDH等发⾏版,如果打开 HDFS HA后,该值会被⾃动更新为true,因此通常不需要⾃⼰改动。

13>.dfs.support.append

  是否启⽤HDFS的追加写⼊⽀持,默认为true。⽼版本Hadoop上append功能有bug,因此该值曾经默认为false,但现在已经可以放⼼使⽤true,有⽼集群升级上来的需要调整。

14>.dfs.encrypt.data.transfer

HDFS数据在⽹络上传输时是否加密,默认为false。如果Hadoop集群运⾏ 在⾮安全⽹络上,可以考虑开启该参数,但会带来⼀些CPU开销。通常 Hadoop都会在私有⽹络内部署,不需要动该值。

15>.dfs.client.read.shortcircuit

  是否开启HDFS的短路本地读,默认为false。像CDH等发⾏版会默认将该参 数打开,并且如果在任何⼀种Hadoop上安装Impala,也需要打开该参数。 打开后,还需要设置dfs.domain.socket.path参数以指定⼀个Unix Socket⽂件的路径。

16>.dfs.datanode.handler.count

  数据节点的服务器线程数,默认为10。可适当增加这个数值来提升DataNode RPC服务的并发度。 在DataNode上设定,取决于系统的繁忙程度,设置太⼩会导致性能下降甚⾄报错。线程数的提⾼将增加DataNode的内存需求,因此,不宜过度调整这

17>.dfs.datanode.max.transfer.threads (dfs.datanode.max.xcievers)

  DataNode可以同时处理的数据传输连接数,即指定在DataNode内外传输数据使⽤的最⼤线程数。 官⽅将该参数的命名改为dfs.datanode.max.transfer.threads。默认值为4096。推荐值为8192。

18>.dfs.namenode.avoid.read.stale.datanode

指⽰是否避免读取“过时”的数据节点(DataNode),这些数据节点(DataNode)的⼼跳消息在指定的时间间隔内未被名称节点(NameNode)接收。过时的数据节点(DataNode)将移动到返回供读取的节点列表的末尾。有关写⼊的类似设置,请

19>.dfs.namenode.avoid.write.stale.datanode

  指⽰超过失效 DataNode 时间间隔 NameNode 未收到检测信号信息时是否避免写⼊失效 DataNode。写⼊应避免使⽤失效 DataNode,除⾮多个已配置⽐率 (dfs.namenode.write.stale.datanode.ratio) 的 DataNode 标记为失效。有关读取的类似设

20>.dfs.datanode.du.reserved

  当DataNode向NameNode汇报可⽤的硬盘⼤⼩的时候,它会把所有dfs.data.dir所列出的可⽤的硬盘⼤⼩总和发给NameNode。由于mapred.local.dir经常会跟DataNode共享可⽤的硬盘资源,因此我们需要为Mapreduce任务保留⼀些硬盘资源。dfs

21>.其他配置

  有⼀些操作系统或Linux⽂件系统层⾯的配置,本⾝不属于HDFS,但会对 HDFS的性能或可⽤性有影响,我们也需要了解:https://www.cnblogs.com/yinzhengjie/p/10367447.html

三.HDFS⽇常维护1>.容量管理

  理解HDFS的数据都是以普通⽂件格式写到DN的本地磁盘。HDFS的已使⽤容量有多种查看⽅式,⽐如NameNode页⾯(默认端⼝50070的)、hdfs dfs命令、以及集群管理器页⾯(如Cloudera CM)。

  HDFS总使⽤容量在80%以下是安全的,超过就需要⼈⼯⼲预。另外也要理解,HDFS不可能做到每个DN的每块盘都以相同的百分⽐写⼊数据,很可能出现总容量使⽤80%,但个别盘已经超90%甚⾄写满的情况,这时候就需要借助balancer脚本(

  容量管理还涉及到⾮技术性⼯作。如企业的数据总量和增量如何? 如何设置清理策略?是否需要对冷热数据采取不同的管理策略(如存储介质、副本数)?如何制定扩容、灾备⽅案?等等。这些⼯作⽆法通过培训传授⽅案,需要结合企业实际进

2>.进程管理

  HDFS进程管理中,DN的进程⽐较次要,死掉只需处理完问题再拉起即可。

  NN进程的可⽤性决定了整个HDFS的可⽤性。⽬前已有完善的NameNode HA⽅案,如果是 社区版集群,可参考(QJM⽅案): http://hadoop.apache.org/docs/r2.6.0/hadoop-project-dist/hadoop-hdfs/HDFSHighAvailabilityWithQJM.html  另外,为了保证NN进程的稳定,还需要考虑分配的JVM内存。我们介绍过⼀般100w个块对应300MB堆内存,按此计算出⼀个值后,再乘以2就够⽤了。

3>.故障管理

HDFS最常见的是硬盘故障,停机更换即可,注意同时停机个数<副本数即可,服务起来后做⼀下fsck。

NN的故障⽐较棘⼿。有了Hadoop2.x后的NameNode HA机制后,单点故障不再可怕,但仍会被内存相关问题困扰。最常出现的情况就是出现长时间的full GC,使得NN⽆法响应其他进程的RPC请求,从⽽造成严重问题。 推荐使⽤Java8以上版本的

4>.配置管理

  HDFS主要配置的说明已介绍过,其余配置可查询官⽅⽂档(以2.6.0为 例): http://hadoop.apache.org/docs/r2.6.0/hadoop-project-dist/hadoop-hdfs/hdfs-default.xml.

  需要注意的是⼤部分配置需要重启HDFS服务⽣效,⼩部分需要重启单个DN⽣效。

5>. 对HDFS⽇常维护中常⽤的命令总结

  HDFS⼀般命令,在⽇常维护中⾼频使⽤的:

    列出⽂件 ⽂件(及⽬录)的复制、追加、删除、读取

    ⽂件(及⽬录)权限和归属的修改     ⽂件(及⽬录)⼤⼩统计

  HDFS管理命令,在⽇常维护中⾼频使⽤的:    hdfs fsck     hdfs balancer

    namenode系列命令(例如启⽤HA等)

    dfsadmin系列命令(进⼊退出安全模式、升级HDFS等)

四.课后作业

在你的测试集群(最好有多台虚拟机搭⼀个全分布集群),测试HDFS接近写满⽂件时的状态变化 实验配置NameNode HA

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- huatuo0.cn 版权所有 湘ICP备2023017654号-2

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务