统计日志访问 java代码_Java代码统计网站中不同省份用户的访问数

一、需求

针对log日志中给定的信息,统计网站中不同省份用户的访问数

二、编程代码

package org.apache.hadoop.studyhdfs.mapreduce;

import java.io.IOException;

import org.apache.commons.lang.StringUtils;

import org.apache.hadoop.conf.Configuration;

import org.apache.hadoop.conf.Configured;

import org.apache.hadoop.fs.Path;

import org.apache.hadoop.io.IntWritable;

import org.apache.hadoop.io.LongWritable;

import org.apache.hadoop.io.Text;

import org.apache.hadoop.mapreduce.Job;

import org.apache.hadoop.mapreduce.Mapper;

import org.apache.hadoop.mapreduce.Mapper.Context;

import org.apache.hadoop.mapreduce.Reducer;

import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;

import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;

import org.apache.hadoop.util.Tool;

import org.apache.hadoop.util.ToolRunner;

import org.jboss.netty.util.internal.StringUtil;

public class ProvinceCountMapReduce extends Configured implements Tool {

//1.map

/*

*

*/

public static class WordCountMapper extends Mapper{

private IntWritable mapOutputKey =new IntWritable();

private IntWritable mapOutputValue =new IntWritable(1);

@Override

public void map(LongWritable key, Text value, Context context)

throws IOException, InterruptedException {

//get lineValue

String lineValue =value.toString();

//split

String[] strs =lineValue.split("\t");

//line blank

String url=strs[1];

String provinceIdValue =strs[23];

//guolv

if(strs.length < 30 || StringUtils.isBlank(provinceIdValue) || StringUtils.isBlank(url)){

return;

}

int provinceId =Integer.MAX_VALUE;

try {

provinceId=Integer.valueOf(provinceIdValue);

} catch (Exception e) {

return;

}

if(provinceId == Integer.MAX_VALUE){

return;

}

mapOutputKey.set(provinceId);

context.write(mapOutputKey, mapOutputValue);

}

}

//2.reduce

public static class WordCountReduce extends Reducer{

private IntWritable outputValue =new IntWritable();

@Override

public void reduce(IntWritable key, Iterable values,Context context)

throws IOException, InterruptedException {

//to do

int sum = 0;

for(IntWritable value:values){

sum +=value.get();

}

outputValue.set(sum);

context.write(key, outputValue);

}

}

public int run(String[] args) throws Exception{

//1.get Configuration

Configuration conf =super.getConf();

//2.create job

Job job =Job.getInstance(conf, this.getClass().getSimpleName());

job.setJarByClass(ProvinceCountMapReduce.class);

//3.set job

//3.1 set input

Path inputPath =new Path(args[0]);

FileInputFormat.addInputPath(job, inputPath);

//3.2 set mapper

job.setMapperClass(WordCountMapper.class);

job.setMapOutputKeyClass(IntWritable.class);

job.setMapOutputValueClass(IntWritable.class);

//3.3 set reduce

job.setReducerClass(WordCountReduce.class);

job.setOutputKeyClass(IntWritable.class);

job.setOutputValueClass(IntWritable.class);

//3.4 set input

Path outputPath =new Path(args[1]);

FileOutputFormat.setOutputPath(job, outputPath);

//4.submmit

boolean isSuccess =job.waitForCompletion(true);

return isSuccess?0:1;

}

public static void main(String[] args) throws Exception {

args =new String[]{

"hdfs://Hadoop-senior02.beifeng.com:8020/input/2015082818",

"hdfs://Hadoop-senior02.beifeng.com:8020/output15/"

};

Configuration conf =new Configuration();

conf.set("mapreduce.map.output.compress", "true");

int status=ToolRunner.run(conf, new ProvinceCountMapReduce() , args);

System.exit(status);

}

}

3、运行结果

1)运行代码:bin/hdfs dfs -text /output15/par*

2)运行结果:

1 3527

2 1672

3 511

4 325

5 776

6 661

7 95

8 80

9 183

10 93

11 135

12 289

13 264

14 374

15 163

16 419

17 306

18 272

19 226

20 2861

21 124

22 38

23 96

24 100

25 20

26 157

27 49

28 21

29 85

30 42

32 173

以上所述是小编给大家介绍的Java代码统计网站中不同省份用户的访问数的相关介绍,希望对大家有所帮助,在此小编也非常感谢大家对脚本之家网站的支持!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值