由于没有大量的测试数据,所以我们需要手动编写一些测试数据通过上报服务上传,做一些mapreduce操作。
1.模拟电商浏览记录
创建ScanlogProduce类
主要字段是
频道id 类别id 产品id 用户id 打开时间 离开时间 地区 网络方式 来源方式 浏览器
首先初始化实例数据
Random random = new Random();
for(int i=0;i<20;i++){
//频道id 类别id 产品id 用户id 打开时间 离开时间 地区 网络方式 来源方式 浏览器
UserscanLog userscanLog = new UserscanLog();
userscanLog.setPingdaoid(pindaoids[random.nextInt(pindaoids.length)]);
userscanLog.setLeibieid(leibieids[random.nextInt(leibieids.length)]);
userscanLog.setChanpinid(chanpinids[random.nextInt(chanpinids.length)]);
userscanLog.setUserid(yonghuids[random.nextInt(yonghuids.length)]);
userscanLog.setContry(contrys[random.nextInt(contrys.length)]);
userscanLog.setProvince(provinces[random.nextInt(provinces.length)]);
userscanLog.setCity(citys[random.nextInt(citys.length)]);
userscanLog.setNetwork(networks[random.nextInt(networks.length)]);
userscanLog.setSources(sources[random.nextInt(sources.length)]);
userscanLog.setLiulanqitype(liulanqis[random.nextInt(liulanqis.length)]);
Long[] times = usetimelog.get(random.nextInt(usetimelog.size()));
userscanLog.setStarttime(times[0]);
userscanLog.setEndetime(times[1]);
String jonstr = JSONObject.toJSONString(userscanLog);
System.out.println(jonstr);
UrlsendUtil.sendmessage("http://127.0.0.1:6097/DsInfoSjService/webInfoSJService",jonstr);
}
启动上报服务,测试并查看输出结果:
2.编写MapReduce计算
Map(取出收到消息的id和次数):
public PindaoRD map(KafkaMessage value) throws Exception {
String jsonstring = value.getJsonmessage();
System.out.println("map进来的数据=="+jsonstring);
UserscanLog userscanLog = JSON.parseObject(jsonstring, UserscanLog.class);
long pingdaoid = userscanLog.getPingdaoid();
PindaoRD pindaoRD = new PindaoRD();
pindaoRD.setPingdaoid(pingdaoid);
pindaoRD.setCount(Long.valueOf(value.getCount()+""));
return pindaoRD;
}
Reduce(计算相同频道id累加的次数):
public PindaoRD reduce(PindaoRD value1, PindaoRD value2) throws Exception {
PindaoRD pindaoRD = new PindaoRD();
System.out.println("value1=="+value1);
System.out.println("value2=="+value2);
pindaoRD.setPingdaoid(value1.getPingdaoid());
pindaoRD.setCount(value1.getCount()+value2.getCount());
return pindaoRD;
}
启动flink测试类,控制台打印结果:
3.总结
本篇主要是大量测试的字段编写比较费劲(大家都懂,java的bean属性很多),后续会包生成的测试数据进行持久化存储,将搭建redis服务,由于服务器有限,都在一台服务器上(服务器充裕的tuhao忽略)。
具体代码可参照我的git项目地址,现有代码均已通过测试可以使用,后续会持续更新,直到项目结束,不懂的细节,可以关注公众号,后台留言,会细致解答。
git地址:https://github.com/jyqjyq/filnkDS.git