本示例说明如何使用Pentaho MapReduce把细节数据转换和汇总成一个聚合数据集。当给一个关系型数据仓库或数据集市准备待抽取的数据时,这是一个常见使用场景。我们使用格式化的web日志数据作为细节数据,并且建立一个聚合文件,包含按IP和年月分组的PV数。 关于如何使用Pentaho MapReduce把原始web日志解析成格式化的记录,参考 http://blog.csdn.net/wzy0623/article/details/51145570。 一、向HDFS导入示例数据文件 将weblogs_parse.txt文件放到HDFS的/user/grid/parse/目录下(因资源有限,本示例只取了这个文件的前100行数据) 参考: http://blog.csdn.net/wzy0623/article/details/51133760 二、建立一个用于Mapper的转换 1. 新建一个转换,如图1所示。
图1
2. 编辑'MapReduce Input'步骤,如图2所示。
图2
3. 编辑'Split Fields'步骤,如图3所示。
图3
说明:“字段”如下所示,所有字段都是String类型
代码语言:javascript复制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”列填写如下内容:
代码语言:javascript复制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所示
图15
建立过程参考 http://blog.csdn.net/wzy0623/article/details/51086821。 将作业保存为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