[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. 用戶自定義
    暫無

參考

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章