通过sed和awk获取集群最新挂掉的DataNode信息

由于之前远程桌面不好使,集群出现了missing block的时候没法登陆远程桌面查看是那些节点由于重启导致DataNode进程挂掉。同时简单的用命令hdfs dfsadmin -report查看又不方便,信息量太多,以下是一个用sed和awk实现的简单的脚本:

cat lastDeadNodes.sh

hdfs dfsadmin -report > all.log

#sed -n ‘/Dead/,$p‘ all.log > deadnodes.log

sed ‘1,/Dead/d‘ all.log > deadnodes.log

sed -i /Rack/d deadnodes.log

awk ‘BEGIN{RS="\n\n\n";ORS="\n";FS="\n";OFS="\t"}{print $2,$15}‘ deadnodes.log > last.log

dt=`date`

dt=`echo $dt | awk -F" " ‘{print $2" "$3}‘`

grep "$dt" last.log

脚本说明之前说明以下hdfs dfsadmin -report获取到的数据的格式:

.......

Name: 10.39.0.185:50010 (10.39.0.185)

Hostname: 10.39.0.185

Rack: /YH11070028

Decommission Status : Normal

Configured Capacity: 46607198593024 (42.39 TB)

DFS Used: 22027374755910 (20.03 TB)

Non DFS Used: 0 (0 B)

DFS Remaining: 24579823837114 (22.36 TB)

DFS Used%: 47.26%

DFS Remaining%: 52.74%

Configured Cache Capacity: 0 (0 B)

Cache Used: 0 (0 B)

Cache Remaining: 0 (0 B)

Cache Used%: 100.00%

Cache Remaining%: 0.00%

Last contact: Wed Feb 25 23:14:43 CST 2015

Dead datanodes:

Name: 10.39.1.35:50010 (10.39.1.35)

Hostname: 10.39.1.35

Rack: /YH11070032

Decommission Status : Normal

Configured Capacity: 0 (0 B)

DFS Used: 0 (0 B)

Non DFS Used: 0 (0 B)

DFS Remaining: 0 (0 B)

DFS Used%: 100.00%

DFS Remaining%: 0.00%

Configured Cache Capacity: 0 (0 B)

Cache Used: 0 (0 B)

Cache Remaining: 0 (0 B)

Cache Used%: 100.00%

Cache Remaining%: 0.00%

Last contact: Mon Jan 26 10:08:36 CST 2015

.......

从以上信息看出在hadoop2.0中挂掉的DN节点信息在“Dead datanodes:“行之后,所以写脚本的关键就是从这一行开始获取后面的所有行的信息。

以下是对脚本的说明:

1、通过hdfs dfsadmin -report命令拿到集群所以DN的信息输出到all.log文件,包括存活的和挂掉DN信息。

2、获取挂掉的DN节点信息,通过sed来实现

#sed -n ‘/Dead/,$p‘ all.log > deadnodes.log   #这种方式拿到的信息会包含匹配行“Dead datanodes:”

sed ‘1,/Dead/d‘ all.log > deadnodes.log       #这种方式拿到的信息是从匹配行“Dead datanodes:”的下一行至末尾的信息,剔除了匹配行

3、完成第二步之后我们就拿到了所有的挂掉的DN信息,但是经过测试发现有的DN信息里面没有”Rack: “这一行的信息,这一行也不是我们最后需要的,索性就删掉:

sed -i /Rack/d deadnodes.log

4、完成第三步之后的信息格式如下:

Name: 10.39.1.35:50010 (10.39.1.35)

Hostname: 10.39.1.35

Decommission Status : Normal

Configured Capacity: 0 (0 B)

DFS Used: 0 (0 B)

Non DFS Used: 0 (0 B)

DFS Remaining: 0 (0 B)

DFS Used%: 100.00%

DFS Remaining%: 0.00%

Configured Cache Capacity: 0 (0 B)

Cache Used: 0 (0 B)

Cache Remaining: 0 (0 B)

Cache Used%: 100.00%

Cache Remaining%: 0.00%

