Flink 提供了一个分布式缓存,类似于Apache Hadoop,可以在本地访问用户函数的并行实例。此函数可用于共享包含静态外部数据的文件,如字典或机器学习的回归模型。
缓存的工作原理如下。程序在其作为缓存文件的特定名称下注册本地或远程文件系统(如 HDFS 或 S3)的文件或目录 ExecutionEnvironment
。执行程序时,Flink 会自动将文件或目录复制到所有工作程序的本地文件系统。用户函数可以查找指定名称下的文件或目录,并从 worker 的本地文件系统访问它。
其实分布式缓存就相当于 spark 的广播,把一个变量广播到所有的 executor 上,也可以看做是 Flink 的广播流,只不过这里广播的是一个文件.
分布式缓存使用如下:
注册中的文件或目录 ExecutionEnvironment
。
val env = ExecutionEnvironment.getExecutionEnvironment
// register a file from HDFS
env.registerCachedFile("hdfs:///path/to/your/file", "hdfsFile")
// register a local executable file (script, executable, ...)
env.registerCachedFile("file:///path/to/exec/file", "localExecFile", true)
// define your program and execute
...
val input: DataSet[String] = ...
val result: DataSet[Integer] = input.map(new MyMapper())