3

我想解析这个日志样本

5 月 3 日 11:52:54 cdh-dn03 init: tty (/dev/tty6) 主进程 (1208) 被 TERM 信号杀死

5 月 3 日 11:53:31 cdh-dn03 内核:已注册 taskstats 版本 1

5 月 3 日 11:53:31 cdh-dn03 内核:sr0:scsi3-mmc 驱动器:32x/32x xa/form2 托盘

5 月 3 日 11:53:31 cdh-dn03 kernel: piix4_smbus 0000:00:07.0: SMBus base address uninitialized - 升级 BIOS 或使用 force_addr=0xaddr

5 月 3 日 11:53:31 cdh-dn03 内核:nf_conntrack 版本 0.5.0(7972 个桶,最大 31888 个)

5 月 3 日 11:53:57 cdh-dn03 内核:hrtimer:中断耗时 11250457 ns

5 月 3 日 11:53:59 cdh-dn03 ntpd_initres[1705]:找不到主机名:0.rhel.pool.ntp.org

这就是我创建表并将数据加载到其中的方式

CREATE TABLE LogParserSample(

 month_name STRING, day STRING, time STRING, host STRING, event STRING, log STRING)

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

 WITH SERDEPROPERTIES (

  'input.regex' = '(^(\S+))\s+(\S+)\s+(\S+)\s+(\S+)\s+(\S+)\s+((\S+.)*)')

 stored as textfile;

我正在使用这些网站来生成正则表达式

http://www.regexe.com/

http://rubular.com/

这两个是我正在使用的正则表达式

(\w{3})\s+(\w{1})\s+(\S+)\s+(\S+)\s+(\S+)\s+((\S+.)*)

(^(\S+))\s+(\S+)\s+(\S+)\s+(\S+)\s+(\S+)\s+((\S+.)*)

加载数据并选择

load data local inpath '/home/programmeur_v/serde_dataset.txt' into table LogParserSample;

select * from LogParserSample;

输出为空

蜂巢> 从 LogParserSample 中选择 *;

好的

NULL NULL NULL NULL NULL NULL

NULL NULL NULL NULL NULL NULL

NULL NULL NULL NULL NULL NULL

NULL NULL NULL NULL NULL NULL

NULL NULL NULL NULL NULL NULL

NULL NULL NULL NULL NULL NULL

NULL NULL NULL NULL NULL NULL

耗时:0.094 秒,获取:7 行

刚接触蜂巢所以不知道到底是什么问题

4

1 回答 1

3

在使用 regex serde创建Hive 表时,我们需要使用Java 等效的正则表达式。

试试下面的ddl:

hive> CREATE TABLE LogParserSample(
 month_name STRING, day STRING, time STRING, host STRING, event STRING, log STRING)
 ROW FORMAT SERDE 'org.apache.hadoop.hive.contrib.serde2.RegexSerDe'   
 WITH SERDEPROPERTIES (
  'input.regex' = '(\\S+)\\s+(\\S+)\\s+(\\S+)\\s+(\\S+)\\s+(\\S+)\\s+(.*)')
 stored as textfile;

hive> select * from LogParserSample;
+-------------+------+-----------+-----------+----------------------+-----------------------------------------------------------------------------------------------------+--+
| month_name  | day  |   time    |   host    |        event         |                                                 log                                                 |
+-------------+------+-----------+-----------+----------------------+-----------------------------------------------------------------------------------------------------+--+
| May         | 3    | 11:52:54  | cdh-dn03  | init:                | tty (/dev/tty6) main process (1208) killed by TERM signal                                           |
| May         | 3    | 11:53:31  | cdh-dn03  | kernel:              | registered taskstats version 1                                                                      |
| May         | 3    | 11:53:31  | cdh-dn03  | kernel:              | sr0: scsi3-mmc drive: 32x/32x xa/form2 tray                                                         |
| May         | 3    | 11:53:31  | cdh-dn03  | kernel:              | piix4_smbus 0000:00:07.0: SMBus base address uninitialized - upgrade BIOS or use force_addr=0xaddr  |
| May         | 3    | 11:53:31  | cdh-dn03  | kernel:              | nf_conntrack version 0.5.0 (7972 buckets, 31888 max)                                                |
| May         | 3    | 11:53:57  | cdh-dn03  | kernel:              | hrtimer: interrupt took 11250457 ns                                                                 |
| May         | 3    | 11:53:59  | cdh-dn03  | ntpd_initres[1705]:  | host name not found: 0.rhel.pool.ntp.org                                                            |
+-------------+------+-----------+-----------+----------------------+-----------------------------------------------------------------------------------------------------+--+

使用链接生成 java 等效正则表达式。

于 2018-07-29T23:48:15.123 回答