[大数据运维]第28讲:Hadoop平台常见故障汇总以及操作系统性能调优

[⼤数据运维]第28讲:Hadoop平台常见故障汇总以及操作系统性能调优
人脸识别怎么建模
第28讲:Hadoop 平台常见故障汇总以及操作系统性能调优
⾼俊峰(南⾮蚂蚁)
Hadoop ⽇常运维问题及其解决⽅法
1.如何下线⼀个 datanode 节点?
当⼀个 datanode 节点所在的服务器故障或者将要退役时,你需要在 Hadoop 中下线这个节点,下线⼀个 datanode 节点的过程如下。
(1)修改 l ⽂件
如下选项,到 namenode 节点配置⽂件 /etc/hadoop/l:
<property>
<name>lude</name>
<value>/etc/hadoop/conf/hosts-exclude</value>
</property>
(2)修改 hosts-exclude ⽂件
执⾏如下操作,在 hosts-exclude 中添加需要下线的 datanode 主机名:
vi /etc/hadoop/conf/hosts-exclude
172.16.213.188
(3)刷新配置
在 namenode 上以 hadoop ⽤户执⾏下⾯命令,刷新 hadoop 配置:大型风力发电机组
[hadoop@namenodemaster ~]$hdfs dfsadmin -refreshNodes
(4)检查是否完成下线
执⾏如下命令,检查下线是否完成:
[hadoop@namenodemaster ~]$hdfs dfsadmin -report
光纤器件
也可以通过 NameNode 的 50070 端⼝访问 Web 界⾯,查看 HDFS 状态,需要重点关注退役的节点数,以及复制的块数和进度。
2.某个 datanode 节点磁盘坏掉怎么办?
如果某个 datanode 节点的磁盘出现故障,那么该节点将不能进⾏写⼊操作,并导致 datanode 进程退出,针对这个问题,你可以如下解决:
⾸先,在故障节点上查看 /etc/hadoop/l ⽂件中对应的 dfs.datanode.data.dir 参数设置,去掉故障磁盘对应的⽬录挂载点;
然后,在故障节点上查看 /etc/hadoop/l ⽂件中对应的 demanager.local-dirs 参数设置,去掉故障磁盘对应的⽬录挂载点;
最后,重启该节点的 DataNode 服务和 NodeManager 服务即可。
3.Hadoop 进⼊安全模式怎么办?
Hadoop 刚启动时,由于各个服务的验证和启动还未完成,此时 Hadoop 会进⼊安全模式,这时⽂件系统的内容不允许修改,也不允许删除,这种状态会⼀直持续,直到安全模式结束为⽌。
⽽这个安全模式主要是为了系统启动时,能够对各个 DataNode 数据块的有效性进⾏检查,并根据策略对部分数据块进⾏必要的复制或者删除。
如果 Hadoop 的启动和验证都正常,那么只需等待⼀会⼉,Hadoop 便将⾃动结束安全模式。
当然,执⾏如下命令,也可以⼿动结束安全模式:
[hadoop@namenodemaster  conf]$ hdfs dfsadmin -safemode leave
4.NodeManager 出现 Java heap space 错误怎么办?
这种错误,⼀般是 JVM 内存不够导致的,所以你需要修改所有 DataNode 和 NodeManager 的 JVM 内存⼤⼩,⾄于设置具体多⼤的内存,需要根据服务器的实际环境⽽定。
如果设置的 JVM 值已经很⼤,但还是出现该问题,则需要查看 NodeManager 运⾏⽇志,具体是什么原因导致的,需要具体问题具体分
析,当然,最直接的⽅法就是重启此节点的 NodeManager 服务。
5.DataNode 节点出现 Too many fetch-failures 错误的原因是什么?
出现这个问题的原因主要是,DataNode 节点间的连通性不够通畅,或者⽹络环境不太稳定。
你可以从如下⽅⾯查原因,便基本能判断问题所在:
检查 DataNode 节点和 NameNode 节点之间的⽹络延时;
通过 Nslookup 命令测试 DNS 解析主机名情况;
检查 /etc/hosts 和对应的主机名信息;
检查 NameNode 到 DataNode 节点的 SSH 单向信任情况。
6.出现 No route to host 怎么办?
这个问题⼀般会在 DataNode 连接不上 NameNode,从⽽导致 DataNode ⽆法启动的情况下发⽣,问题发⽣时可在 DataNode ⽇志中看到如下类似信息:
ERROR org.apache.hadoop.hdfs.server.datanode.DataNode: java.io.IOException: Call to ... failed on local exception:
java.NoRouteToHostException: No route to host
这个问题,⼀般是本机防⽕墙、本机⽹络,或系统的 selinux 导致的,所以你可以关闭本机防⽕墙或者 selinux,然后检查本机与NameNode 之间的连通性,从⽽你便能判断出问题症结所在。
7.如何新增⼀个 DataNode 节点到 Hadoop 集?
当集资源不够时,需要新增⼏台机器加⼊集,这是 Hadoop 运维最常见的处理⽅式之⼀。那么如何将新增的服务器加⼊ Hadoop 集呢,主要有以下步骤。
(1)新节点部署 Hadoop 环境
新增节点在系统安装完成后,要进⾏⼀系列的操作,⽐如系统基本优化设置、Hadoop 环境的部署和安装、JDK 的安装等,这些基础⼯作都需要你事先完成。
(2)修改 l ⽂件
在 NameNode 查看 /etc/hadoop/l ⽂件,到如下内容:
<property>
<name>dfs.hosts</name>
<value>/etc/hadoop/conf/hosts</value>
</property>
(3)修改 hosts ⽂件
在 NameNode 修改 /etc/hadoop/conf/hosts ⽂件,添加新增的节点主机名,操作如下:
vi /etc/hadoop/conf/hosts
slave0191.iivey.cloud
最后,将配置同步到所有 DataNode 节点的机器上。h5n6
(4)使配置⽣效
新增节点后,要让 NameNode 识别新的节点,则需要在 NameNode 上刷新配置,执⾏如下操作:
[hadoop@namenodemaster ~]$hdfs dfsadmin -refreshNodes
(5)在新节点启动 dn 服务
在 NameNode 完成配置后,还需在新增节点上启动 DataNode 服务,执⾏如下操作:
[hadoop@slave0191.iivey.cloud ~]$ hdfs --daemon start datanode
这样,⼀个新的节点就增加到集了,Hadoop 的这种机制,可以在不影响现有集运⾏的状态下,新增或者删除任意节点,⾮常⽅便。8.NameNode 服务器故障了怎么办?
在 HDFS 集中,NameNode 主机上存储了所有元数据信息,⼀旦这些信息丢失,那么 HDFS 上⾯的所有数据都将⽆法使⽤。
所以 NameNode 服务器发⽣故障⽆法启动时,有两种⽅法可以解决:
NameNode 做了⾼可⽤服务的情况下,主 NameNode 故障后,NameNode 服务会⾃动切换到备⽤的 NameNode 上,这个过程是⾃动的,⽆须⼿⼯介⼊;
Namenode 没做⾼可⽤服务的情况下,可以借助 SecondaryNameNode 服务,在 SecondaryNameNode 主机中到元数据信息,然后直接在此节点启动 Namenode 服务即可;由于 SecondaryNameNode 实现的是 Namenode 冷备份,所以这种⽅式可能⽆法回所有数据,依旧会有部分数据丢失。
由此可知,对 NameNode 进⾏容灾备份⾄关重要,在⽣产环境下,我建议通过 standby NameNode 实现 NameNode 的⾼可⽤热备份。9.为什么集节点被 Yarn 标记为不健康?
Yarn 集在长期运⾏任务后,某些节点会突然被标记为不健康节点,并从 Yarn 集中剔除出去,之后便不会再有任务提交⾄此节点。
那么什么情况下,节点会被标记不健康呢?
在 Yarn 配置中,有个参数 demanager.local-dirs,⽤来存储 NodeManager 应⽤程序运⾏的中间结果;还有另⼀个参数
Yarn 会定期进⾏磁盘状态检查,如果这两个参数指定⽬录的可⽤空间,低于 Yarn 指定的阈值,NodeManager 将不会在这些节点上启动任何新容器。
本地⽬录健康检测主要涉及以下两个参数:
此参数默认值为 0.25,表⽰正常⽬录在总⽬录中的数⽬占⽐,低于 0.25 则判定此节点处于不正常状态。⽐如,指定了⼗⼆个⽬录(磁盘),那么它们当中,⾄少有 3 个⽬录处于正常状态, NodeManager 才会在该节点上启动新容器。
此参数默认值为 90(也可以将此参数设置为 0 到 100 之间的任意数)。它表⽰ demanager.local-dirs 配置项下的路径或者
解决⽅法很简单:清理对应⽬录下的临时数据,使磁盘占⽤率降⾄ 90% 以下;修改 90 这⼀默认参数值,重设磁盘使⽤率。
我有个经验可以与你分享:最好别将 Yarn 的⽇志⽬录或中间结果⽬录,与 HDFS 的数据存储⽬录放⾄同⼀个磁盘,这样做能减少很多不必要的⿇烦。
10.datanode 节点磁盘存储不均衡怎么解决?
在 HDFS 集中,磁盘损坏是家常便饭,磁盘故障后,我们⼀般的策略是更换新的硬盘,新硬盘更换后,只有新数据会写⼊这个硬盘,⽽之前的⽼数据不会⾃动将数据平衡过来。
如此下去,更换的硬盘越多,节点之间以及每个节点的各个磁盘之间的数据将越来越不平衡;此外,集中添加新的数据节点,也会导致HDFS 出现数据不平衡。
碳氟化钾
那么如何让 HDFS 集重新达到⼀个平衡的状态呢?可以使⽤ Hadoop 提供的 Balancer 程序,执⾏命令如下:
[hadoop@namenodemaster sbin]$ $HADOOP_HOME/bin/start-balancer.sh  -t  5%
或者:
[hadoop@namenodemaster sbin]$ hdfs balancer -threshold 5
这个命令中 -t 参数后⾯跟的是,HDFS 达到平衡状态的磁盘使⽤率偏差值,如果节点与节点之间磁盘使⽤率偏差⼩于 5%,那么我们就认为HDFS 集已达到了平衡状态。
11.Yarn 集中发现任务分配不均衡怎么办?
有时候,你通过 Yarn 集运⾏数据分析任务时,会发现这样⼀个问题:各节点的负载会不均衡(也就是任务数⽬不同),有的节点有很多任务在执⾏忙碌,⽽有的节点没有任务执⾏,那么如何平衡各节点运⾏的任务数⽬呢?
这种问题的发⽣与你采⽤的 Yarn 资源调度策略息息相关。
如果是上述情况,其原因应该是采⽤了默认的容量调度策略(Capacity Scheduler),容量调度会尽可能将任务分配到有资源的节点,⽽不考虑任务均衡因素。所以这种情况下,我建议将其设置为公平调度策略,此调度模式可以将任务均匀分配到集的每个节点。
其实,从 Hadoop 集利⽤率⾓度看,该问题发⽣的概率⽐较低。因为⼀般情况下,任务会持续提交到集,集会时刻处于忙碌状态,不会出现节点⼀直空闲的情况,所以任务分配不均的情况也就难以发⽣。
12.HDFS 下有 missing blocks,应该如何解决?
HDFS 集出现 missing blocks 错误,是⼀个经常发⽣的问题,并且⼀旦发⽣往往意味着有元数据丢失或者损坏,想要将其恢复,难度很⼤
甚⾄⽆法恢复。
所以我们的解决⽅法往往不是恢复数据,⽽是删除相关⽂件,具体如何解决如下所⽰,执⾏下列命令:
[hadoop@namenodemaster sbin]$ hdfs fsck /blocks-path/
此命令会检查 HDFS 下的所有块状态,并向你列出有哪些⽂件发⽣了块丢失或损坏。
然后执⾏如下命令,删除这些⽂件即可:
[hadoop@namenodemaster sbin]$ hdfs fsck -fs hdfs://bigdata/logs/mv.log  -delete
上⾯删除了 HDFS 上 mv.log 这个⽂件,因为此⽂件元数据丢失,⽆法恢复,所以只能删除。
Hadoop 调优之操作系统调优
1.调整操作系统打开⽂件描述符的上限
Hadoop 的任务分析经常需要读写⼤量⽂件,因此需要增⼤打开⽂件描述符的上限,可通过 ulimit -n 查看⽬前系统的打开⽂件描述符的上限值。CentOS 7 系统默认值是 1024,这个值太⼩了,建议修改为 655360 或者更⼤。
通过命令“ulimit -a”可以看到所有系统资源参数,这⾥⾯需要重点设置的是“open files”和“max user processes”,其他可以酌情设置。
要永久设置资源参数,主要通过下列⽂件实现:
/etc/f
/etc/security/limits.f(centos6.x)
/etc/security/limits.f(centos7.x)
将下⾯内容添加到 /etc/f 中,然后退出 shell,重新登录即可⽣效。
*        soft    nproc          204800
*        hard    nproc          204800
*        soft    nofile          655360
*        hard    nofile          655360
*        soft    memlock        unlimited
*        hard    memlock        unlimited
需要注意的是: CentOS 6.x 版本中,有个 f ⽂件;CentOS 7.x 版本中,有个 f ⽂件,由于⾥⾯已经默认配置了最⼤⽤户进程数,对这两个的设置也就没必要,所以直接删除这两个⽂件即可。
2.修改 somaxconn 参数
此内核参数对应的具体⽂件路径为 /proc/sys/net/core/somaxconn,它⽤来设置 socket 监听(listen)的 backlog 上限。
什么是 backlog 呢?就是 Socket 的监听队列,当⼀个请求(Request)未被处理或建⽴时,便会进⼊ backlog。⽽ socket server 可以⼀次性处理 backlog 中的所有请求,处理后的请求不再位于监听队列中。
如果 server 处理请求较慢,以⾄于监听队列被填满时,那么新来的请求会被拒绝,所以必须增⼤这个值,此参数默认值为 128。作为⽹络参数的基础优化,建议修改为如下值:
echo 4096 >/proc/sys/net/core/somaxconn
3.调整操作系统使⽤ swap 的⽐例
swap 原本是作为物理内存的扩展,但如今内存⼀般都很充⾜,swap 也就很少会应⽤;再加上数据交换⾄ swap,导致操作超时,从⽽影响Hadoop 的读写以及数据分析性能。所以以上两点,导致如今使⽤ swap 的场景越来越少。
我们可以通过系统内核参数 /proc/sys/vm/swappiness 来调整使⽤ swap 的⽐例。swappiness=0 的时候表⽰最⼤限度使⽤物理内存,然后才是 swap 空间;swappiness=100 的时候表⽰积极地使⽤ swap 分区,并且把内存上的数据及时地搬运到 swap 空间⾥。
Linux 基本默认设置为 60,表⽰你的物理内存使⽤到 100-60=40% 的时候,swap 交换分区便开始应⽤起来。对于内存需求较⾼的服务器(⽐如 Hadoop、Redis、HBase 机器),Linux 值需要设置得⾜够⼩(0~10 之间),这样才能最⼤限度使⽤物理内存。
4.禁⽤ THP(Transparent Huge Pages)功能
THP 的本意是为提升内存的性能,但是在 Hadoop 环境中发现,此功能会将 CPU 占⽤率增⼤,进⽽影响 Hadoop 性能,因此建议将其关闭。
⾸先检查 THP 的启⽤状态:
[root@localhost ~]# cat /sys/kernel/mm/transparent_hugepage/defrag
[always] madvise never
[root@localhost ~]# cat /sys/kernel/mm/transparent_hugepage/enabled
[always] madvise never
这⾥显⽰ always,表⽰ THP ⽬前是启⽤状态。要禁⽤ THP,可打开 /etc/rc.d/rc.local ⽂件,然后添加如下内容:
if test -f /sys/kernel/mm/transparent_hugepage/enabled; then
echo never > /sys/kernel/mm/transparent_hugepage/enabled
fi
if test -f /sys/kernel/mm/transparent_hugepage/defrag; then
echo never > /sys/kernel/mm/transparent_hugepage/defrag
fi
然后保存退出。
高压直流稳压电源
最后,赋予 rc.local ⽂件执⾏权限,执⾏如下命令:
[root@localhost ~]# chmod +x /etc/rc.d/rc.local
[root@localhost ~]# source /etc/rc.local
此时,THP 功能便已经被禁⽤了。
总结
本课时,我主要介绍了 Hadoop ⼤数据运维中,常见的运维故障以及解决问题的⽅法和思路;以及在 Hadoop 平台下,如何对 Linux 操作系统进⾏深度配置和优化。由于 Hadoop 的⾼效稳定运⾏,离不开 Linux 系统的性能优化,所以希望你课下能多多练习,提升⾃⼰的技能⽔平。

本文发布于:2024-09-22 07:05:43,感谢您对本站的认可!

本文链接:https://www.17tex.com/tex/3/266198.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:节点   磁盘   数据
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议