discuz論壇apache日誌hadoop大數據分析項目:清洗數據核心功能解說及代碼實現

discuz論壇apache日誌hadoop大數據分析項目:清洗數據核心功能解說及代碼實現
http://www.aboutyun.com/thread-8637-1-1.html
(出處: about雲開發)php

 

咱們在進行日誌分析的時候,那麼日誌的數據是雜亂無章的,或則說日誌的數據並非咱們都想看到的。因此咱們須要對裏面的數據進行清洗,說的直白一點就是要過濾裏面的字符串。
下面即是咱們須要過濾的數據:

html

183.131.11.98 - - [01/Aug/2014:01:01:05 +0800] "GET /thread-5981-1-1.html HTTP/1.1" 200 18152 "http://www.baidu.com/s?wd=cocos2dx%203.2%20wp8%E6%94%AF%E6%8C%81&pn=30&oq=cocos2dx%203.2%20wp8%E6%94%AF%E6%8C%81&tn=28035039_2_pg&ie=utf-8&rsv_page=1" "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.107 UBrowser/1.0.349.1252 Safari/537.36"


這裏若是對日誌不瞭解或則不瞭解日誌分析,可能會產生問題?爲何過濾這條數據,就能達到清洗的目的。這裏所講的只是核心內容,對於運行mapreduce來處理,能夠看後面的文章。我這裏重點講如何把上面的數據,過濾出咱們想要的數據。
咱們須要什麼數據,從about雲分析discuz論壇apache日誌hadoop大數據項目:概要設計說明書中,咱們須要過濾出下面數據:

java

1.ip地址
2.訪問時間
3.url地址
4.用戶使用瀏覽器

過濾分析

1.ip地址獲取
上面ip地址仍是比較好過濾的,分隔符爲 - -便可獲得咱們想要的數據
ipField = line.split("- -")[0].trim();



2.訪問時間
訪問時間,想獲取時間容易,可是想作一個文藝程序員仍是得費點功夫。
[01/Aug/2014:01:01:05 +0800] ,對於這個有的採用直接獲取01/Aug/2014:01:01:05的這種方式,這種方式沒有錯,算是一個正常程序員所作的事 情。那麼咱們該怎麼作的文藝優雅一點。這裏是直接獲取01/Aug/2014:01:01:05 +0800,這裏是由相關函數的。程序員

  1. dt = new SimpleDateFormat("dd/MMM/yyyy:HH:mm:ss Z", Locale.US).parse(time);
複製代碼

咱們使用這個函數,將其轉換爲正常的時間格式。可是咱們想要咱們中國人可以一眼識別的正常時間。apache

2014年8月1日 下午07時04分58秒


若是你採用了這種形式20140801070458,這個既不是文藝程序員、也不是正常程序員所作的事情,就只剩下2比程序員這個職稱了。
ok,下面咱們作的文藝一點。
但是咱們怎麼才能獲得下面時間,一個個進行組合,getYarn()+getMonth......等,完,又步入2比程序員的行列。api

  1. 2014年8月1日 下午07時04分58秒
複製代碼

這裏介紹一個簡單的方法瀏覽器

  1.         DateFormat df1 = DateFormat.getDateTimeInstance(DateFormat.LONG,DateFormat.LONG);
複製代碼
  1. dateField = df1.format(dt);
複製代碼


這樣就完美解決這個問題,不須要組合,只須要getDateTimeInstance傳遞參數便可,更多的時間格式參考Java新api獲取年月日時分秒


3.url與瀏覽器的獲取
這裏面關鍵是對轉義字符的理解正確,好比如何以雙引號做爲分隔符,如何以括號爲分隔符。


解說完畢直接上代碼:

函數

  1. package www.aboutyun.com;
  2. import java.text.DateFormat;
  3. import java.text.ParseException;
  4. import java.text.SimpleDateFormat;
  5. import java.util.Date;
  6. import java.util.Locale;
  7. public class test {
  8.         public static void StringResolves(String line) throws ParseException {
  9.                 String ipField, dateField, urlField, browserField;
  10.                 // 獲取ip地址
  11.                 ipField = line.split("- -")[0].trim();
  12.                 // 獲取時間,並轉換格式
  13.                 int getTimeFirst = line.indexOf("[");
  14.                 int getTimeLast = line.indexOf("]");
  15.                 String time = line.substring(getTimeFirst + 1, getTimeLast).trim();
  16.                 Date dt = null;
  17.                 DateFormat df1 = DateFormat.getDateTimeInstance(DateFormat.LONG,
  18.                                 DateFormat.LONG);
  19.                 dt = new SimpleDateFormat("dd/MMM/yyyy:HH:mm:ss Z", Locale.US)
  20.                                 .parse(time);
  21.                 dateField = df1.format(dt);
  22.                 // 獲取url
  23.                 String[] getUrl = line.split("\"");
  24.                 String firtGeturl = getUrl[1].substring(3).trim();
  25.                 String secondGeturl = getUrl[3].trim();
  26.                 urlField = firtGeturl + "分隔符" + secondGeturl;
  27.                 // 獲取瀏覽器
  28.                 String[] getBrowse = line.split("\"");
  29.                 String strBrowse = getBrowse[5].toString();
  30.                 String str = "(KHTML, like Gecko)";
  31.                 int i = strBrowse.indexOf(str);
  32.                 strBrowse = strBrowse.substring(i);
  33.                 String strBrowse1[] = strBrowse.split("\\/");
  34.                 strBrowse = strBrowse1[0].toString();
  35.                 String strBrowse2[] = strBrowse.split("\\)");
  36.                 strBrowse = strBrowse2[1].trim();
  37.                 System.out.println(ipField);
  38.                 System.out.println(dateField);
  39.                 System.out.println(urlField);
  40.                 System.out.println(strBrowse);
  41.         }
  42.         public static void main(String[] args) throws ParseException {
  43.                 // TODO Auto-generated method stub
  44.                 String browser = "203.100.80.88 - - [01/Aug/2014:19:04:58 +0800] \"GET /uc_server/avatar.php?uid=3841&size=small HTTP/1.1\" 301 463 \"http://www.aboutyun.com/forum.php\" \"Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.95 Safari/537.36 SE 2.X MetaSr 1.0";
  45.                 test.StringResolves(browser );
  46.         }
  47. }

運行結果以下:
 

oop

相關文章
相關標籤/搜索