Last contact: Mon Jan 26 10:08:36 CST 2015

Name: 10.39.6.197:50010 (10.39.6.197)

Hostname: 10.39.6.197

Decommission Status : Normal

Configured Capacity: 0 (0 B)

DFS Used: 0 (0 B)

Non DFS Used: 0 (0 B)

DFS Remaining: 0 (0 B)

DFS Used%: 100.00%

DFS Remaining%: 0.00%

Configured Cache Capacity: 0 (0 B)

Cache Used: 0 (0 B)

Cache Remaining: 0 (0 B)

Cache Used%: 100.00%

Cache Remaining%: 0.00%

Last contact: Mon Jan 19 18:23:56 CST 2015

其实我们值需要的信息是Hostname和Last contact,这一步用awk来实现,将多行作为一个记录来处理:

awk ‘BEGIN{RS="\n\n\n";ORS="\n";FS="\n";OFS="\t"}{print $2,$15}‘ deadnodes.log > last.log

这里面用到了awk的几个关键字:RS/ORS/FS/OFS

RS:Record Separator,记录分隔符

ORS:Output Record Separate,输出当前记录分隔符

FS:Field Separator,字段分隔符

OFS:Out of Field Separator,输出字段分隔符

awk脚本的意思是以三个换行符"\n\n\n"为处理记录的分隔符(RS="\n\n\n"),既从“Name:”到“Last contact: ”,awk作为一个记录来处理,处理完的记录之间用一个换行符隔开(ORS="\n"),待处理的一个记录的字段之间的分隔符为一个换行符(FS="\n"),但是处理完之后一个记录的字段之间的分隔符我们用的是\t(OFS="\t"),每一个记录里面我们只关注Hostname和Last contact,所以只需要打印$2和$15({print
$2,$15})。

可以看以下经过这一步处理之后的数据格式:

Hostname: 10.39.1.35Last contact: Mon Jan 26 10:08:36 CST 2015

Hostname: 10.39.6.197 Last contact: Mon Jan 19 18:23:56 CST 2015

Hostname: 10.39.5.80 Last contact: Sat Feb 07 03:59:20 CST 2015

Hostname: 10.39.4.247 Last contact: Wed Feb 25 17:27:51 CST 2015

Hostname: 10.39.6.199 Last contact: Mon Feb 02 10:42:21 CST 2015

Hostname: 10.39.7.55 Last contact: Thu Feb 26 00:26:17 CST 2015

Hostname: 10.39.0.218 Last contact: Thu Feb 12 07:18:54 CST 2015

Hostname: 10.39.0.208 Last contact: Mon Feb 09 12:22:13 CST 2015

Hostname: 10.39.4.235 Last contact: Thu Jan 01 08:00:00 CST 1970

Hostname: 10.39.4.243 Last contact: Thu Jan 01 08:00:00 CST 1970

5、最后我们只关注今天挂掉的DN节点

dt=`date`

dt=`echo $dt | awk -F" " ‘{print $2" "$3}‘`

grep "$dt" last.log

结果:

Hostname: 10.39.7.55Last contact: Thu Feb 26 00:26:17 CST 2015

小结:

这个脚本用到了awk和sed的一些特殊用法,在此记录一下以后便于查询。

时间: 2024-11-05 20:35:50

通过sed和awk获取集群最新挂掉的DataNode信息的相关文章

通python的pexpect模块获取集群信息

通过pexpect获取集群主机信息 import pexpect ip = 'xx' cmd = 'xx' ssh = pexpect.spawn('ssh %s  %s'  %(ip,cmd)) r = ssh.read() print r

安装ORACLE高可用RAC集群11g校验集群安装的可行性输出信息

安装ORACLE高可用RAC集群11g校验集群安装的可行性输出信息 作者:Eric 微信:loveoracle11g [[email protected] grid]$ ./runcluvfy.sh stage -pre crsinst -fixup -n node1,node2 -verbose Performing pre-checks for cluster services setup Checking node reachability... Check: Node reachabil

【K8S学习笔记】Part2:获取K8S集群中运行的所有容器镜像

本文将介绍如何使用kubectl列举K8S集群中运行的Pod内的容器镜像. 注意:本文针对K8S的版本号为v1.9,其他版本可能会有少许不同. 0x00 准备工作 需要有一个K8S集群,并且配置好了kubectl命令行工具来与集群通信.如果未准备好集群,那么你可以使用Minikube创建一个K8S集群,或者你也可以使用下面K8S环境二者之一: Katacoda Play with Kubernetes 如果需要查看K8S版本信息,可以输入指令kubectl version. 在本练习中,我们将使

redis 哨兵集群原理及部署

复制粘贴自: https://www.cnblogs.com/kevingrace/p/9004460.html 请点击此链接查看原文. 仅供本人学习参考, 如有侵权, 请联系删除, 多谢! Redis的集群方案大致有三种:1)redis cluster集群方案:2)master/slave主从方案:3)哨兵模式来进行主从替换以及故障恢复. 一.sentinel哨兵模式介绍Sentinel(哨兵)是用于监控redis集群中Master状态的工具,是Redis 的高可用性解决方案,sentinel

Ubuntu16.04安装kubernetes1.13集群

Ubuntu16.04安装kubernetes1.13集群 最新的安装可以使用以下方式:https://www.cnrancher.com/docs/rancher/v2.x/cn/overview/quick-start-guide 方便,快捷! 以下为正文. 前言 Docker容器化,虚拟化技术上的又一个猛将,可以极高提高软件部署的速度.运行一个Docker容器,这个容器作为一个进程分配了计算资源,不同容器之间资源隔离,仿佛每个容器都是一台机器, 并且通过宿主机网桥,可以模拟一个局域网.可以

kafka入门:简介、使用场景、设计原理、主要配置及集群搭建(转)

问题导读: 1.zookeeper在kafka的作用是什么? 2.kafka中几乎不允许对消息进行"随机读写"的原因是什么? 3.kafka集群consumer和producer状态信息是如何保存的? 4.partitions设计的目的的根本原因是什么? 一.入门 1.简介 Kafka is a distributed,partitioned,replicated commit logservice.它提供了类似于JMS的特性,但是在设计实现上完全不同,此外它并不是JMS规范的实现.k

Hadoop集群(第8期)_HDFS初探之旅

1.HDFS简介 HDFS(Hadoop Distributed File System)是Hadoop项目的核心子项目,是分布式计算中数据存储管理的基础,是基于流数据模式访问和处理超大文件的需求而开发的,可以运行于廉价的商用服务器上.它所具有的高容错.高可靠性.高可扩展性.高获得性.高吞吐率等特征为海量数据提供了不怕故障的存储,为超大数据集(Large Data Set)的应用处理带来了很多便利. Hadoop整合了众多文件系统,在其中有一个综合性的文件系统抽象,它提供了文件系统实现的各类接口

(转帖)开源容器集群管理系统Kubernetes架构及组件介绍

最近在搞Docker还有她的管理工具,选型Kuberetes后,被她的术语和概念搞得晕头转向...看了一篇文章还不错,放到这里分享出来. 地址:http://www.linuxidc.com/Linux/2015-12/125757.htm 引文如下: Kubernetes 作为Docker生态圈中重要一员,是Google多年大规模容器管理技术的开源版本,是产线实践经验的最佳表现.如Urs Hölzle所说,无论是公有云还是私有云甚至混合云,Kubernetes将作为一个为任何应用,任何环境的容

redis应用之cluster(集群)的安装配置

一.redis cluster介绍: 在redis3.0之前的版本中是没有集群功能的,只有master-slave模式,这种模式有个弊端是master主机挂掉,客户端过来的请求就处理不了了.虽然可以通过sentinel高可用来解决这一问题,但是当数据量很庞大的时候,也会成为影响性能的瓶颈,所以可以考虑配置redis cluster来提高性能.Redis集群是一个提供在多个Redis节点间共享数据的程序集,它并不支持处理多个keys的命令,因为这需要在不同的节点间移动数据,从而达不到像Redis那