由于前期的集群规划问题,导致当前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都进行了一次升级。总结一下,如果是工作日做这项操作,可以将整个流程拉的稍微长一点,每天加一台机器的内存,这样集群少一台机器对线上任务的影响降低地太小,任务不会失败过多。
 

一次hadoop集群机器加内存的运维过程的更多相关文章

  1. [hadoop] 集群启动和内存调优

    1.启动Hadoop集群 #首先查看下zoo.cfg里面配置的server.id和集群主机的id是否一致 #如果不一致会造成yarn控制不了从节点的启动 cat /home/hadoop/zookee ...

  2. Hadoop集群管理之内存管理

    1.内存 Hadoop为各个守护进程(namenode,secondarynamenode,jobtracker,datanode,tasktracker)统一分配的内存在hadoop-env.sh中 ...

  3. hadoop集群中zkfc的作用和工作过程

    一. 简单了解NameNode的ZKFC机制 NameNode的HA可以个人认为简单分为共享editLog机制和ZKFC对NameNode状态的控制 一般导致NameNode切换的原因 ZKFC的作用 ...

  4. ElasticSearch 集群的规划部署与运维

    公号:码农充电站pro 主页:https://codeshellme.github.io 1,常见的集群部署方式 ES 有以下不同类型的节点: Master(eligible)节点:只有 Master ...

  5. Kubernetes实战 高可用集群搭建,配置,运维与应用

    1-1 K8S导学 1-2 搭建K8S集群步骤和要点介绍 1-3 搭建三节点Ubuntu环境 1-4 安装容器引擎 1-5 下载Kubeadm.node组件和命令行工具 1-6 向集群中加入worke ...

  6. 零基础学习云计算及大数据DBA集群架构师【企业级运维技术及实践项目2015年1月29日周五】

    LNMP/LEMP项目搭建 { 项目框架 # Linux_____WEB_____PHP_____DB # rhel7_____apache__-(libphp5.so)-__php__-(php-m ...

  7. Hadoop集群(第2期)_机器信息分布表

    1.分布式环境搭建 采用4台安装Linux环境的机器来构建一个小规模的分布式集群. 图1 集群的架构 其中有一台机器是Master节点,即名称节点,另外三台是Slaver节点,即数据节点.这四台机器彼 ...

  8. Hadoop集群(第3期)机器信息分布表

    1.分布式环境搭建 采用4台安装Linux环境的机器来构建一个小规模的分布式集群. 图1 集群的架构 其中有一台机器是Master节点,即名称节点,另外三台是Slaver节点,即数据节点.这四台机器彼 ...

  9. [转]大数据hadoop集群硬件选择

      问题导读 1.哪些情况会遇到io受限制? 2.哪些情况会遇到cpu受限制? 3.如何选择机器配置类型? 4.为数据节点/任务追踪器提供的推荐哪些规格? 随着Apache Hadoop的起步,云客户 ...

随机推荐

  1. iOS笔记杂记

    Google Mobile Ads SDK更新至7.2.1不能编译,添加依赖库QuartzCore.framework后正常编译 imageName会把image缓存到手机内存里,不适合大量图片浏览会 ...

  2. Week14《Java程序设计》第14次作业总结

    Week14<Java程序设计>第14次作业总结 1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结与数据库相关内容. 2. 使用数据库技术改造你的系统 2.1 简述如何 ...

  3. 使用jQuery操作DOM(1)

    1.常见方法 css(“属性”,”属性值”); //设置单个样式 css({属性1:属性值1,属性2:属性值3...}); //设置多个样式 addClass(“样式名”); //追加单个样式 add ...

  4. C# http post上传文件

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.I ...

  5. IOS开发 Application Kit框架的线程安全

    以下部分介绍了Application Kit框架的线程安全. 非线程安全类 以下这些类和函数通常是非线程安全的.大部分情况下,你可以在任何线程使用这些类,只要你在同一时间只有一个线程使用它们.查看这些 ...

  6. Web框架Django

    Django是一个开放源代码的Web应用框架,由Python写成. 1. Ubuntu Django安装: pip install django 2. django-admin.py创建一个项目 dj ...

  7. socket创建UDP服务端和客户端

    UDP服务端代码示例: from socket import * #1.创建数据报套接字 sockfd = socket(AF_INET, SOCK_DGRAM) #2.绑定服务端地 sockfd.b ...

  8. sudo 运行 npm或node时,出现找不到命令

    sudo 运行 npm或node时,出现找不到命令的情况,运行下面这些命令, sudo ln -s /usr/local/bin/node /usr/bin/node sudo ln -s /usr/ ...

  9. HTML5移动Web开发指南-学习笔记(一)

    一,浏览器引擎    浏览器的内核引擎,基本上是四分天下: Trident: IE 以Trident 作为内核引擎; Gecko: Firefox 是基于 Gecko 开发; WebKit: Safa ...

  10. Python中实现远程调用(RPC、RMI)简单例子

    说白了,远程调用就是将对象名.函数名.参数等传递给远程服务器,服务器将处理结果返回给客户端   远程调用使得调用远程服务器的对象.方法的方式就和调用本地对象.方法的方式差不多,因为我们通过网络编程把这 ...