Pentaho Work with Big Data(五)—— 格式化原始web日志

时间:2021-03-01 16:56:49
本示例说明如何使用Pentaho MapReduce把原始web日志解析成格式化的记录。

一、向HDFS导入示例数据文件
将weblogs_rebuild.txt文件放到HDFS的/user/grid/raw/目录下(因资源有限,本示例只取了这个文件的前10行数据)
参考: http://blog.csdn.net/wzy0623/article/details/51133760

二、建立一个用于Mapper的转换
1. 新建一个转换,如图1所示。

Pentaho Work with Big Data(五)—— 格式化原始web日志

图1

2. 编辑'MapReduce Input'步骤,如图2所示。

Pentaho Work with Big Data(五)—— 格式化原始web日志

图2

3. 编辑'Regex Evaluation'步骤,如图3所示。

Pentaho Work with Big Data(五)—— 格式化原始web日志

图3

说明:
. “正则表达式”里面填写如下内容:
^([^\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)字段”如下所示,所有字段都是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所示。

Pentaho Work with Big Data(五)—— 格式化原始web日志

图4

5. 编辑'Value Mapper'步骤,如图5所示。

Pentaho Work with Big Data(五)—— 格式化原始web日志

图5

6. 编辑'User Defined Java Expression'步骤,如图6所示。

Pentaho Work with Big Data(五)—— 格式化原始web日志

图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所示。

Pentaho Work with Big Data(五)—— 格式化原始web日志

图7

将转换保存为weblog_parse_mapper.ktr

三、建立一个调用MapReduce步骤的作业,使用mapper转换,仅运行map作业
1. 新建一个作业,如图8所示。

Pentaho Work with Big Data(五)—— 格式化原始web日志

图8

2. 编辑'Pentaho MapReduce'作业项,如图9到图11所示。

Pentaho Work with Big Data(五)—— 格式化原始web日志

图9

Pentaho Work with Big Data(五)—— 格式化原始web日志

图10

Pentaho Work with Big Data(五)—— 格式化原始web日志

图11

说明:
. 只需要编辑“Mapper”、“Job Setup”和“Cluster”三个标签
. hadoop_local是已经建立好的Hadoop Clusters连接,设置如图12所示

Pentaho Work with Big Data(五)—— 格式化原始web日志

图12

建立过程参考 http://blog.csdn.net/wzy0623/article/details/51086821

将作业保存为weblogs_parse_mr.kjb

四、执行作业并验证输出
1. 启动hadoop集群
# 启动HDFS
$HADOOP_HOME/sbin/start-dfs.sh
# 启动yarn
$HADOOP_HOME/sbin/start-yarn.sh
# 启动historyserver
$HADOOP_HOME/sbin/mr-jobhistory-daemon.sh start historyserver

2. 执行作业,日志如图13所示。

Pentaho Work with Big Data(五)—— 格式化原始web日志

图13

从图13可以看到,作业已经成功执行。

3. 检查Hadoop的输出文件,结果如图14所示。

Pentaho Work with Big Data(五)—— 格式化原始web日志

图14

从图14可以看到,/user/grid/parse目录下生成了名为part-00000和part-00001的两个输出文件。

参考:

http://wiki.pentaho.com/display/BAD/Using+Pentaho+MapReduce+to+Parse+Weblog+Data