美文网首页
flink 广播变量

flink 广播变量

作者: 邵红晓 | 来源:发表于2019-10-12 19:08 被阅读0次
  • 使用
 //1.1处理需要广播的数据
    val tupleData = env.fromCollection(broadData)
    val toBroadcastData = tupleData.map(tup=>{
      Map(tup._1->tup._2)
    })

    val text = env.fromElements("zs","ls","ww")

    val result = text.map(new RichMapFunction[String,String] {
      //获取广播变量,坑
      var listData: java.util.List[Map[String,Int]] = null
      var allMap  = Map[String,Int]()
      override def open(parameters: Configuration): Unit = {
        super.open(parameters)
        //注意指定类型,坑
        this.listData = getRuntimeContext.getBroadcastVariable[Map[String,Int]]("broadcastMapName")
        val it = listData.iterator()
        while (it.hasNext){
          val next = it.next()
          allMap = allMap.++(next)
        }
      }
      override def map(value: String) = {
        val age = allMap.get(value).get
        value+","+age
      }

    }).withBroadcastSet(toBroadcastData,"broadcastMapName")

注意

  1. 广播变量是只读状态
  2. 广播状态中事件的顺序在各个并发实例中可能不尽相同,因此不能依赖广播数据得顺序
  3. 所有 operator task 都会快照下他们的广播状态
    在 checkpoint 时,所有的 task 都会 checkpoint 下他们的广播状态,并不仅仅是其中一个,即使所有 task 在广播状态中存储的元素是一模一样的。这是一个设计倾向,为了避免在恢复期间从单个文件读取而造成热点。然而,随着并发度的增加,checkpoint 的大小也会随之增加,这里会存在一个并发因子 p 的权衡。Flink 保证了在恢复/扩缩容时不会出现重复数据和少数据。在以相同或更小并行度恢复时,每个 task 会读取其对应的检查点状态。在已更大并行度恢复时,每个 task 读取自己的状态,剩余的 task (p_new-p_old)会以循环方式(round-robin)读取检查点的状态。
  4. 广播状态目前在运行时保存在内存中,因为当前,RocksDB 状态后端还不适用于 operator state。Flink 用户应该相应地为其应用程序配置足够的内存。

相关文章

  • flink 广播变量

    使用 注意 广播变量是只读状态 广播状态中事件的顺序在各个并发实例中可能不尽相同,因此不能依赖广播数据得顺序 所有...

  • Flink 广播变量

    简介 在Flink中,同一个算子可能存在若干个不同的并行实例,计算过程可能不在同一个Slot中进行,不同算子之间更...

  • flink广播变量案例

    有些实用性质了,书上的代码关联数据还没有下载下来,等下载下来再调试。 求取订单对应的商品,将订单和商品数据合并成一...

  • 9-Flink广播变量

    戳更多文章: 1-Flink入门 2-本地环境搭建&构建第一个Flink应用 3-DataSet API 4-Da...

  • 第一章 初识flink - flink命令的简单使用

    配置flink的环境变量 flink命令位于flink目录中的bin目录下, 经常使用的话可以把目录配置到环境变量...

  • [Flink BroadcastStream]Flink实战广播

    广播状态被引入以支持这样的用例:来自一个流的一些数据需要广播到所有下游任务,在那里它被本地存储,并用于处理另一个流...

  • 广播变量

    从 mysql 读取数据作为广播变量时, 虽然有 checkpoint 但是 kill 掉任务后,重启程序会失败。

  • 共享变量:广播变量

    一、使用场景如果我们要在分布式计算里面分发大对象(如:字典,集合,黑白名单等),由Driver端进行分发。如果这个...

  • Spark的广播变量机制

    Spark广播变量 什么是广播变量? 在同一个Execute共享同一份计算逻辑的变量 广播变量使用场景 我现在要在...

  • Spark之广播变量

    什么是广播变量 广播变量:分布式共享只读变量。广播变量用来高效分发较大的对象。向所有工作节点发送一个较大的只读值,...

网友评论

      本文标题:flink 广播变量

      本文链接:https://www.haomeiwen.com/subject/mercmctx.html