Flink_数据输出 Data Sinks


flink 在批处理中常见的 sink

  1. 基于本地集合的 sink(Collection-based-sink)
  2. 基于文件的 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)
  }
}

猜你喜欢

转载自blog.csdn.net/qq_44509920/article/details/107435871