2014-11-02 74 views
0

我有以下的一块Hadoop集群:找到基于一个子一个日志文件中的特定行 - Python的

==> namenode_32: 14/11/02 02:19:32 INFO namenode.NNStorage: Storage directory /data/1/dfs/nn has been successfully formatted. 
==> namenode_32: 14/11/02 02:19:32 INFO namenode.NNStorage: Storage directory /nfsmount/dfs/nn has been successfully formatted. 
==> namenode_32: 14/11/02 02:19:32 INFO namenode.FSImage: Saving image file /nfsmount/dfs/nn/current/fsimage.ckpt_0000000000000000000 using no compression 
==> namenode_32: 14/11/02 02:19:32 INFO namenode.FSImage: Saving image file /data/1/dfs/nn/current/fsimage.ckpt_0000000000000000000 using no compression 
==> namenode_32: 14/11/02 02:19:32 INFO namenode.FSImage: Image file of size 115 saved in 0 seconds. 
==> namenode_32: 14/11/02 02:19:32 INFO namenode.FSImage: Image file of size 115 saved in 0 seconds. 
==> namenode_32: 14/11/02 02:19:32 INFO namenode.NNStorageRetentionManager: Going to retain 1 images with txid >= 0 
==> namenode_32: 14/11/02 02:19:32 INFO util.ExitUtil: Exiting with status 0 
==> namenode_32: 14/11/02 02:19:32 INFO namenode.NameNode: SHUTDOWN_MSG: 
==> namenode_32: /************************************************************ 
==> namenode_32: SHUTDOWN_MSG: Shutting down NameNode at ip-10-45-129-157.ec2.internal/10.45.129.157 
==> namenode_32: ************************************************************/ 
==> namenode_32: * Starting Hadoop namenode: 
==> namenode_32: starting namenode, logging to /var/log/hadoop-hdfs/hadoop-hdfs-namenode-ip-10-45-129-157.out 
==> namenode_32: * Starting Hadoop secondarynamenode: 
==> namenode_32: starting secondarynamenode, logging to /var/log/hadoop-hdfs/hadoop-hdfs-secondarynamenode-ip-10-45-129-157.out 
==> namenode_32: * Starting Hadoop jobtracker: 
==> namenode_32: starting jobtracker, logging to /var/log/hadoop-0.20-mapreduce/hadoop-hadoop-jobtracker-ip-10-45-129-157.out 

,我试图找到这种集群的ip address。我知道SHUTDOWN_MSG: Shutting down NameNode ...这是我正在寻找的是私人DNSprivate ip的元组。对于关节例如,我得到:

(ip-10-45-129-157.ec2.internal, 10.45.129.157) 

所以我尝试:

import re 
expr = "SHUTDOWN_MSG: Shutting down NameNode at" 
s = re.search(expr, log) 
>>> print (s.group()) 
SHUTDOWN_MSG: Shutting down NameNode at 

这不是我想要的...我怎么能生产出使用正则表达式这样的元组?

回答

1

您可以使用多个捕获组捕获上下文后记。

>>> re.search(r'SHUTDOWN_MSG: Shutting down NameNode at (.+)/(.+)', log).groups() 
('ip-10-45-129-157.ec2.internal', '10.45.129.157') 

你可以写你的表达为:使用

>>> re.search(r'SHUTDOWN_MSG:.+at (.+)/(.+)', log).groups() 
2

使用多个捕获搜索字符串后群体:

>>> expr = 'SHUTDOWN_MSG:.+at (.+)/(.+)' 
>>> re.search(expr, log).groups() 
('ip-10-45-129-157.ec2.internal', '10.45.129.157') 
0

捕捉组()

import re 
f=open('log_file','r').read() 
re.findall("SHUTDOWN_MSG:.+at (.+)/(.+)",f) 

re.findall()将不会停止在第一次发现它会发现,直到它到达终点的文件,所以它会给你所有匹配

相关问题