hadoop日常运维与升级总结
日常运维 升级 问题处理方法
日常运维
进程管理
由于配置文件的更改,需要重启生效,
或者是进程自己因某种致命原因终止,
或者发现进程工作出现异常等情况下,需要进行手动进程的关闭或启动,
或者是增删节点过程中的需要,
进程的关闭与启动,使用
hadoop-daemon.sh start|stop datanode/namenode/journalnode/zkfc
yarn-daemon.sh start|stop nodemanager/resourcemanager
检查进程是否完成关闭:
jps 或者 ps –ef | grep datanode|namenode|journalnode|zkfc|nodemanager|resourcemanager
注意:要清楚自己关闭的每一个进程对正在运行的集群会产生什么样的影响
集群健康检查
hdfs fsck / 进行文件系统健康检查,是否有块丢失,如何处理?
hdfs fsck 也可以用来查看你关心的某些文件的块的分布情况。
Hdfs fsck /path –files –blocks –locations 可以显示详细的文件,block位置等信息。
Datanodes 是否有死的节点,有可能进程还在但是状态是不正常的。
ResourceManager的管理页面上观察是否有lost的nodemanager节点,查找原因,解决。
进程日志文件检查:检查其中频繁出现的异常,从warn级别的信息中往往能发现出现异常错误的原因,搜索查找原因,修改配置文件或做其他的调整。
新增节点
硬件安装
1)操作系统本身的安装,关闭防火墙,selinux
2)修改limits.conf sysctl.conf 保持一致
3)创建hadoop用户
4)生成ssh无密钥访问
Root: 直接拷贝其他系统的.ssh文件夹 整个集群使用一个
Hadoop:生成密钥 分发到某一固定节点,如namenode
最后从含有完整公钥的机器上把authorizedkeys 重新分发到各节点一份
5)修改主机名与集群保持一致,
sed –i ‘s/HOSTNAME=.*/HOSTNAME=dn1’ /etc/sysconfig/network
6)修改/etc/hosts
这个也可以在namenode上进行,配置好新增节点的ip信息,在ssh配好后,
可以直接分发到所有节点,不仅是新增节点。
7)同步文件
假设这个节点上只运行datanode,nm之类的
从已有节点同步jdk,hadoop到相同的目录(不用复制hadoop的日志文件,太大无用)
(rsync –v nn1:/app/cdh23502/ /app)
从已有节点复制 .bash_profile文件到新节点,并且source .bash_profile使之生效
测试 java –version 和 hadoop version 是否正常工作
8)测试本地库是否正常
Hadoop checknative
如果没有安装本地库压缩请安装相应程序
创建数据盘的根目录,并把此权限赋给hadoop用户
9)在nn1上修改etc/hadoop/slaves,在里面添加新增的节点hostname.
修改机架感知信息,一般是在一个文本文件里面,通过python加载,修改完成分发。
在新增节点上启动datanode,nodemanager等进程
10)通过 hdfs dfsadmin –report 或 在webui 上观察datanode是否向namenode注册成功。
必要的时候运行:hadoop dfsadmin -refreshNodes
平衡数据
Start-balancer.sh
Hdfs balancer –help
Hdfs balancer –threshold 5
Hdfs-site.xml
dfs.datanode.balance.bandwidthPerSec:1m
dfs.datanode.balance.max.concurrent.moves :5
要理解数据平衡的基本原理,根据threshold计算集群点节点存储是否平衡,然后迭代进行移动,至到达到相对平衡,然后进程自动退出。
删除节点
如果需要主动把所在节点的数据转移,则建议使用:
先在配置的excludes文件中添加要删除的节 点,然后执行下面命令
hadoop dfsadmin –refreshNodes
网上有资料表明,有同学使用这种方式进行数据的转移,在节点的磁盘被使用殆尽的情况下,平衡进程太慢,节点退役反而很快,退役后格式化磁盘,然后加回来,加快了数据的平衡处理。
处理磁盘问题
datanode 的配置可以在线更新了,http://blog.cloudera.com/blog/2015/05/new-in-cdh-5-4-how-swapping-of-hdfs-datanode-drives/
在大的hadoop生产集群中,每一台机器都会配置多块硬盘,而硬盘的损坏也是常态,如何让硬盘的损坏不影响正常的生产呢?
如果在hdfs-site.xml中把 dfs.datanode.failed.volumes.tolerated 设置为 大于0的数字,则datanode 允许配置的磁盘有配置数量的损坏。
否则,如果配置为0 ,若发生了磁盘的损坏,Datanode进程会shutdown.
如果我们不想datanode进程自动关闭,可以合理配置dfs.datanode.failed.volumes.tolerated .
然后从日志监控中发现有磁盘发生损坏的情况发生,我们可以修改hdfs-site.xml中dfs.datanode.data.dir 的配置,
去掉坏掉的盘,然后执行
hdfs dfsadmin –reconfig datanode dnxx:50020 start
hdfs dfsadmin –reconfig datanode dnxx:50020 status
之类的,让datanode在线更新配置
换上新盘后,再刷新一下配置即可。
这样不用关闭Datanode进程。如果是低版本的,可以直接把发生问题的磁盘路径从配置的dfs.data.dir从去掉,然后启动datanode进程,然后修好后再加回来,重启datanode进程。
也可以调整 容错的数量,dfs.datanode.failed.volumes.tolerated,思路是一样的,只是低版本的是需要重启动datanode进程。
处理长时间不能完成的任务
mapred job -fail-task
mapred job -kill-task
两者的不同,前者把任务失败掉,这个任务就不会再分配给这个节点运行,而kill的task则还可能会分给这个节点运行,而且fail-task的过多,这个节点会被加入黑名单。
升级
升级有风险,cdh之间小版本的升级可能不需要修改hdfs的元数据,只需要替换应用包即可。如果是大版本的升级,则需要升级hdfs文件的元数据。
今天主要说一下hadoop的升级,在生产中,我们一起升级套件,如hive和hbase等,这时候需要和开发人员多交流,我之前做开发有过经历,项目中写的hive语句与调用方式在一次hive的升级后变得不可用,需要花一段时间进行调整。
以下的链接记录了我做的升级实验,hadoop2.35.0.2升级到hadoop2.6cdh5.5 .
原因,我所在山东移动使用hadoop2.35.0.2 ,而且有新集群已经部署,hadoop2.6.
两台机器,nn1,nn2搭建的ha,同时又担任nn,dn,rm,nm,jn,zkfc,zk等职能。
以下是升级回滚再升级的记录。仅供参考,同时参考了cdh官网的说明,官网主要是使用CM的。
1 官网上下载hadoop2.6cdh5.5.tar包和hadoop的rpm包
rpm2cpio hadoop.rpm | cpio –div
可以从里面找到我们需要的native的文件 。
2 复制原cdh下的etc/下的所有文件到hadoop2.6下的etc/hadoop
3 进入安全模式,生成fsimage文件 ,并备份整个metadata 文件夹
hdfs dfsadmin -safemode enter
hdfs dfsadmin –saveNamespace
cd /hdp/dfs/name
tar -cvf nn_backup_data.tar .
4. 关停所有相关的进程
stop-all.sh
stop-hbase.sh
ps -aef | grep java
5 纷发新的文件到其他节点
6 修改.bash_profile(根据你自己的配置)把HADOOP_HOME 指向新的目录
并纷发到所有机器上,并加载这个文件 使其生效。
7 先启动jn 然后升级hdfs metadata
hadoop-daemons.sh start journalnode
hdfs namenode -upgrade
hadoop-daemons.sh start datanode
根据你的block的数量情况,但是一般会很快的。我这边遇到的情况下,一直会报:缓存管理器在扫描之类的日志,好像是bug.不影响升级。
8 回滚
升级后,namenode ,journalnode和datanode下面的相关version等文件有变动.回滚的操作如下:
先操作journalnode的:
可以直接进入journalnode配置目录下,把current的改成new,把previous的改成current.
或执行
hadoop-daemons.sh start journalnode -rollback(未尝试)
hdfs namenode –rollback
hadoop-daemons.sh start datanode –rollback
9升级后测试
pdsh -w nn1,nn2 "source /home/student/.bash_profile; zkServer.sh start"
在nn2上,hdfs namenode –bootstrapStandby
同步新生成的fsimage
start-dfs.sh
start-yarn.sh
hadoop jar /app/cdh26550/share/hadoop/mapreduce2/hadoop-mapreduce-examples-2.6.0-cdh5.5.0.jar wordcount pi 10 100
问题处理
问题归类
1. 个人操作:错误的判断所做的操作或误操作
2. 错误配置:35%的问题都是因为错误或不合理的配置引发的
一定要深入理解配置参数的含义,要根据自己集群的情况定制,不是放之四海而皆准的固定的答案。
操作系统级别的配置
Hadoop/hdfs/yarn本身的配置 (内存参数等)
3. 硬件错误(常见硬盘错误)
4. 资源耗尽(nodemanager 健康检查报告)
方法论
1. 查看出现问题进程日志文件($HADOOP_HOME/logs)
2. Dump相关进程,查看进程栈相关代码
Javacore 文件中也有当前栈的信息可供分析
3. 查看系统信息/var/log/messages 或 dmesg 查看是否有显示相关错误,如硬件错误或文件系统的错误
如果是map/reduce任务的错误,查看相关的输出stdout,syslog,syserr中可以找到相关根本的原因。(class not found …)
hadoop日常运维与升级总结的更多相关文章
- hadoop记录-hadoop集群日常运维命令
hadoop集群日常运维命令 #1.namenode hadoop namenode -format #格式化,慎用 su hdfs hadoop-daemon.sh start namenode h ...
- Docker Swarm 日常运维命令笔记
之前介绍了Docker管理工具-Swarm部署记录,这里简单总结下Docker Swarm的日常维护命令,以作为平时运维笔记. Swarm作为一个管理Docker集群的工具,首先需要将其部署起来,可以 ...
- FinTech领域实践:乐维监控助力西南某上市城商行IT运维转型升级!
FinTech领域实践:乐维监控助力西南某上市城商行IT运维转型升级! 项目背景 随着信息化的逐步深入,企业业务运营活动对IT的依赖程度越来越高,传统的局部.粗放.碎片化的IT运维管理模式已经无法满足 ...
- Hbase 日常运维
日常维护的命令 1,major_compact 'testtable',通常生产环境会关闭自动major_compact(配置文件中hbase.hregion.majorcompaction设 为0) ...
- linux日常运维工作
Linux的使用环境也日趋成熟,各种开源产品络绎不绝,大有百花齐放的盛景,那么当Linux落地企业,回归工作时,我们还要面对这Linux运维方面的诸多问题,今天我们特意组织一场有关Linux 在企业运 ...
- zookeeper 用法和日常运维
本文以ZooKeeper3.4.3版本的官方指南为基础:http://zookeeper.apache.org/doc/r3.4.3/zookeeperAdmin.html,补充一些作者运维实践中的要 ...
- Jenkins日常运维笔记-重启数据覆盖问题、迁移、基于java代码发版(maven构建)
之前在公司机房部署了一套jenkins环境,现需要迁移至IDC机房服务器上,迁移过程中记录了一些细节:1)jenkins默认的主目录放在当前用户家目录路径下的.jenkins目录中.如jenkins使 ...
- Windows系统日常运维
WINDOWS系统日常运维 http://www.docin.com/p-677263438.html
- MySQL 日常运维业务账号权限的控制
在MySQL数据库日常运维中,对业务子账号的权限的统一控制十分必要. 业务上基本分为读账号和写账号两种账号,所以可以整理为固定的存储过程,让数据库自动生成对应的库的账号,随机密码.以及统一的读权限,写 ...
随机推荐
- excel下划线转驼峰公式
最近为了省事,决定从excel将表结构生成jquery.datatable的json对象结构,其中要把下划线转驼峰,如下: =LEFT(C251,1)&MID(SUBSTITUTE(PROPE ...
- Hibernate(六)__对象的三种状态
瞬时(transient):数据库中没有数据与之对应,超过作用域会被JVM垃圾回收器回收,一般是new出来且与session没有关联的对象. 持久(persistent):数据库中有数据与之对应,当前 ...
- 优秀案例:12个精美的设计工作室 & 设计公司网站
如果你正在为自己的作品集网站设计寻找灵感,那么学习设计机构 & 设计公司的网站是如何制作的是一个良好的开端.在这篇稳重,我们已经聚集了一组设计机构的优秀作品集网站,你可以借鉴很多设计理念.当你 ...
- 更改SAP的字段翻译
TC:SE63在SAP用户选择屏幕中,用鼠标选定一个栏位后按F1键,可以看到SAP对其具体解释,通常这种解释文本分为两部分,一部分为标题,一部分为正文.比如: 有时,SAP的翻译让人感觉很别扭,对于 ...
- 将Win10变回Win7/WinXP界面
前往 Classic Shell 的网站(传送门:http://www.classicshell.net/)进行下载安装.第一次开启 时,程序会让你选择一款面板:第一个是 Windows 2000 的 ...
- 删除oracle表报ORA-24005错误
请先执行:alter session set events'10851 trace name context forever,level 1'; 然后再删除表.
- Android Studio 小提示,新建Activity
Android Studio是在google I/O大会上新发布的一个IDE,基于IntelliJ,Android开发除了Eclipse之外又多了一种选择. 在Android Studio中如何在当前 ...
- 操作系统开发系列—11.ELF格式 ●
ELF文件的结构如下图所示: ELF文件由4部分组成,分别是ELF头(ELF header).程序头表(Program header table).节(Sections)和节头表(Section he ...
- Android http 的使用
1.okHttp https://github.com/square/okhttp 2.okhttp-utils https://github.com/hongyangAndroid/ok ...
- MySQL 常见的sql命令
注意事项: 1.sql 使用单引号来环绕文本值(大部分数据库系统也接受双引号).如果是数值,请不要使用引号. 一.数据库 1.创建数据库 CREATE DATABASE lesson ; 创建一个名字 ...