Hive分析hadoop进程日志

摘要:
为了将hadoop进程日志导入到配置单元表中进行分析,我进行了以下尝试。对于hadoop过程日志的分析,使用正则表达式获得四个字段,一个是日期和时间,一个为日志级别,一个类别,最后一个是详细信息。然后,在配置单元中创建一个表以方便查询。2015-12-1822:23:23357INFOrg.apache.hadop.yarn.server.nodemanager.containermanager.monitor.ContainersMonitorImpl:ProcessTree32652的内存用于容器-数据容器_ 1448915696877_ 26289_ 01_ 000158:110.6MB使用的物理内存;2.1GB4.2GBvirtualmemoryused 2015-12-1822:23:23426INFOorg.apache.hadop.yarn.server.nodemanager.containermanager.monitor.ContainersMonitorImpl:ProcessTree32615的内存用于容器-数据容器_ 1448915696877_ 26289_ 01_ 000102:104.6MB的物理内存;2.1GB4.2GBvirtualemoryused 2015-12-1822:23:23467 WARNorg.apache.hadop.yarn.server.nodemanager.containermanager.monitor.ContainersMonitorImpl:UncreatedceptionContainerMemoryManagerwhilemagingmemoryofcontainer_1448915696877_26289_01_000270java.lang.IllegalArgumentException:disparatevaluesatsun.misc.FDBigInt.quoRemIteratatsun.misc.FormatedFloatingDecimal.dtoaatsun.misc.HormatedFlatingDecimal.atjava.util.Formatter$FormatSpecifier.printatjava.util.Hormatter$FormatSpecifier.printat java.util.FFormatter$FormatSpecifierprintFloattjava.util.Fformatter.formatatjava.lang.String.Formatorg.apache.hadop.util.StringUtils.formattorg.apache.Hadop.util.StringUtils$TraditionalBinaryPrefix.long2Stringatorg.apache.hhadoop.syar.server.nodemanager.containermanager.monitor.ContainersMonitorImpl$MonitoringThread.formatUsageStringatorg.apache.Hhadoop.tyar.server.nodemanager.containermanager.monitor.ContainerImpl$MonitoringThread.run2015-12-1822:23:23498WARNorg.apache.hadop.yarn.server.nodemanager.containermanager.monitor.ContainersMonitorImpl:未加密的容器内存管理器,同时管理容器的内存_ 1448915696877_ 26289_ 01_ 000214DROPTABLEIFEXISTShadow_ log;CREATETABLEhadoop_logROWFORMATSERDE'org.apache.hadop.hive.serde2.RegexSerDe'ITHSERDEPROPERATIESTOREDASTEXTFILE;LOADDATALOCALINPATH“/home/student/hadooplog”INTOTABLEhadoop_log;SELECTdate1,time1,msgtextFROMhadoop_logWHEREmsgtype='ERROR'ORmsgtype='WARN'IMIT5;LOADDATALOCALINPATH“/home/student/hadoplog3”OVERWRITENTOTABLEEhadoop_log;需要注意的是,hive用作行分隔符,因此需要处理原始日志文件,因为原始日志文件中可能存在异常或错误,此时是多行的。您可以编写一个bashshell或python来完成所需的功能。以下是我作为Python初学者编写的。

想把hadoop的进程日志导入hive表进行分析,遂做了以下的尝试。

关于hadoop进程日志的解析
使用正则表达式获取四个字段,一个是日期时间,一个是日志级别,一个是类,最后一个是详细信息,
然后在hive中建一个表,可以用来方便查询。

2015-12-18 22:23:23,357 INFO org.apache.hadoop.yarn.server.nodemanager.containermanager.monitor.ContainersMonitorImpl: Memory usage of ProcessTree 32652 for container-id container_1448915696877_26289_01_000158: 110.6 MB of 2 GB physical memory used; 2.1 GB of 4.2 GB virtual memory used
2015-12-18 22:23:23,426 INFO org.apache.hadoop.yarn.server.nodemanager.containermanager.monitor.ContainersMonitorImpl: Memory usage of ProcessTree 32615 for container-id container_1448915696877_26289_01_000102: 104.6 MB of 2 GB physical memory used; 2.1 GB of 4.2 GB virtual memory used
2015-12-18 22:23:23,467 WARN org.apache.hadoop.yarn.server.nodemanager.containermanager.monitor.ContainersMonitorImpl: Uncaught exception in ContainerMemoryManager while managing memory of container_1448915696877_26289_01_000270
java.lang.IllegalArgumentException: disparate values
        at sun.misc.FDBigInt.quoRemIteration(FloatingDecimal.java:2931)
        at sun.misc.FormattedFloatingDecimal.dtoa(FormattedFloatingDecimal.java:922)
        at sun.misc.FormattedFloatingDecimal.<init>(FormattedFloatingDecimal.java:542)
        at java.util.Formatter$FormatSpecifier.print(Formatter.java:3264)
        at java.util.Formatter$FormatSpecifier.print(Formatter.java:3202)
        at java.util.Formatter$FormatSpecifier.printFloat(Formatter.java:2769)
        at java.util.Formatter$FormatSpecifier.print(Formatter.java:2720)
        at java.util.Formatter.format(Formatter.java:2500)
        at java.util.Formatter.format(Formatter.java:2435)
        at java.lang.String.format(String.java:2148)
        at org.apache.hadoop.util.StringUtils.format(StringUtils.java:123)
        at org.apache.hadoop.util.StringUtils$TraditionalBinaryPrefix.long2String(StringUtils.java:758)
        at org.apache.hadoop.yarn.server.nodemanager.containermanager.monitor.ContainersMonitorImpl$MonitoringThread.formatUsageString(ContainersMonitorImpl.java:487)
        at org.apache.hadoop.yarn.server.nodemanager.containermanager.monitor.ContainersMonitorImpl$MonitoringThread.run(ContainersMonitorImpl.java:399)
