SparkStreaing01

1.作用及其概念

(1)概念:是基于spark(RDD)之上流处理

作用:makes it easy to build scalable fault-tolerant streaming applications(使构建可伸缩的容错流应用程序变得容易)

流:source==>compute==>store(存储)   离线是特殊的流,一个批次一个批次的,断流。

(2)sparkStreaming:它不是一个真正的流处理框架,是min batch(时间)批次处理,如果生产的实时性很强,则选用Storm/Flink等框架。

(3)大致流程图:

从数据源得到数据,然后得到的实时数据是会分成n个batches(按秒来划分)

(4)Spark Streaming的编程模型:DStream (代表连续的流数据)

Core:的是RDD    SQL:的是DF/DS

(5)Spark Streaming编程入口:StreamingContext

SQL:SparkSession    Core:SparkContext

2.基本演示

(1)upstateBykey的应用

package SparkReview.Streaming1

import org.apache.spark.SparkConf
import org.apache.spark.streaming.{Seconds, StreamingContext}

object StreamingStateApp {
  def main(args: Array[String]): Unit = {
    val sparkConf=new SparkConf().setMaster("local[2]").setAppName("StreamingStateApp")
    val ssc=new StreamingContext(sparkConf,Seconds(10))
    ssc.checkpoint("hdfs://192.168.137.251:9000/streaming/checkold/")
    val lines=ssc.textFileStream("hdfs://192.168.137.251:9000/streaming/input/")
     lines.flatMap(_.split(" ")).map(x=>(x,1)).updateStateByKey(updateFunction).print()






    ssc.start()
    ssc.awaitTermination()
 }
  def updateFunction(currentValues:Seq[Int],preValues:Option[Int]):Option[Int]={
   val curr = currentValues.sum
   val pre=preValues.getOrElse(0)
    Some(curr+pre)
//同一个批次进来很有可能有俩个(a,1)(a,1),对于undatefunction来说就是俩个(1,1),
    //然后求和
  }
}
//The checkpoint directory has not been set. Please set it by StreamingContext.checkpoint().
//这个错误是因为,我们做的是求长批次的,新的和老的相加,但是老的计算完成了放在那里呢?所以需要一个checkpoint
//这还会有啥权限错误,改成777就ok了

 

(2)Streaming基本HDFS操作

package SparkReview.Streaming1

import org.apache.spark.SparkConf
import org.apache.spark.streaming.{Seconds, StreamingContext}

object StreamingHDFSApp {
  def main(args: Array[String]): Unit = {
    val sparkConf=new SparkConf().setAppName("HDFS").setMaster("local[2]")
    val ssc=new StreamingContext(sparkConf,Seconds(10))
    val lines=ssc.textFileStream("hdfs://192.168.137.251:9000/streaming/input/")
    //面试题:你自己写的MR中map类里面有几个参数?实现的map方法又有几个参数?
    //streaming什么时候开始跑,他就什么时候开始计算,也就是你跑之前的数据是不会计算进来的
    //监控目录下的所有文件必须是相同的格式
    //hdfs://192.149.21.421/2000/axxxx
    //val lines2=ssc.fileStream()
    lines.flatMap(_.split(" ")).map(x=>(x,1)).reduceByKey(_+_).print()
    //TODO...统计12点到20点的数据(updateByKey)



    ssc.start()
    ssc.awaitTermination()
  }

}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值