由於沒有大量的測試數據,所以我們需要手動編寫一些測試數據通過上報服務上傳,做一些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