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 …)

时间: 2024-10-27 06:00:31

hadoop日常运维与升级总结的相关文章

Hadoop日常运维问题汇总

一:namenode出现missing blocks 日常巡检CDH集群和HDP集群发现有些namenode下有很多missing blocks ,hadoop数据存储单位为块.一块64M,这些Missing大多因为元数据丢失而毁坏,很难恢复.就行硬盘故障一样,需要fsck并且delete. CDH集群 :Cloudera manager的dashboard----HDFS----NameNode  Web UI 如图: ----- HDP集群:Ambari Server 的dashboard-

Hbase 日常运维

1.1监控Hbase运行状况 1.1.1操作系统 1.1.1.1IO a.群集网络IO,磁盘IO,HDFS IO IO越大说明文件读写操作越多.当IO突然增加时,有可能:1.compact队列较大,集群正在进行大量压缩操作. 2.正在执行mapreduce作业 可以通过CDH前台查看整个集群综合的数据或进入指定机器的前台查看单台机器的数据: b.Io wait 磁盘IO对集群的影响比较大,如果io wait时间过长需检查系统或磁盘是否有异常.通常IO增加时io wait也会增加,现在FMS的机器

日常运维工作中如何确保你的linux操作系统安全

在现在这个世道中,Linux操作系统的安全是十分重要的.但是,你得知道怎么干.一个简单反恶意程序软件是远远不够的,你需要采取其它措施来协同工作.下面是日常运维工作中常用的几种Linux安全的策略方法. 1. 使用SELinux SELinux是用来对Linux进行安全加固的,有了它,用户和管理员们就可以对访问控制进行更多控制.SELinux为访问控制添加了更细的颗粒度控制.与仅可以指定谁可以读.写或执行一个文件的权限不同的是,SELinux可以让你指定谁可以删除链接.只能追加.移动一个文件之类的

zookeeper 用法和日常运维

本文以ZooKeeper3.4.3版本的官方指南为基础:http://zookeeper.apache.org/doc/r3.4.3/zookeeperAdmin.html,补充一些作者运维实践中的要点,围绕ZK的部署和运维两个方面讲一些管理员需要知道的东西.本文并非一个ZK搭建的快速入门,关于这方面,可以查看<ZooKeeper快速搭建>. 1.部署 本章节主要讲述如何部署ZooKeeper,包括以下三部分的内容: 系统环境 集群模式的配置 单机模式的配置 系统环境和集群模式配置这两节内容大

mysql日常运维与参数调优

日常运维 DBA运维工作 日常 导数据,数据修改,表结构变更 加权限,问题处理 其它 数据库选型部署,设计,监控,备份,优化等 日常运维工作: 导数据及注意事项 数据修改及注意事项 表结构变更及注意事项 加权限及注意事项 问题处理,如数据库响应慢 导数据及注意事项 数据最终形式(csv,sql文本,还是直接导入某库中) 导数据方法(mysqldump,select into outfile,) 注意事项 导出为csv格式需要file权限,并且只能数据库本地导 避免锁库锁表(mysqldump使用

MySQL 日常运维业务账号权限的控制

在MySQL数据库日常运维中,对业务子账号的权限的统一控制十分必要. 业务上基本分为读账号和写账号两种账号,所以可以整理为固定的存储过程,让数据库自动生成对应的库的账号,随机密码.以及统一的读权限,写权限.(这里没有对 host进行过多的限制.只赋给通用的192.168.% .有兴趣的同学可以在存储过程加个参数,对host 控制) delimiter // set session sql_log_bin=OFF; drop PROCEDURE IF EXISTS `usercrt` // CRE

Openstack云计算项目实施其二(安装后日常运维)

5 安装后日常运维   运维基本的操作都在控制节点上的,较为方便的方式就是在openstack 的 dashboard(仪表盘)中进行,进入 dashboard 的方式就是直接在浏览器中输入控制节点的 IP 地址.(需要注意的是浏览器选择方面最好选择火狐浏览器或则谷歌浏览器,因为相对于 IE 浏览器而言,前面两个浏览器对于 openstack 的支持性要好,使用 IE 会在打开实例控制台时无法进入,出现"No vnc...."的错误信息) 用户名和密码放在控制节点/root 下,存放在

kafka知识体系-日常运维命令

本文主要讲解kafka日常运维的命令,包括topic管理.性能测试脚本. kafka版本0.10.0,安装步骤见大数据平台搭建-kafka集群的搭建 常用脚本 如下所有的命令均基于KAFKA_HOME=/wls/oracle/kafka ,服务器列表如下: 10.20.112.59 10.20.112.64 10.20.112.65 10.20.116.129 10.20.116.175 创建topic /wls/oracle/kafka/bin/kafka-topics.sh --zookee

Linux小课堂开课了(9)-Centos7日常运维管理

Centos7日常运维管理 1,查看系统配置,进程,I/O,网卡流量使用w可以查看系统的状态,当前时间,系统启动时间,登录用户,从哪个IP登录的,系统的负载值.使用uptime查看系统的负载值使用iptop,可以具体查看哪个进行使用的I/O较多,需要安装一下[[email protected] ~]# yum -y install iotop[[email protected] ~]# iotop使用cat /proc/cpuinfo查看系统配置使用vmstat可以查看CPU,内存,虚拟磁盘,交