Spark流处理中的广播变量

2021-08-01  本文已影响0人  小段DSH12138

背景

        前段时间做的是一个流式项目里,场景为:对于流式数据,使用过滤规则进行实时过滤并产出结果数据。流式数据为源源不断的IP,筛选出在合格IP集合中的数据,传输到下游消息中间件中。

技术选型

        上游数据从消息中间件中读取,处理采用Spark Streaming,下游也采用消息中间件。

广播变量

广播变量的适用场景

        在Spark这种分布式计算中,如果每个算子都需要读取一个变量,并且变量的数据量最好在百级,则采用广播变量,把这个变量广播到各个executor算子中;

广播变量相对于外部变量的优点

ps:Spark中executor的内存管理见之前写的文章:https://blog.csdn.net/qq_35583915/article/details/109359939

广播变量的使用

val sparkConf = new SparkConf().setAppName("broadcast-in-spark")
sparkConf.set("spark-config-key","spark-config-value")
val sparkSession = SparkSession
    .builder
    .config(sparkConf)
    .enableHiveSupport()
    .getOrCreate()

//注意,因为一个Spark项目中只允许定义一个spark上下文,所以,后面用于广播变量的sparkContext只能从前面定义的sparkSession中获取,以保证不出现两个两个上下文定义
val sparkContext = sparkSession.getSparkContext

val broadcastUse = sparkContext.broadcast(useValue)

println(s"此次广播变量的内容为${broadcastUse.value}")

广播变量使用心得

上一篇下一篇

猜你喜欢

热点阅读