sparkStreaming基础知识整理

sparkStreaming 是一种流处理框架,支持多种数据源和多种输出,是一中微批处理,
主要的数据结构是:DStream 离散数据流,由多个RDD组成,每一个微批都是一个RDD。
Spark Streaming 的入口需要单独创立,因为sparkSession中灭有整合:
创建如下:
val conf=new SparkConf().setMaster(“local[*]”).setAppName(“kgc streaming demo”)
val ssc=new StreamingContext(conf,Seconds(5))
注意:一个jvm中只有一个StreamingContext启动
StreamingContext停止后,不能在启动
使用scala 编写sparkStreaming程序:
Scoket数据源:

//local[n]  其中n要大于接受器的个数
val sparkConf = new SparkConf().setMaster("local[2]").setAppName("NetworkWordCount")
val ssc = new StreamingContext(sparkConf, Seconds(1))
//创建一个接收器
val lines = ssc.socketTextStream("localhost", 9999)//指定数据源
val words = lines.flatMap(_.split(" "))
val wordCounts = words.map(x => (x, 1)).reduceByKey(_ + _)
wordCounts.print()
//开始
ssc.start()
//等待终止信号
ssc.awaitTermination()

sparkStreaming内建的流式数据:文件系统(不与接收器相关联)、Scoket、kafka、Flume等
文件系统数据源:

val sparkConf = new SparkConf().setAppName("HdfsWordCount").setMaster("local[2]")
val ssc = new StreamingContext(sparkConf, Seconds(2))

// 创建FileInputDStream去读取文件系统上的数据
val lines = ssc.textFileStream("hdfs://hadoop131:9000/data")
//使用空格进行分割每行记录的字符串
val words = lines.flatMap(_.split(" "))
//类似于RDD的编程,将每个单词赋值为1,并进行合并计算
val wordCounts = words.map(x => (x, 1)).reduceByKey(_ + _)
wordCounts.print()
ssc.start()
ssc.awaitTermination()

flume数据源
1、push的方式读取数据

val conf: SparkConf = new SparkConf().setAppName("flumedemo").setMaster("local[3]")
  val ssc = new StreamingContext(conf,Seconds(5))
  //push 方式  由主机推送数据给sparkStreaming   需要先启动sparkStreaming
  val flumeStream: ReceiverInputDStream[SparkFlumeEvent] = FlumeUtils.createStream(ssc,"hadoop131",5678)
  //flume 作为sparking streaming 的实时数据流  每一条数据是一个event 故此时形成的dStream中的数据是一个一个的event
  //event 有body  和header
  flumeStream.map(x=>new String(x.event.getBody
    .array()).trim)
    .flatMap(_.split(" ")).map((_,1)).reduceByKey(_+_).print()

  ssc.start()
  ssc.awaitTermination()

2、poll的方式获取数据

val conf: SparkConf = new SparkConf().setAppName("flumedemo").setMaster("local[3]")
  val ssc = new StreamingContext(conf,Seconds(5))
  //poll方式  主动拉取数据,需要先启动flume
  val flumeStream=FlumeUtils.createPollingStream(ssc,"hadoop131",5678)
  flumeStream.map(x=>new String(x.event.getBody.array()).trim)
    .flatMap(_.split(" ")).map((_,1)).reduceByKey(_+_).print()

  ssc.start()
  ssc.awaitTermination()

kafka数据源

  //设置主函数的参数  第一个是brokers  第二个是topics  可以使用逗号隔开 传入多个topics
  //sparkStreaming  可以一次性读取 kafka中的多个topic中的数据
  val Array(brokers, topics) = args
  val sparkConf = new SparkConf()
    .setAppName("DirectKafkaWordCount").setMaster("local[1]")
  val ssc = new StreamingContext(sparkConf, Seconds(2))

  val topicsSet = topics.split(",").toSet
  val kafkaParams = Map[String, String]("bootstrap.servers" -> brokers)
  val messages = KafkaUtils.createDirectStream[String, String](ssc,
    LocationStrategies.PreferConsistent,
    ConsumerStrategies.Subscribe[String,
      String](topicsSet,kafkaParams))
  messages.map(_.value())       // 取出 value
    .flatMap(_.split(" "))   // 将字符串使用空格分隔
    .map(word => (word, 1))      // 每个单词映射成一个 pair
    .reduceByKey(_+_)    // 根据每个 key 进行累加
    .print()     // 打印前 10 个数据
  ssc.start()
  ssc.awaitTermination()
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值