手撕項目-Flink電商實時分析二

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章