天天看點

Flume-NG + HDFS + HIVE 日志收集分析

内部邀請碼:C8E245J (不寫邀請碼,沒有現金送)

國内私募機構九鼎控股打造,九鼎投資是在全國股份轉讓系統挂牌的公衆公司,股票代碼為430719,為“中國PE第一股”,市值超1000億元。 

------------------------------------------------------------------------------------------------------------------------------------------------------------------

5台VM機器(RHEL6.3):

1, collector01

2, namenode

3, datanode01

4, datanode02

5, datanode03

第一台機器collector01使用者日志收集,資料彙總到collector01後寫入hdfs, 其餘4台僅服務Hadoop相關服務,其上安裝了CDH4.0,HDFS/MapReduce/hive等等。

注意:

1, flume-ng如需将資料寫入hdfs,本機也同樣需要安裝hadoop 相關的package

Flume-NG基本概念

<a href="http://diag.5ustore.com/proxy/index.php?url=1B1H16yvyDyd1B1xyC1CyR1uyOyByF1yya1wyR1k1Gyd0Lyoy40d0Z0UyByp1314yM0KyKyU1y1fyI1Ayg1F10yI1w1lyPyI1jyH1qyQ1f1t131Gyn1g1qyEyiyA1t1F1a1m"></a>

如上圖,Flume-NG有3個重要的概念

Flume-NG Agent and Client 

Agent:

運作主機: collector01

Hadoop 版本: CDH 4.0 (如前所述,如需sink到HDFS, hadoop相關的package需要安裝)

Flume-NG 版本: 1.3.0

Flume-NG 位置: /data/apache-flume-1.3.0-bin

Haoop HDFS name node: hdfs://namenode:8020

Flume-NG Agent 配置檔案:

運作Agent:

運作以上指令後, flume-ng将會在啟動avro Source監聽41414端口, 等待日志進入。參數 “-Dflume.root.logger=DEBUG,console”僅為debug用途,這樣當log資料進入的時候可以清新看到具體情況,請勿在真實環境使用,否則terminal會被log淹沒。

以上配置檔案将會把41414端口偵測到的日志寫入HDFS hdfs://namenode:8020/user/hive/warehouse/squid. 且每 600000 行roll out成一個一個新檔案。

Client:

一下為HDFS中收集到的日志:

<a href="http://diag.5ustore.com/proxy/index.php?url=1B1H16yv1n1FyEys0gyBy1yC0T0i0I0S10yP0XylyDye0Lyoy30d0Z0UyByq1s14yayb0GyP1y1DyJ1pyJyE0TyJyzyf0S0eyeyh1nyQ1Fyo121fyn1F1E1p1J1t19yB1O1B14yG1q0U1qyXyFyn1yyTyT151ryCyd0Q1n1ryNyS"></a>

使用HiVE分析資料:

Hive 将會利用hdfs中的log進行分析, 你需要寫好相應的分析SQL語句,hive将調用 map reduce完成你的分析任務。我測試用的log是squid log,log entry如下:

1356867313.430 109167 10.10.10.1 TCP_MISS/200 51498 CONNECTsecurepics.example.com:443 – HIER_DIRECT/securepics.example.com -

若要适應hive分析,就需要在hdfs資料的基礎上create table. 而最重要的一步就是根據log的内容來寫正規表達式,比對log中的每一列。

在Hive中運作如下指令建立Table:

hive&gt;

CREATE EXTERNAL TABLE IF NOT EXISTS squidtable(ttamp STRING, duration STRING,

clientip STRING, action STRING, http_status STRING, bytes STRING, method STRING,

uri STRING, proto STRING, uri_host STRING, uri_port STRING, uri_path STRING,

username STRING, hierarchy STRING, server_ip STRING, content_type STRING)

ROW FORMAT SERDE ‘org.apache.hadoop.hive.contrib.serde2.RegexSerDe’

WITH SERDEPROPERTIES (

“input.regex” = “[ ]*([0-9]*)[^ ]*[ ]*([^ ]*) ([^ ]*) ([^ |^ /]*)/([0-9]*) ([0-9]*) ([^ ]*) ((?:([^:]*)://)?([^/:]+):?([0-9]*)?(/?[^ ]*)) ([^ ]*) ([^/]+)/([^ ]+) (.*)”,

“output.format.string” = “%1$s %2$s %3$s %4$s %5$s %6$s %7$s %8$s %9$s %10$s %11$s %12$s %13$s %14$s %15$s %16$s”

)

STORED AS TEXTFILE

LOCATION ‘/user/hive/warehouse/squid';

一些分析SQL例子: