天天看點

Dremio架構分析

一.Dremio架構

Dremio是基于Apache calcite、Apache arrow和Apache parquet3個開源架構建構,結構其核心引擎Sabot,形成這款DaaS(Data-as-a-Service)資料即服務平台;整體體驗風格與其公司開源的Apache Drill非常接近。

Ⅰ).架構圖

Dremio架構分析
Dremio架構分析

Ⅱ).參考API

Dremio架構分析

Ⅲ).參考SQL

Dremio架構分析

二.Apache Arrow

Apache Arrow是基于Apache Drill中的Value Vector來實作的,而使用Value Vector可以減少運算時重複通路資料帶來的成本,其特點:

  1. 零拷貝共享記憶體和基于RPC的資料移動
  2. 讀寫檔案格式(如CSV,Apache ORC和Apache Parquet)
  3. 記憶體分析和查詢處理

Ⅰ).公共資料層

Apache Arrow的功能設計思路有點類似于擴充卡模式,将不同系統的資料源進行統一适配。

a).不使用Arrow

  1. 每個系統都有自己的内部存儲器格式
  2. 在序列化和反序列化上浪費了70-80%的計算量
  3. 在多個項目中實作的類似功能
    Dremio架構分析

b).使用Arrow

  1. 所有系統都使用相同的記憶體格式
  2. 沒有跨系統通信的開銷
  3. 項目可以共享功能
    Dremio架構分析

Ⅱ).列式存儲

傳統的記憶體資料格式是以每一行作為各個字段的分布,相同字段沒有被集中在一起,造成了計算時的不必要浪費;Apache Arrow通過列式存儲格式限制,将相同字段集中排列在一起,提高了過濾查詢的響應

Dremio架構分析

如下例子:

a).資料

people=[
    {
        "name": "mary",
        "age": 30,
        "placed_lived": [
            {
                "city": "Akron",
                "state": "OH"
            },
            {
                "city": "Bath",
                "state": "OH"
            }
        ]
    },
    {
        "name": "mary",
        "age": 31,
        "placed_lived": [
            {
                "city": "Lodi",
                "state": "OH"
            },
            {
                "city": "Ada",
                "state": "OH"
            },
            {
                "city": "Akron",
                "state": "OH"
            }
        ]
    }
]           

b).存儲結構

placed_lived offsets: 存儲的起始位置是0,其中第一個人有2個city,是以為0~2;第二個人有3個city,是以為3~5

city offsets: 存儲的起始位置是0,其中第一個人的第一個city是Akron,是以為0~5,以此類推,即可知offsets位置

city Data: 即為實際資料存儲位置

Dremio架構分析

三.Apache Parquet

Apache Parquet是一種面向分析的、通用的列式存儲格式,相容各種資料處理架構比如 Spark、Hive、Impala 等,同時支援 Avro、Thrift、Protocol Buffers 等資料模型。

Ⅰ).Parquet主要子產品

  1. parquet-format:定義了所有格式規範,以及由 Thrift 序列化的中繼資料資訊
  2. parquet-mr:實作讀寫 Parquet 檔案的功能子產品,與其他元件的适配工具,如Hadoop Input/Output Formats、Pig loaders 、Hive Serde 等
  3. parquet-cpp:用于讀寫Parquet檔案的C ++庫
  4. parquet-rs:用于讀寫Parquet檔案的Rust 庫
  5. parquet-compatibility:驗證不同語言之間讀寫 Parquet 檔案的相容性測試

Ⅱ).資料存儲格式

Parquet檔案結構

  1. File:一個 Parquet 檔案,包括資料和中繼資料
  2. Row group:資料在水準方向上按行拆分為的單元
  3. Column:一個行組中的每一列對應的儲存在一個列塊中
  4. Page:每一個列塊劃分為多個資料頁,同一個列塊的不同頁可能使用不同的編碼格式
Dremio架構分析

Ⅲ).中繼資料

中繼資料包括如下3部分
  1. file metadata
  2. column (chunk) metadata
  3. page header metadata
    Dremio架構分析

四.Apache Calcite

Apache Calcite 是一款開源SQL解析工具, 可以将各種SQL語句解析成抽象文法術AST(Abstract Syntax Tree), 之後通過操作AST就可以把SQL中所要表達的算法與關系展現在具體代碼之中

Ⅰ).Calcite 主要元件

  1. Catelog: *定義SQL語義相關的中繼資料與命名空間
  2. SQL parser: 主要是把SQL轉化成AST
  3. SQL validator: 通過Catalog來校證AST
  4. Query optimizer: 将AST轉化成實體執行計劃、優化實體執行計劃
  5. SQL generator: 反向将實體執行計劃轉化成SQL語句

Ⅱ).Calcite 主要功能

  1. SQL 解析
  2. SQL 校驗
  3. 查詢優化
  4. SQL 生成器
  5. 資料連接配接

五.Apache Drill

Apache Drill是用于大規模資料集的低延遲分布式SQL查詢引擎,包括結構化和半結構化/嵌套資料

Ⅰ).Drill核心子產品

  1. RPC端點: Drill公開了一個低開銷的基于protobuf的RPC協定,以與用戶端進行通信
  2. SQL解析器: Drill使用開源SQL解析器架構Calcite來解析傳入的查詢
  3. 存儲插件界面: Drill充當多個資料源之上的查詢層,存儲插件為Drill提供以下資訊
  • a).資料源的的中繼資料
  • b).Drill用于讀取和寫入資料源的接口
  • c).資料的位置和一組優化規則,以幫助在特定資料源上高效,快速地執行Drill查詢
Dremio架構分析

Ⅱ).Drill查詢

  1. 用戶端或應用程式會以SQL語句的形式将查詢發送到Drill叢集中的Drillbit,Drill無主從概念
  2. 接受查詢的Drill節點成為Foreman,Foreman驅動整個查詢
  3. Foreman解析器解析SQL,并根據SQL運算符形成邏輯計劃
  4. Foreman優化器使用各種類型的規則把操作符和函數重新排列為最佳計劃後,将邏輯計劃轉換為執行查詢的實體計劃
  5. Foreman中的并行化程式将實體計劃轉換為多個片段,片段建立了一個多級執行樹
  6. 查詢根據執行樹在資料源并行執行,并将結果發送回用戶端或應用程式
Dremio架構分析

Ⅲ).Drill特點

  1. 低延遲SQL查詢
  2. 動态查詢檔案(如JSON,Parquet,AVRO和NoSQL)和HBase表中的自描述資料,無需Hive Metastore中的中繼資料定義
  3. 嵌套資料支援
  4. 與Apache Hive內建(對Hive表和視圖的查詢,對所有Hive檔案格式和Hive UDF的支援)
  5. 使用标準JDBC / ODBC驅動程式進行BI / SQL工具內建

六.使用案例

a).hive資料分析

Dremio案例_Hive資料分析

b).hdfs資料分析

Dremio案例_HDFS檔案資料分析

c).本地Json檔案資料分析

Dremio案例_本地Json檔案資料分析

d).Elasticserch資料分析

Dremio案例_Elasticserch資料分析