目录
4. 编辑 User Defined Java Expression 步骤
本示例说明如何使用 Pentaho MapReduce 把细节数据转换和汇总成一个聚合数据集。当给一个关系型数据仓库或数据集市准备待抽取的数据时,这是一个常见使用场景。我们使用格式化的 web 日志数据作为细节数据,并且建立一个聚合文件,包含按 IP 和年月分组的 PV 数。
关于如何使用 Pentaho MapReduce 把原始 web 日志解析成格式化的记录,参考:Pentaho Work with Big Data(五)—— 格式化原始 web 日志
一、向 HDFS 导入示例数据文件
将 weblogs_parse.txt 文件放到 HDFS 的 /user/grid/parse/ 目录下(因资源有限,本示例只取了这个文件的前 100 行数据)。参考:Pentaho Work with Big Data(三)—— 向 Hadoop 集群导入数据
二、建立一个用于 Mapper 的转换
1. 新建一个转换
如图1 所示:
图1
2. 编辑 MapReduce Input 步骤
如图2 所示:
图2
3. 编辑 Split Fields 步骤
如图3 所示:
图3
说明:“字段”如下所示,所有字段都是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 步骤
如图4 所示:
图4
说明:“Java Expression”列填写如下内容:
client_ip + '\t' + year + '\t' + month_num
5. 编辑 MapReduce Output 步骤
如图5 所示:
图5
将转换保存为 aggregate_mapper.ktr。
三、建立一个用于 Reducer 的转换
1. 新建一个转换
如图6 所示:
图6
2. 编辑 MapReduce Input 步骤
如图7 所示:
图7
3. 编辑 Group by 步骤
如图8 所示:
图8
4. 编辑 MapReduce Output 步骤
如图9 所示:
图9
将转换保存为 aggregate_reducer.ktr。
四、建立一个调用 MapReduce 步骤的作业
使用 mapper 和 reducer 转换。
1. 新建一个作业
如图10 所示:
图10
2. 编辑 Pentaho MapReduce作业项
如图11 - 图14 所示:
图11
图12
图13
图14
说明:
- 需要编辑“Mapper”、“Reducer”、“Job Setup”和“Cluster”四个标签。
- hadoop_local 是已经建立好的 Hadoop Clusters 连接,设置如图15 所示。 建立过程参考:Pentaho Work with Big Data(一)—— Kettle 连接 Hadoop集群
图15
将作业保存为 aggregate_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. 执行作业
日志如图16 所示:
图16
从图16 可以看到,作业已经成功执行。
3. 检查 Hadoop 的输出文件
结果如图17 所示:
图17
从图17 可以看到,/user/grid/aggregate_mr 目录下生成了名为 part-00000 输出文件,文件中包含按 IP 和年月分组的 PV 数。
参考:
http://wiki.pentaho.com/display/BAD/Using+Pentaho+MapReduce+to+Generate+an+Aggregate+Dataset