目錄
3. 建立一個調用MapReduce步驟的作業,使用mapper轉換,僅運行map作業。
4. 建立一個調用MapReduce步驟的作業,調用mapper和reducer轉換。
一、示例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所示。
(2)編輯'MapReduce Input'步驟,如圖2所示。
(3)編輯'Regex Evaluation'步驟,如圖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所示。
(5)編輯'Value Mapper'步驟,如圖5所示。
(6)編輯'User Defined Java Expression'步驟,如圖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所示。
將轉換保存爲weblog_parse_mapper.ktr。
3. 建立一個調用MapReduce步驟的作業,使用mapper轉換,僅運行map作業。
(1)新建一個作業,如圖8所示。
(2)編輯'Pentaho MapReduce'作業項,如圖9到圖11所示。
說明:
- 只需要編輯“Mapper”、“Job Setup”和“Cluster”三個標籤。
- CDH631是已經建立好的Hadoop Clusters,建立過程參見“https://wxy0327.blog.csdn.net/article/details/106406702#%E4%BA%8C%E3%80%81%E8%BF%9E%E6%8E%A5Hadoop%E9%9B%86%E7%BE%A4”。
將作業保存爲weblogs_parse_mr.kjb。
4. 執行作業並驗證輸出
(1)執行作業,日誌如圖12所示。
從圖12可以看到,作業已經成功執行。
(2)檢查HDFS的輸出文件,結果如圖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所示。
(2)編輯'MapReduce Input'步驟,如圖15所示。
(3)編輯'Split Fields'步驟,如圖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所示。
說明:“Java Expression”列填寫如下內容:
client_ip + '\t' + year + '\t' + month_num
(5)編輯'MapReduce Output'步驟,如圖18所示。
將轉換保存爲aggregate_mapper.ktr。
3. 建立一個用於Reducer的轉換
(1)新建一個轉換,如圖19所示。
(2)編輯'MapReduce Input'步驟,如圖20所示。
(3)編輯'Group by'步驟,如圖21所示。
(4)編輯'MapReduce Output'步驟,如圖22所示。
將轉換保存爲aggregate_reducer.ktr。
4. 建立一個調用MapReduce步驟的作業,調用mapper和reducer轉換。
(1)新建一個作業,如圖23所示。
(2)編輯'Pentaho MapReduce'作業項,如圖24到圖27所示。
說明:
- 需要編輯“Mapper”、“Reducer”、“Job Setup”和“Cluster”四個標籤。
- CDH631是已經建立好的Hadoop Clusters。
將作業保存爲aggregate_mr.kjb。
5. 執行作業並驗證輸出
(1)執行作業,日誌如圖28所示。
從圖28可以看到,作業已經成功執行。
(2)檢查HDFS的輸出文件,結果如圖29所示。
從圖29可以看到,/user/root/aggregate_mr目錄下生成了名爲part-00000輸出文件,文件中包含按IP和年月分組的PV數。