Hadoop 的日志项目,蛮适合用来练练 MapReduce。压缩包叫Mapper
和Reducer
,怎么配置Job
提交到集群。嗯,日志内容也挺常见的,IP、时间戳、URL 一大堆,有点经验的朋友上手应该不难。
Web 日志的格式关键,别小看这一步。你得先一下,比如说清洗脏数据、挑掉 404 之类的无效求。在Mapper
里搞点正则提取,把 IP、URL 这些字段拆出来,生成key-value
对。比如key
是 URL,value
是 1,用来统计访问次数。逻辑简单,但量大,用 Hadoop 刚好。
MapReduce的运行过程也比较有意思:Map阶段拆数据,Shuffle负责分组排序,Reduce来聚合结果。比如你想找最常被访问的页面,就让Reducer
统计一下每个 URL 的访问量。代码写起来不难,关键是理解这个流程。建议你熟一下org.apache.hadoop.mapreduce
里的两个核心类。
项目里还有个main
方法,用来配置和提交作业,记得设定输入输出路径、Job
名、Mapper 和 Reducer 类。输出文件会被写入到 HDFS,想后续也方便。结果可以是文本,也可以用别的格式保存,灵活点看你需求。
哦对了,性能这块别忘了优化。Combiner、自定义分区、数据本地化啥的,用得好可以省不少资源。尤其是日志量大的时候,慢可不行。建议你边做边调试,试试各种优化参数,熟了之后效率提升蛮。
如果你刚好在搞日志或者想学MapReduce
,这个 demo 挺合适的,结构清晰,实战味十足。顺便可以看看这些资源:Hadoop MapReduce 编程实战,还有一些关于 IP 库的,适合扩展下数据的维度。