加入收藏 | 设为首页 | 会员中心 | 我要投稿 PHP编程网 - 湛江站长网 (https://www.0759zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 建站 > 正文

大规模集群故障处理,能抗住这3个灵魂拷问算你赢

发布时间:2019-10-12 23:22:32 所属栏目:建站 来源:小火牛
导读:副标题#e# 我相信每一个集群管理员,在长期管理多个不同体量及应用场景的集群后,都会多少产生情绪。其实这在我看来,是一个很微妙的事,即大家也已经开始人性化的看待每一个集群了。 既然是人性化的管理集群,我总是会思考几个方向的问题: 集群的特别之处

某些节点CPU负载很高影响了job任务的运行,发现有些节点的负载从9:30到现在一直很高,导致job任务执行了大概7个小时。

大规模集群故障处理,能抗住这3个灵魂拷问算你赢
大规模集群故障处理,能抗住这3个灵魂拷问算你赢

解决办法:

找到耗时task执行的节点,确实发现负载很高,并找到了此任务对应的进程。

大规模集群故障处理,能抗住这3个灵魂拷问算你赢

查看此进程的堆栈信息,发现Full GC次数很多,时长很长大概6个小时,频繁的Full GC会使CPU使用率过高。

大规模集群故障处理,能抗住这3个灵魂拷问算你赢

查看job进程详情发现,java heap内存只有820M,task处理的记录数为7400多万,造成堆内存不足频繁出发Full GC。

大规模集群故障处理,能抗住这3个灵魂拷问算你赢

推荐下次执行任务时设置如下参数大小:

  1. hive> set mapreduce.map.memory.mb=4096; 
  1. hive> set mapreduce.map.java.opts=-Xmx3686m; 

7、NameNode切换后部分Hive表无法查询。

小集群NameNode发生切换,并出现Hive某库下的表和其有关联的表无法使用的情况报错如下:

大规模集群故障处理,能抗住这3个灵魂拷问算你赢

截图报错,表明当前NameNode节点为stanby节点。经过排查发现,Hive的Metadata中有些partition列的属性还保留之前配置的NameNode location。

解决办法:

  • 备份Hive所在的MySQL元数据库 # mysqldump -uRoot -pPassword hive > hivedump.sql;
  • 进入Hive所在的MySQL数据库执行,修改Hive库下SDS表下的location信息,涉及条数9739行。把指定IP的location替换成nameservice ;

UPDATE SDS SET LOCATION = REPLACE(LOCATION, 'hdfs://ip:8020', 'hdfs://nameservice1') where LOCATION like 'hdfs://ip%';

  • 切换NameNode验证所影响Hive表是否可用;
  • 业务全方面验证 ;
  • 变更影响范围:本次变更可以在线进行实施,避开业务繁忙段,对业务无影响;
  • 回退方案:从备份的mysqldump文件中恢复mysql hive元数据库 mysql -uUsername -pPassword hive < hivedump.sq。

8、Spark任务运行缓慢,且经常执行报错。

(编辑:PHP编程网 - 湛江站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!