flume+springboot+kafka+sparkStream集成

接上篇flume+springboot+kafka集成,本篇将sparkStream也集成进来了,sparkStream作为kafka的消费者,接受kafka的数据,并实现日志错误、警告数据的实时计算

(1)环境还是前文中的环境,这里新添加的只有一个sparkStream程序(本文上传的所有代码都是可以跑通)

package com.saprk

import org.apache.kafka.common.serialization.StringDeserializer
import org.apache.spark.SparkConf
import org.apache.spark.streaming.kafka010.KafkaUtils
import org.apache.spark.streaming.{Seconds, StreamingContext}
import org.apache.spark.streaming.kafka010.LocationStrategies.PreferConsistent
import org.apache.spark.streaming.kafka010.ConsumerStrategies.Subscribe
object kafkademo {
   def main(args: Array[String]): Unit = {
       //1 创建spark配置对象
       val conf=new SparkConf()
      //设置配置属性
      conf.setMaster("local[2]")
       conf.setAppName("test sparkstreaming-kafka consumer")
       //2 通过配置文件创建Stream的上下文对象, 设置Streaming读取每3秒钟流式数据
       val ctx=new StreamingContext(conf,Seconds(10))
       ctx.checkpoint("/data_in")
       
       
       //3 设置kafka读取主题名
       val topics=Array("testtopics")
       //4 消费者配置
       val kafkaParam = Map(
       "bootstrap.servers" -> "master:9092",//用于初始化链接到集群的地址
       "key.deserializer" -> classOf[StringDeserializer],
       "value.deserializer" -> classOf[StringDeserializer],
       //用于标识这个消费者属于哪个消费团体
       "group.id" -> "g1",
       //如果没有初始化偏移量或者当前的偏移量不存在任何服务器上,可以使用这个配置属性
       //可以使用这个配置,latest自动重置偏移量为最新的偏移量
       "auto.offset.reset" -> "latest",
       //如果是true,则这个消费者的偏移量会在后台自动提交
       "enable.auto.commit" -> (false: java.lang.Boolean)
       );
       //5 通过 sparkstreaming-kafka的工具类,创建DStream
       
      //创建DStream,返回接收到的输入数据
       var stream=KafkaUtils.createDirectStream[String,String](ctx, PreferConsistent,Subscribe[String,String](topics,kafkaParam))       
       val data=stream.filter(line=>line.value().length>0) 
       
       val words = stream.map(_.value().split(" "))
       
//       实现累加
       val updateFunc =(curVal:Seq[Int],preVal:Option[Int])=>{
            //进行数据统计当前值加上之前的值
            var total = curVal.sum
            //最初的值应该是0
            var previous = preVal.getOrElse(0)
            //Some 代表最终的返回值
            Some(total+previous)
          }
       
       val d_stream = stream.map(qline⇒qline.value().split(" ")(1))
       val result = d_stream.map(word=>(word,1)).updateStateByKey(updateFunc).print()

        val wordCounts = d_stream.map(x =>(x,1)).reduceByKey(_+_)
        
         wordCounts.print()

       var rdd=data.map(line=>(line.key(),line.value().split(" ")(1)))
      
       rdd.print()
       //rdd.saveAsTextFiles("/msparkout")
      // 启动流式读取对象
       ctx.start()
       //等待客户端信息发送
      ctx.awaitTermination()
      //停止流式对象上下文
      ctx.stop()
  }

}

(2)上传到服务器上,服务器上现在运行着WebServer flume kafka,只需运行spark程序即可

bin/spark-submit --class com.saprk.kafkademo  /opt/software/sparkcount.jar

(3)运行成功

里面有个warn,搜了搜,很多说是bug的,忽略就行,所以这里我就忽略了整个程序就完成了,下面你可以将实时计算的数据传到mysql等数据库中,利用他

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yann.bai

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值