[Flink基础]-- Flink DataSource 有哪些?

前言

不同 Flink 的 API 拥有不同或者相同的 Data source,那么在此针对于 Flink -1.8.0 版本,总结下 它的 DataSource ,希望能对小伙伴们有帮助。

内容

DataStream API

  1. 内置source
  • 基于 Socket
 socketTextStream - 从端口中读取。元素可以用分隔符分隔。
  • 基于 集合
   fromCollection(Collection) - 从Java Java.util.Collection创建数据流。集合中的所有元素必须属于同一类型。
   fromCollection(Iterator, Class) - 从迭代器创建数据流。该类指定迭代器返回的元素的数据类型。
   fromElements(T ...) - 从给定的对象序列创建数据流。所有对象必须属于同一类型。
   fromParallelCollection(SplittableIterator, Class) - 并行地从迭代器创建数据流。该类指定迭代器返回的元素的数据类型。
   generateSequence(from, to) - 并行生成给定间隔中的数字序列。
  • 基于 File
    1. readTextFile(path)- TextInputFormat逐行读取文本文件,即符合规范的文件,并将它们作为字符串返回。
    2. readFile(fileInputFormat, path) - 按指定的文件输入格式指定读取(一次)文件。
    3. readFile(fileInputFormat, path, watchType, interval, pathFilter, typeInfo) - 这是前两个内部调用的方法。它path根据给定的内容读取文件fileInputFormat。根据提供的内容watchType,此源可以定期监视(每intervalms)新数据(FileProcessingMode.PROCESS_CONTINUOUSLY)的路径,或者处理当前在路径中的数据并退出(FileProcessingMode.PROCESS_ONCE)。使用pathFilter,用户可以进一步排除正在处理的文件。
      • 实现
        在引擎盖下,Flink将文件读取过程分为两个子任务,即目录监控和数据读取。这些子任务中的每一个都由单独的实体实现。监视由单个非并行(并行性= 1)任务实现,而读取由并行运行的多个任务执行。后者的并行性等于工作并行性。单个监视任务的作用是扫描目录(定期或仅一次,具体取决于watchType),找到要处理的文件,将它们分成分割,并将这些拆分分配给下游读者。读者是那些将阅读实际数据的人。每个分割仅由一个读取器读取,而读取器可以逐个读取多个分割。

      • 注意

      1. 如果watchType设置为FileProcessingMode.PROCESS_CONTINUOUSLY,则在修改文件时,将完全重新处理其内容。这可以打破“完全一次”的语义,因为在文件末尾附加数据将导致其所有内容被重新处理。
      2. 如果watchType设置为FileProcessingMode.PROCESS_ONCE,则源扫描路径一次并退出,而不等待读者完成读取文件内容。当然读者将继续阅读,直到读取所有文件内容。在该点之后关闭源将导致不再有检查点。这可能会导致节点故障后恢复速度变慢,因为作业将从上一个检查点恢复读取。
  1. 用户自定义
- addSource - 用户可以通过 *StreamExecutionEnvironment.addSource(sourceFunction)* 添加自定义source 。
  例如,要从Apache Kafka读取,您可以使用 addSource(new FlinkKafkaConsumer08<>(...))

DataSet API

  1. 内置 source
  • 基于文件

    1. readTextFile(path) // TextInputFormat- 按行读取文件并将其作为字符串返回。
    2. readTextFileWithValue(path) // TextValueInputFormat- 按行读取文件并将它们作为StringValues返回。StringValues是可变字符串。
    3. readCsvFile(path) // CsvInputFormat- 解析逗号(或其他字符)分隔字段的文件。返回元组或POJO的DataSet。支持基本的java类型及其Value对应的字段类型。
    4. readFileOfPrimitives(path, Class) // PrimitiveInputFormat- 解析新行(或其他字符序列)分隔的原始数据类型(如String或)的文件Integer。
    5. readFileOfPrimitives(path, delimiter, Class) // PrimitiveInputFormat- 解析新行(或其他字符序列)分隔的原始数据类型的文件,例如String或Integer使用给定的分隔符。
  • 基于集合

    1. fromCollection(Collection) - 从Java Java.util.Collection创建数据集。集合中的所有元素必须属于同一类型。
    2. fromCollection(Iterator, Class) - 从迭代器创建数据集。该类指定迭代器返回的元素的数据类型。
    3. fromElements(T …) - 根据给定的对象序列创建数据集。所有对象必须属于同一类型。
    4. fromParallelCollection(SplittableIterator, Class) - 并行地从迭代器创建数据集。该类指定迭代器返回的元素的数据类型。
    5. generateSequence(from, to) - 并行生成给定间隔中的数字序列。
  • 通用

  1. readFile(inputFormat, path)/ FileInputFormat- 接受文件输入格式。
  2. createInput(inputFormat)/ InputFormat- 接受通用输入格式。
  3. 用户自定义
    暂无

参考

发布了508 篇原创文章 · 获赞 613 · 访问量 201万+

猜你喜欢

转载自blog.csdn.net/high2011/article/details/94139142