Spark初学(三)- StreamingContext - 日志解析

spark进行日志解析有两种方式:

一、flume(日志采集)将采集到的日志保存到硬盘的日志文件中,spark每隔一段时间汇总分析一次(我们在用的是这种方式,每一个小时通过自定义的sink生成一个日志文件,spark的汇总每隔一个小时被调用一次,汇总上个小时采集的日志)。

二、flume将采集到的日志保存在内存中,spark通过流每隔几秒获取一次内存中数据,汇总分析保存。

第二种实现:

 SparkConf conf = new SparkConf().set("spark.executor.memory",573240000);
 JavaStreamingContext sc = new JavaStreamingContext(conf.setMaster("spark.master").setAppName(appName), Durations.seconds(seconds));
//Durations.seconds(seconds): 每隔seconds秒拉去一次。
JavaReceiverInputDStream<SparkFlumeEvent> flumeStream = FlumeUtils.createPollingStream(sc, "spark.host", "spark.port");
 JavaDStream<SparkFlumeEvent> datas = flumeStream.filter(s -> new String(s.event().getBody().array(), "UTF-8").contains("healthIndex@"));

JavaDStream<JSONObject> lines = flumeStream.map(new resultMap());
JavaPairDStream<String, Integer[]> siteCodes = lines.mapToPair(m -> new Tuple2<>(m.get("sd") + "_" + m.get("sc").toString(), new Integer[]{m.getInteger("loadspeed"), 1, DeadLinkNum(m.getInteger("httpCode"))}));
JavaPairDStream<String, Integer[]> counts = siteCodes.reduceByKey((i1, i2) -> new Integer[]{(i1[0] + i2[0]), (i1[1] + i2[1]), (i1[2] + i2[2])});
 static class resultMap implements Function<SparkFlumeEvent, JSONObject> {
        @Override
        public JSONObject call(SparkFlumeEvent event) throws Exception {
            String line = new String(event.event().getBody().array(), "UTF-8");
            JSONObject jobj = JSONObject.parseObject(AT.split(line)[1]);
            Matcher m = DATE_REGX.matcher(line);
            while (m.find()) {
                jobj.put("sd", m.group());
            }
            return jobj;
        }
    }
spark每隔几秒就会从flume自动拉去一部分日志,进行汇总,这种方式spark的汇总代码是一直运行着的,但是第一种方式,每次需要汇总时调用一次spark的汇总即可。


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值