Day2—电商日志数据分析
项目要求
根据电商日志文件,分析:
- 1 . 统计页面浏览量(每行记录就是一次浏览)
- 2 . 统计各个省份的浏览量 (需要解析IP)
- 3 . 日志的ETL操作(ETL:数据从来源端经过抽取(Extract)、转换(Transform)、加载(Load)至目的端的过程)
为什么要ETL:没有必要解析出所有数据,只需要解析出有价值的字段即可。本项目中需要解析出:ip、url、pageId(topicId对应的页面Id)、country、province、city
日志内容介绍
日志产生的渠道有nginx日志、ajax加载的一些动态的图片、位置等信息。本次我们提供了一个电商日志打~/data/trackinfo_20130721.data
原始日志说明我们需要的:第二个字段=url、第十四个字段=ip、第十八个字段=时间
字段的解析:我们会从ip中解读出国家、省份、城市,从url中解析出页面的id
前言
- Day2主要完成第一问 :
- 统计页面浏览量(每行记录就是一次浏览)
流程框架
二、实现步骤
1.读入数据
2.编写代码
Map阶段代码如下:
protected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {
context.write(new Text("line"), new IntWritable(1));
}
- LongWritable key:输入数据的键,通常是输入数据行的偏移量。
- Text value:输入数据的值,通常是输入数据行的内容。
- Context context:Mapper的上下文对象,用于传递中间键值对到Reducer,或者在某些情况下直接输出最终结果。
- context.write(new Text(“line”), new IntWritable(1));:在map方法中,使用context对象的write方法输出一个键值对。
- new Text(“line”):创建一个新的Text对象,作为输出的键。这里硬编码为"line",意味着所有输出的键都是"line"。
- new IntWritable(1):创建一个新的IntWritable对象,作为输出的值,这里硬编码为1,意味着每个输入行都会产生一个值为1的输出。
Reduce阶段代码如下:
protected void reduce(Text key, Iterable<IntWritable> values, Context context) throws IOException, InterruptedException {
int sum = 0;
for (IntWritable val : values) {
sum += val.get();
}
result.set(sum);
context.write(key, result);
}
(1) protected void reduce(Text key, Iterable values, Context context) throws IOException, InterruptedException {:这是Reducer类中的reduce方法定义。它接收三个参数:
- Text key:当前处理的键,通常是Mapper输出的键。
- Iterable values:与该键相关联的所有值的集合。因为一个键可能会有多个值,所以这里使用Iterable接口来迭代所有的值。
- Context context:Reducer的上下文对象,用于写入最终的输出结果。
(2)代码解释
- int sum = 0;:初始化一个整数变量sum,用于累加所有的值。
- for (IntWritable val : values) {:使用增强型for循环遍历values集合中的每个IntWritable对象。
- sum += val.get();:对于集合中的每个IntWritable对象,调用它的get方法获取其整数值,并将其加到- sum变量上。
- result.set(sum);:这里result是一个IntWritable对象,通过调用它的set方法来设置累加后的总和值。
- context.write(key, result);:使用context对象的write方法将最终的键值对写入输出。键是传入的key,值是累加后的总和result。
3.打jar包
将编写好的程序进行打包
打好的jar包结果如下
在Hadoop中运行jar包
mapreduce成功
最后在hdfs中查看结果
可以看到 一共有30w条记录
总结
以上就是今天主要做的内容,编写了mapreduce代码来统计页面浏览量。最终得到了结果,培养的自己的动手能力和团队协作能力。希望在今后的学习生活中,将理论与实践充分结合,达到最优。