Kettle與Hadoop(五)執行MapReduce

目錄

一、示例1——格式化原始web日誌

1. 準備文件與目錄

2. 建立一個用於Mapper的轉換

3. 建立一個調用MapReduce步驟的作業,使用mapper轉換,僅運行map作業。

4. 執行作業並驗證輸出

二、示例2——生成聚合數據集

1. 準備文件與目錄

2. 建立一個用於Mapper的轉換

3. 建立一個用於Reducer的轉換

4. 建立一個調用MapReduce步驟的作業,調用mapper和reducer轉換。

5. 執行作業並驗證輸出

參考:


一、示例1——格式化原始web日誌

        本示例說明如何使用Pentaho MapReduce把原始web日誌解析成格式化的記錄。

1. 準備文件與目錄

# 創建原始文件所在目錄
hdfs dfs -mkdir /user/root/raw
# 修改讀寫權限
hdfs dfs -chmod -R 777 /

        用Hadoop copy files作業項將weblogs_rebuild.txt文件放到HDFS的/user/root/raw目錄下,具體操作參見https://wxy0327.blog.csdn.net/article/details/106471124#%E4%B8%80%E3%80%81%E5%90%91Hadoop%E9%9B%86%E7%BE%A4%E5%AF%BC%E5%85%A5%E6%95%B0%E6%8D%AE%EF%BC%88Hadoop%20copy%20files%EF%BC%89

2. 建立一個用於Mapper的轉換

(1)新建一個轉換,如圖1所示。

圖1

(2)編輯'MapReduce Input'步驟,如圖2所示。

圖2

(3)編輯'Regex Evaluation'步驟,如圖3所示。

圖3

        說明:

  • “Regular expression”裏面填寫如下內容:
^([^\s]{7,15})\s                             # client_ip
-\s                                          # unused IDENT field
-\s                                          # unused USER field
\[((\d{2})/(\w{3})/(\d{4})                   # request date dd/MMM/yyyy
:(\d{2}):(\d{2}):(\d{2})\s([-+ ]\d{4}))\]
                                             # request time :HH:mm:ss -0800
\s"(GET|POST)\s                              # HTTP verb
([^\s]*)                                     # HTTP URI
\sHTTP/1\.[01]"\s                            # HTTP version
 
(\d{3})\s                                    # HTTP status code
(\d+)\s                                      # bytes returned
"([^"]+)"\s                                  # referrer field
 
"                                            # User agent parsing, always quoted.
"?                                           # Sometimes if the user spoofs the user_agent, they incorrectly quote it.
(                                            # The UA string
  [^"]*?                                     # Uninteresting bits
  (?:
    (?:
     rv:                                     # Beginning of the gecko engine version token
     (?=[^;)]{3,15}[;)])                     # ensure version string size
     (                                       # Whole gecko version
       (\d{1,2})                             # version_component_major
       \.(\d{1,2}[^.;)]{0,8})                # version_component_minor
       (?:\.(\d{1,2}[^.;)]{0,8}))?           # version_component_a
       (?:\.(\d{1,2}[^.;)]{0,8}))?           # version_component_b
     )
     [^"]*                                   # More uninteresting bits
    )
   |
    [^"]*                                    # More uninteresting bits
  )
)                                            # End of UA string
"?
"
  • “Capture Group Fields”如下所示,所有字段都是String類型。
client_ip
full_request_date
day
month
year
hour
minute
second
timezone
http_verb
uri
http_status_code
bytes_returned
referrer
user_agent
firefox_gecko_version
firefox_gecko_version_major
firefox_gecko_version_minor
firefox_gecko_version_a
firefox_gecko_version_b

 (4)編輯'Filter Rows'步驟,如圖4所示。

圖4

(5)編輯'Value Mapper'步驟,如圖5所示。

圖5

(6)編輯'User Defined Java Expression'步驟,如圖6所示。

圖6

        說明:“Java Expression”列填寫如下內容:

