日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Flink批处理优化器之数据属性

發布時間:2024/1/17 编程问答 46 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Flink批处理优化器之数据属性 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在一段時間之前我們已介紹過IP(Interesting Property)對于優化器的意義以及它將對優化器的優化決策產生的影響。本篇我們將介紹Flink的批處理優化器中涉及到的所有的IP,我們將其統稱為數據屬性。后續我們會介紹Flink如何為優化器節點計算IP,并在之后的“剪枝”(pruning)階段發揮作用。

數據屬性

數據屬性是個統稱,來自于Flink優化器模塊定義的子包名:dataproperties,需要注意的是這里屬性的含義不是代碼實現層面上類里的屬性,而是指代對優化器的優化決策產生影響的一種指標。所以這里的屬性對應到代碼中的類。總體而言,有兩類屬性:

  • 本地屬性:用于表述對本地處理的任務(如,排序)產生影響的屬性;
  • 全局屬性:用于表述對跨分區的數據傳輸(如,廣播、哈希分區等)產生影響的屬性;

再結合是否不可或缺,又可進一步細分為:

  • LocalProperties:本地屬性;
  • GlobalProperties:全局屬性;
  • RequestedLocalProperties:必不可少的本地屬性,是本地屬性的子集,一旦缺少會導致對程序錯誤地優化并返回錯誤的結果;
  • RequestedGlobalProperties:必不可少的全局屬性,是全局屬性的子集,一旦缺少會導致對程序錯誤地優化并返回錯誤的結果;

另外的兩個額外的屬性:

  • InterestingProperties:它就是我們常說的IP,是一個屬性容器類,包含了一系列的RequestedLocalProperties和RequestedGlobalProperties集合。IP將直接對優化器尋找最優計劃產生影響,它將會從父運算符傳遞給子運算符(以sink為頂點的倒置的遍歷樹),并告知子運算符哪些屬性可以幫助它獲得最廉價的執行方案。例如,一個Reduce運算符,將告訴其子運算符分區信息,如果子運算符是join,那么它將根據獲得的信息,保留數據分區形式并選擇更合適的執行策略。
  • PartitioningProperty:分區屬性,枚舉了所有被支持的分區類型;

以上這些屬性類之間的關聯關系如下圖所示:

接下來我們會對以上這些屬性類中的關鍵字段進行解讀。

  • LocalProperties
屬性類型描述
ordering(*)Ordering一個分區內部的排序方式
groupedFields(*)FieldList用于分組的字段集
uniqueFieldsSet<FieldSet>在合并時值唯一的字段

* GlobalProperties

屬性類型描述
partitioning(*)PartitioningProperty表示分區類型的屬性
partitioningFields(*)FieldList分區的字段
ordering(*)Ordering如果分區方式為范圍分區,該字段表示分區字段的排序順序
uniqueFieldCombinationsSet<FieldSet>在合并時值唯一的字段
customPartitioner(*)Partitioner<?>當partitioning指定為CUSTOM_PARTITIONING時,使用的分區器
distribution(*)DataDistribution數據分布對象,當分區類型為RANCE_PARTITION時需要設置

上面兩個表格中,被標記為”*”的屬性,就是RequestedLocalProperties和RequestedGlobalProperties中的屬性。

而InterestingProperties由RequestedLocalProperties以及RequestedGlobalProperties屬性集合組成:

屬性類型描述
localPropsSet<RequestedLocalProperties>必備的本地屬性集合
globalPropsSet<RequestedGlobalProperties>必備的全局屬性集合

PartitioningProperty類枚舉了跨分區或并行工作節點之間數據的shuffle形式:

  • ANY_DISTRIBUTION:任何可能的數據分布形式,包括隨機分區和完全復制;
  • RANDOM_PARTITION:一種隨機性的非復制型的數據分布方式;
  • HASH_PARTITION:基于給定鍵的哈希分區方式;
  • RANGE_PARTITION:基于特定鍵的范圍分區方式;
  • ANY_PARTITIONING:不在鍵上指定明確的分區方式;
  • FULL_REPLICATION:將數據完全復制到每個并行的實例上去;
  • FORCED_REBALANCED:強制重平衡,盡量保證每個分區上數據記錄的均等;
  • CUSTOM_PARTITIONING:自定義分區,可通過分區器(Partitioner)指定;

對于這些枚舉值,哪些是事實上真正意義的分區呢?PartitioningProperty提供了一個isPartitioned方法來進行判斷:

public boolean isPartitioned() { return this != FULL_REPLICATION && this != FORCED_REBALANCED && this != ANY_DISTRIBUTION; }

從代碼段中可見,非FULL_REPLICATION、非FORCED_REBALANCED以及非ANY_DISTRIBUTION,其余的都被認為是真正意義上的分區。


原文發布時間為:2017-04-09 本文作者:vinoYang 本文來自云棲社區合作伙伴CSDN博客,了解相關信息可以關注CSDN博客。

總結

以上是生活随笔為你收集整理的Flink批处理优化器之数据属性的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。