第 21 节 Flink Distributed Cache(分布式缓存)

上篇:第 20 节 Flink Counters(scala)


1、Flink Broadcast和Accumulators的区别

  1. Broadcast(广播变量)允许程序员将一个只读的变量缓存在每台机器上,而不用在任务之间传递变量。广播变量可以进行共享,但是不可以进行修改
  2. Accumulators(累加器)是可以在不同任务中对同一个变量进行累加操作。

2、Flink Distributed Cache(分布式缓存)

Flink提供了一个分布式缓存,类似于hadoop,可以使用户在并行函数中很方便的读取本地文件
此缓存的工作机制如下:程序注册一个文件或者目录(本地或者远程文件系统,例如hdfs或者s3),通过ExecutionEnvironment注册缓存文件并为它起一个名称。当程序执行,Flink自动将文件或者目录复制到所有taskmanager节点的本地文件系统,用户可以通过这个指定的名称查找文件或者目录,然后从taskmanager节点的本地文件系统访问它

用法

1:注册一个文件
env.registerCachedFile(“hdfs:///path/to/your/file”, “hdfsFile”)

2:访问数据
File myFile = getRuntimeContext().getDistributedCache().getFile(“hdfsFile”);


3、代码实现:

package cache

import org.apache.commons.io.FileUtils
import org.apache.flink.api.common.functions.RichMapFunction
import org.apache.flink.api.scala.ExecutionEnvironment
import org.apache.flink.configuration.Configuration


/**
 * Flink Distributed Cache(分布式缓存)
 */
object BatchDemoDisCacheScala {
  def main(args: Array[String]): Unit = {
    //获取flink的运行环境
    val env = ExecutionEnvironment.getExecutionEnvironment
    //隐式转化
    import org.apache.flink.api.scala._

    //1、注册文件
    env.registerCachedFile("d:\\data\\file\\a.txt","b.txt")

    val data = env.fromElements("a", "b", "c", "d")

     val result=  data.map(new RichMapFunction[String,String] {

      override def open(parameters: Configuration): Unit = {
        super.open(parameters)
        val myfile = getRuntimeContext.getDistributedCache.getFile("b.txt")
        val lines = FileUtils.readLines(myfile)
        val it=lines.iterator()
        while (it.hasNext){
          val line = it.next()
          println("line:"+line)
        }

      }

      override def map(value: String): String = {
        value
      }
    })

    result.print()
    }
}

启动idea的代码程序,控制台打印信息:

在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值