六、Doris數據流與控制流


目錄:

  • 數據查詢
  • 數據導入
  • 元數據修改 

 

1、查詢


用戶可使用MySQL客戶端連接FE,執行SQL查詢, 獲得結果,查詢流程如下:

分步說明:

  • ① MySQL客戶端執行DQL SQL命令。
  • FE解析, 分析, 改寫, 優化和規划, 生成分布式執行計划。
  • ③ 分布式執行計划由 若干個可在單台be上執行的plan fragment構成, FE執行exec_plan_fragment, 將plan fragment分發給BE,並指定其中一台BE為coordinator。
  • ④ BE執行本地計算, 比如掃描數據。
  • ⑤ 其他BE調用transimit_data將中間結果發送給BE coordinator節點匯總為最終結果。
  • ⑥ FE調用fetch_data獲取最終結果。
  • ⑦ FE將最終結果發送給MySQL client。

執行計划在BE上的實際執行過程比較復雜, 采用向量化執行方式,比如一個算子產生4096個結果,輸出到下一個算子參與計算,而非batch方式或者one-tuple-at-a-time。

 

數據導入 


用戶創建表之后, 導入數據填充表

  • 支持導入數據源有: 本地文件, HDFS, Kafka和S3
  • 支持導入方式有: 批量導入, 流式導入
  • 支持的數據格式有: CSV, Parquet, ORC等.
  • 導入發起方式有: 用RESTful接口, 執行SQL命令.

數據導入的流程圖:

分步解釋:

  • 用戶選擇一台BE作為協調者, 發起數據導入請求, 傳入數據格式, 數據源和標識此次數據導入的label, label用於避免數據重復導入. 用戶也可以向FE發起請求, FE會把請求重定向給BE.
  • BE收到請求后, 向FE master節點上報, 執行loadTxnBegin, 創建全局事務。 因為導入過程中, 需要同時更新base表和物化索引的多個bucket, 為了保證數據導入的一致性, 用事務控制本次導入的原子性.
  • ③ BE創建事務成功后, 執行streamLoadPut調用, 從FE獲得本次數據導入的計划. 數據導入, 可以看成是將數據分發到所涉及的全部的tablet副本上, BE從FE獲取的導入計划包含數據的schema信息和tablet副本信息.
  • BE從數據源拉取數據, 根據base表和物化索引表的schema信息, 構造內部數據格式.
  • ⑤ BE根據分區分桶的規則和副本位置信息, 將發往同一個BE的數據, 批量打包, 發送給BE, BE收到數據后, 將數據寫入到對應的tablet副本中.
  • 當BE coordinator節點完成此次數據導入, 向FE master節點執行loadTxnCommit, 提交全局事務, 發送本次數據導入的 執行情況, FE master確認所有涉及的tablet的多數副本都成功完成, 則發布本次數據導入使數據對外可見, 否則, 導入失敗, 數據不可見, 后台負責清理掉不一致的數據.

 

3、更改元數據


 更改元數據的操作有: 創建數據庫, 創建表, 創建物化視圖, 修改schema等等. 這樣的操作需要:

  • 持久化到永久存儲的設備上;
  • 保證高可用, 復制FE多實例上, 避免單點故障;
  • 有的操作需要在BE上生效, 比如創建表時, 需要在BE上創建tablet副本.

元數據的更新操作流程如下:

分步解釋:

  • ① 用戶使用MySQL client執行SQL的DDL命令, 向FE的master節點發起請求; 比如: 創建表.
  • FE檢查請求合法性, 然后向BE發起同步命令, 使操作在BE上生效; 比如: FE確定表的列類型是否合法, 計算tablet的副本的放置位置, 向BE發起請求, 創建tablet副本.
  • ③ BE執行成功, 則修改內存的Catalog. 比如: 將table, partition, index, tablet的副本信息保存在Catalog中.
  • ④ FE追加本次操作到EditLog並且持久化.
  • ⑤ FE通過復制協議將EditLog的新增操作項同步到FE的follower節點.
  • ⑥ FE的follower節點收到新追加的操作項后, 在自己的Catalog上按順序播放, 使得自己狀態追上FE master節點.

上述執行環節出現失敗, 則本次元數據修改失敗.

 

參考:



免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM