Changes between Version 16 and Version 17 of LogParser


Ignore:
Timestamp:
Jul 7, 2008, 6:48:03 PM (16 years ago)
Author:
waue
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • LogParser

    v16 v17  
    6161
    62621~4為變數較為單純,之後將說明5~9的函數功能
     63----------------------------------------------
     64
     65{{{
     66        public static void main(String[] args) throws IOException {
     67                String table_name = "apache-log2";
     68                String dir = "/user/waue/apache-log";
     69                creatTable(table_name);
     70                runMapReduce(table_name, dir);
     71        }
     72}
     73}}}
     74
     75首先看到main函數究竟搞了些什麼?[[br]]
     76宣告了table的名稱,要parser的檔案放在'''hdfs'''當中的哪個路徑下,注意此路徑為hdfs,若給的是local file system的路徑的話,程式跑的時候會產生NullPointer Exception的錯誤。然後呼叫creatTable函數其功能用來創建table,接著跑runMapReduce函數,而整個程式主體就是在runMapReduce
     77
    6378------------------------------------
    6479{{{
     
    104119此方法因為有IO的存取,因此要宣告trows IOException, 且用try來起始。[[br]]
    105120首先LogParser log = new LogParser(value.toString()); value的值為要parser的內容的某一行,因為基於hdfs的map-reduce架構上,hadoop會幫我們把資料整合起來,因此程式的邏輯只要處理好這一行即可。LogParser 在下面會介紹到,目前只要知道log物件是原始資料value透過 LogParser 處理過的產物。透過log物件的方法getIP,getProtocol(),...等,我們可以輕易取得需要的資料,用table.put( Row_Key , Column_Qualify_Name , Value) 方法將Value值填入Row_Key中的Column_Qualify_Name欄位中。接著研究table物件。[[br]]
    106 table是全域變數之一,由 [http://hadoop.apache.org/hbase/docs/current/api/org/apache/hadoop/hbase/HTable.html org.apache.hadoop.hbase.HTable] 類別定義。產生出HTable物件'''必定要'''給兩個初始化的值,一個是另一個全域變數也是重要的設定檔conf,另一個是tableName也就是資料表的名稱
     121table是全域變數之一,由 [http://hadoop.apache.org/hbase/docs/current/api/org/apache/hadoop/hbase/HTable.html org.apache.hadoop.hbase.HTable] 類別定義。產生出HTable物件'''必定要'''給兩個初始化的值,一個是另一個全域變數也是重要的設定檔conf,另一個是tableName也就是資料表的名稱,當HTable 的 table 物件產生出來之後,我們就可以利用put來放入資料。然而一個新的資料表,要如何給他row_key呢?
     122因此 table.startUpdate(new Text(log.getIp())) 的功能就是 將 ip設定為table的row_key。有興趣的話可以參考[http://hadoop.apache.org/hbase/docs/current/api/org/apache/hadoop/hbase/HTable.html#startUpdate(org.apache.hadoop.io.Text) 官方的startUpdate說明] [[br]]
     123用此方法可以回傳一個型態為Long的值,將他宣告成為lockId變數,之後就可以用他當主key,而將值一個一個輸入到對應的欄位中。因此我們可以把結構看成是這樣
     124 || key\欄位 || http:protocol || http:method || http:code || http:bytesize || http:agent || url: || referrer: || http:code ||
     125 || row_key  || value1 || value2 || value3 || value4 || value5 || value6 || value7 || value8 ||
     126需要注意的是,由於Htable 是三維度的結構,row_key、column、timestamp。因此最後commit時間變數則是利用以下方法:[[br]]
     127table.commit(lockId, log.getTimestamp()),將log內取得的時間update到整個row去。[[br]]
    107128
    108129configure(jobConf conf) 此為override org.apache.hadoop.mapred.MapReduceBase.configure(JobConf )
     
    178199        }
    179200}}}
    180 {{{
    181         public static void main(String[] args) throws IOException {
    182                 String table_name = "apache-log2";
    183                 String dir = "/user/waue/apache-log";
    184                 creatTable(table_name);
    185                 runMapReduce(table_name, dir);
    186         }
    187 }
    188 }}}
     201
    189202
    190203