client_ip + '\t' + full_request_date + '\t' + day + '\t' + month + '\t' + month_num + '\t' + year + '\t' + hour + '\t' + minute + '\t' + second + '\t' + timezone + '\t' + http_verb + '\t' + uri + '\t' + http_status_code + '\t' + bytes_returned + '\t' + referrer + '\t' + user_agent

(7)編輯'MapReduce Output'步驟,如圖7所示。

圖7

        將轉換保存爲weblog_parse_mapper.ktr。

3. 建立一個調用MapReduce步驟的作業,使用mapper轉換,僅運行map作業。

(1)新建一個作業,如圖8所示。

圖8

(2)編輯'Pentaho MapReduce'作業項,如圖9到圖11所示。

圖9
圖10
圖11

        說明:

        將作業保存爲weblogs_parse_mr.kjb。

4. 執行作業並驗證輸出

(1)執行作業,日誌如圖12所示。

圖12

        從圖12可以看到,作業已經成功執行。

(2)檢查HDFS的輸出文件,結果如圖13所示。

圖13

        從圖13可以看到,/user/root/parse目錄下生成了名爲part-00000和part-00001的兩個輸出文件,內容已經被格式化。

二、示例2——生成聚合數據集

        本示例說明如何使用Pentaho MapReduce把細節數據轉換和彙總成一個聚合數據集。當給一個關係型數據倉庫或數據集市準備待抽取的數據時,這是一個常見使用場景。我們使用格式化的web日誌數據作爲細節數據,並且建立一個聚合文件,包含按IP和年月分組的PV數。

1. 準備文件與目錄

# 創建格式化文件所在目錄
hdfs dfs -mkdir /user/root/parse1/
# 上傳格式化文件
hdfs dfs -put -f weblogs_parse.txt /user/root/parse1/
# 修改讀寫權限
hdfs dfs -chmod -R 777 /

2. 建立一個用於Mapper的轉換

(1)新建一個轉換,如圖14所示。

圖14

(2)編輯'MapReduce Input'步驟,如圖15所示。

圖15

(3)編輯'Split Fields'步驟,如圖16所示。

圖16

        說明:“New field”如下所示,所有字段都是String類型。

client_ip
full_request_date
day
month
month_num
year
hour
minute
second
timezone
http_verb
uri
http_status_code
bytes_returned
referrer
user_agent

(4)編輯'User Defined Java Expression'步驟,如圖17所示。

圖17

        說明:“Java Expression”列填寫如下內容:

client_ip + '\t' + year + '\t' + month_num

(5)編輯'MapReduce Output'步驟,如圖18所示。

圖18

        將轉換保存爲aggregate_mapper.ktr。

3. 建立一個用於Reducer的轉換

(1)新建一個轉換,如圖19所示。

圖19

(2)編輯'MapReduce Input'步驟,如圖20所示。

圖20

(3)編輯'Group by'步驟,如圖21所示。

圖21

(4)編輯'MapReduce Output'步驟,如圖22所示。

圖22

        將轉換保存爲aggregate_reducer.ktr。

4. 建立一個調用MapReduce步驟的作業,調用mapper和reducer轉換。

(1)新建一個作業,如圖23所示。

圖23

(2)編輯'Pentaho MapReduce'作業項,如圖24到圖27所示。

圖24
圖25
圖26
圖27

        說明:

  • 需要編輯“Mapper”、“Reducer”、“Job Setup”和“Cluster”四個標籤。
  • CDH631是已經建立好的Hadoop Clusters。

        將作業保存爲aggregate_mr.kjb。

5. 執行作業並驗證輸出

(1)執行作業,日誌如圖28所示。

圖28

        從圖28可以看到,作業已經成功執行。

(2)檢查HDFS的輸出文件,結果如圖29所示。

圖29

        從圖29可以看到,/user/root/aggregate_mr目錄下生成了名爲part-00000輸出文件,文件中包含按IP和年月分組的PV數。

參考:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章