• 一次hadoop集群机器加内存的运维过程


    由于前期的集群规划问题,导致当前Hadoop集群中的硬件并没有完全利用起来。当前机器的内存CPU比例为2G:1core,但一般的MapReduce任务(数据量处理比较大,逻辑较复杂)的MR两端都需要将近4G的内存,于是原有的瓶颈就在于内存不够大,周末就和运维部门一起执行当前集群的机器加内存操作(我在这边主要是打酱油+学习,运维方面经验欠缺)。
     
    此次加内存是针对当前所有的DataNode节点,与NameNode无关,在操作之前需要整理所有的DataNode节点。 
     
    DataNode节点加内存不能影响当前线上任务的正常执行,因此需要串行地执行加内存操作(本意是这样,但是还是影响了大部分的任务运行,只能保证HDFS上的文件能够在此期间被访问到)。
     
    针对每个节点操作的具体步骤为:
     
    1. 停止DataNode节点上的DataNode和NodeManager服务;
    2. 将节点停机;
    3. 通知机房人员加内存条,系统需要预留8G;
    4. 机房人员添加内存成功后,将通知我们启动DataNode节点;
    5. 重启完成后,检查服务器内存是否添加成功(free命令),并确认硬盘挂载信息是否正常(df -u, 如果没有正确挂载上,手动执行/etc/rc.local中的mount命令);
    6. 检查hadoop各个分目录的权限以及文件夹是否正确,一切正常之后,修改hadoop内存配置文件(yarn-site.xml中的yarn.nodemanager.resource.memory-mb参数)。
    7. 启动相关的hadoop服务: nodemanager和DataNode服务;
     
    在重置完成后,检查一下防火墙,以避免某些服务无法访问。 
     
    当然前面都是一切操作顺利时的状况,在这些操作完成之前,我们需要考虑最坏的情况,如果安装内存条失败了怎么办?需要进行回滚操作,重启机器,如果不能重启,可能需要重装系统,DataNode中的数据可能会丢失。如果其中有2台机器发生这种情况,那么立即停止后续的升级操作(HDFS默认的replication为3)。
     
    如果没有在预计的时间内恢复集群,需要通知所有相关人员原因以及折中的方案,并尽快执行恢复操作。
     
    在换内存停机器的时候,不能进行跑MR任务,因为可能会发生block读取失败的信息:

    Error: org.apache.hadoop.hdfs.BlockMissingException: 
    Could not obtain block: BP-714842383-192.168.7.11-1393991369860:blk_1098537659_1099556437863 file=xxx 
    at org.apache.hadoop.hdfs.DFSInputStream.chooseDataNode(DFSInputStream.java:838) 
    at org.apache.hadoop.hdfs.DFSInputStream.blockSeekTo(DFSInputStream.java:526) 
    at org.apache.hadoop.hdfs.DFSInputStream.readWithStrategy(DFSInputStream.java:749) 
    at org.apache.hadoop.hdfs.DFSInputStream.read(DFSInputStream.java:793) 
    at org.apache.hadoop.hdfs.DFSInputStream.read(DFSInputStream.java:601) 
    at java.io.DataInputStream.readInt(DataInputStream.java:387) 
    at org.apache.hadoop.mapred.MapTask$TrackedRecordReader.moveToNext(MapTask.java:197) 
    at org.apache.hadoop.mapred.MapTask$TrackedRecordReader.next(MapTask.java:183) 
    at org.apache.hadoop.mapred.MapRunner.run(MapRunner.java:52) at org.apache.hadoop.mapred.MapTask.runOldMapper(MapTask.java:429) 
    at org.apache.hadoop.mapred.MapTask.run(MapTask.java:341) 
    at org.apache.hadoop.mapred.YarnChild$2.run(YarnChild.java:162) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at javax.security.auth.Subject.doAs(Subject.java:415) 
    at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1491) 
    at org.apache.hadoop.mapred.YarnChild.main(YarnChild.java:157)
      
    这次还好是在周末进行操作的,影响稍微小一点,但是线上跑的任务基本都失败了,hadoop的失败任务节点判断估计也都失败了,因为所有的DataNode都进行了一次升级。总结一下,如果是工作日做这项操作,可以将整个流程拉的稍微长一点,每天加一台机器的内存,这样集群少一台机器对线上任务的影响降低地太小,任务不会失败过多。
     
  • 相关阅读:
    css3360度旋转动画
    PAT 1084 外观数列(20)(代码+思路+推荐测试用例)
    PAT 1083 是否存在相等的差(20)(代码+思路)
    PAT 1082 射击比赛(20)(代码+思路)
    PAT 1079 延迟的回文数(代码+思路)
    PAT 1078 字符串压缩与解压(20)(代码+思路)
    PAT 1077 互评成绩计算(20)(代码+思路)
    PAT 1073 多选题常见计分法(20)(代码+思路)
    PAT 1072 开学寄语(20)(代码+思路)
    PAT 1069 微博转发抽奖(20)(代码+思路+测试点4)
  • 原文地址:https://www.cnblogs.com/mmaa/p/5789902.html
Copyright © 2020-2023  润新知