flink 在批处理中常见的 sink
- 基于本地集合的 sink(Collection-based-sink)
- 基于文件的 sink(File-based-sink)
1.基于本地集合的 sink(Collection-based-sink)
package com.czxy.flink.batch.sink
import org.apache.flink.api.scala.ExecutionEnvironment
import org.apache.flink.core.fs.FileSystem.WriteMode
//基于本地集合的sink
object BatchSinkCollection {
def main(args: Array[String]): Unit = {
//1.创建执行环境
val env: ExecutionEnvironment = ExecutionEnvironment.getExecutionEnvironment
//2.构建数据集
import org.apache.flink.api.scala._
val source: DataSet[(Int, String, Double)] = env.fromElements(
(19, "zhangsan", 178.8),
(17, "lisi", 168.8),
(18, "wangwu", 184.8),
(21, "zhaoliu", 164.8)
)
//3.数据打印
source.print()
println(source.collect())
source.printToErr()
}
}
2 .基于文件的 sink(File-based-sink)
flink 支持多种存储设备上的文件,包括本地文件,hdfs 文件等。
flink 支持多种文件的存储格式,包括 text 文件,CSV 文件等。
writeAsText():TextOuputFormat - 将元素作为字符串写入行。
字符串是通过调用每个元 素的 toString()方法获得的。
2.1 将数据写入本地文件/将数据写入 HDFS
import org.apache.flink.api.scala.ExecutionEnvironment
import org.apache.flink.core.fs.FileSystem.WriteMode
//基于文件的 sink
object BatchSinkFile {
def main(args: Array[String]): Unit = {
//1.创建执行环境
val env: ExecutionEnvironment = ExecutionEnvironment.getExecutionEnvironment
//2.构建数据集
import org.apache.flink.api.scala._
val source: DataSet[(Int, String, Double)] = env.fromElements(
(19, "zhangsan", 178.8),
(17, "lisi", 168.8),
(18, "wangwu", 184.8),
(21, "zhaoliu", 164.8)
)
//保存到本地文件
// source.writeAsText("day02/data/output/sinkLocalFile").setParallelism(1)
//保存到HDFS文件中
source.writeAsText("hdfs://node01:8020/test/output/sinkHDFSFile0708",WriteMode.OVERWRITE).setParallelism(1)
env.execute(this.getClass.getSimpleName)
}
}