2015-12-18 22:23:23,498 WARN org.apache.hadoop.yarn.server.nodemanager.containermanager.monitor.ContainersMonitorImpl: Uncaught exception in ContainerMemoryManager while managing memory of container_1448915696877_26289_01_000214

DROP TABLE IF EXISTS hadoop_log; 

CREATE TABLE hadoop_log (
date1 STRING,
  time1 STRING,
  msgtype STRING,
  classname STRING,
  msgtext STRING
  ) 

ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.RegexSerDe' 

WITH SERDEPROPERTIES (
  "input.regex" = "^(\d{4}-\d{2}-\d{2})\s+(\d{2}.\d{2}.\d{2}.\d{3})\s+(\S+)\s+(\S+)\s+(.*)$", 

"output.format.string" = "%1$s %2$s %3$s %4$s %5$s"
)
STORED AS TEXTFILE; 

LOAD DATA LOCAL INPATH "/home/student/hadooplog" INTO TABLE hadoop_log; 

SELECT date1, time1, msgtext FROM hadoop_log WHERE msgtype='ERROR' OR msgtype='WARN' LIMIT 5; 

LOAD DATA LOCAL INPATH "/home/student/hadooplog3" OVERWRITE INTO TABLE hadoop_log;

需要注意的一点是,hive以 做为行分隔符,所以需要对原有的日志文件进行处理,因为原有的日志文件中可能有异常或错误发生,这个时候是多行的。否则hive中会有很

多空的记录。

可以写一段bash shell或python来完成需要的功能。下面是我刚学python写的,很简陋。

import re
p=re.compile(r"^d{4}-d{2}-d{2}s+d{2}.d{2}.d{2}.d{3} INFO|WARN|ERROR|DEBUG")
str=""
f2=open('/home/student/hadooplog4','w')
with open('/app/cdh23502/logs/hadoop-student-datanode-nn1.log','r') as f:
    for l in f:
        if(str==""):
            str=l.rstrip()
            continue
        if(str!="" and len(p.findall(l))>0):
            print "
"+str
        f2.write(str+"
")
            str=l.rstrip()
        else:
            str=str+l.rstrip()
    print "
" + str
    f2.write(str+"
")

f2.flush()
f2.close()

免责声明:文章转载自《Hive分析hadoop进程日志》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇pytorch实现的transformer代码分析Ionic3,组件的使用(四)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

可用于Hadoop下的ETL工具——Kettle

看大家分享了好多hadoop相关的一些内容,我为大家介绍一款ETL工具——Kettle。    Kettle是pentaho公司开源的一款ETL工具,跟hadoop一样,也是java实现,其目的就是做数据整合中时数据的抽取(Extract)、转换(Transformat)、加载(Load)工作。Kettle中有两种脚本文件,transformation和j...

疫情数据背后,聊聊数据分析平台变迁史

今年年初这场突如其来的疫情,让我们早晨醒来打开手机的第一件事情,从刷朋友圈变成了刷每日最新的疫情数据。看看国内外新增确诊人数/现存确诊人数,看看国内外疫情分布的地图。各大新闻平台也因为快速上线疫情实时动态板块,成为了大家了解疫情发展的阵地。 其实,在这背后是有着一个海量数据分析的架构平台做支撑。 对于很多企业的管理人员而言,这就是个很熟悉的T+1计算T日...

hive基础1

Hive基础 1、介绍 Hive是OLAP(online analyze process,在线分析处理)。通常称为数据仓库,简称数仓。内置很多分析函数,可进行海量数据的在线分析处理。hive构建在hadoop之上,使用hdfs作为进行存储,计算过程采用的是Mapreduce完成,本质上hive是对hadoop的mr的封装,通过原始的mr方式进行数据处理与分...

技术基础 | 重要指标和告警

本文节选自DataStax Cassandra文档,点击这里查看更多相关信息。 监控Apache Cassandra®和DataStax Enterprise(DSE)集群是一项非常重要的工作,它帮助您识别集群中的问题并及时地应对并缓解问题。 Apache Cassandra和DSE都公开了用于观察和分析的指标。Cassandra通过使用Java管理扩展...

启动tomcat服务器报错:ERROR ContextLoader:307

错误详情 十月01,20187:46:36下午org.apache.tomcat.util.digester.SetPropertiesRulebegin警告:[SetPropertiesRule]{Server/Service/Engine/Host/Context}Settingproperty'source'to'org.eclipse.jst.je...

【RocketMQ】RocketMQ事务消息 Demo

RocketMQ为4.3.0版本(我这种写法4.2.0不行) 如果你之前用的其他版本,需要去修改下系统的环境变量 maven工程用到的jar包 <dependencies> <!-- RocketMQ --> <dependency> <groupId>org.apache.rocketmq<...