Pinot架構介紹,pinot架構

來源:互聯網
上載者:User

Pinot架構介紹,pinot架構
1. High Level Architecture
1. 目的:對給定資料集提供分析服務
2. 輸入資料:Hadoop & Kafka
3. 索引技術:為了提供快速的查詢,Pinot 採用列式儲存以及各種索引技術(bitmap,inverted index)2. Data Flow2.1 Hadoop (Historical)
1. 輸入資料:AVRO, CSV, JSON等;
2. 處理流程:在HDFS上的檔案通過MR任務將資料變成有索引的Segment,然後推送到Pinot的叢集的曆史節點,去提供Query的能力;
3. 資料失效:有索引的Segment可以配置保留日期,在預先配置的失效日期之後被自動的刪除;2.2 Realtime
1. 輸入資料:Kafka stream
2. 處理流程:即時資料節點通過消費 Kafka 的資料,在記憶體中產生帶有索引的 Segment,並周期性的 flush 到磁碟,然後提供查詢的功能;
3. 資料失效:即時節點的資料的保留日期會相對比較短,比如保留3天的資料,即時節點的資料在時效前會儲存到曆史節點中;
2.3 Query routing這條查詢語句:select count(*) from table where time > T轉化為下面兩跳查詢語句:
1. historical node: select count(*) from table where time > T and time < T1
2. realtime node: select count(*) from table where time > T1
note:1. 使用者的所有的查詢會發送到 Pinot Broker;
2. 使用者並不需要關心查詢是被發往即時還是曆史節點;
3. Pinot Broker 會根據 Query 的情況自動的將請求切分然後按照需要發送給即時節點和曆史節點;
4. 最後能夠將結果進行自動的合并;
3. Pinot Components Architecture
note:1. 整個系統利用 Apache Helix 作為叢集的管理;
2. 利用 Zookeeper 儲存叢集的狀態,同時儲存 Helix 和 Pinot 的配置;
3. Pinot 利用 NFS 來將在 HDFS 上用 MR 產生的 Segment 推到 PinotServer。
3.1 Historical Node
3.1.1 Data Preparation1. 帶有索引的 Segment 在 Hadoop 中被建立
2. Pinot 團隊提供了產生 Segment 的 Library
3. 資料格式可以是AVRO, CSV, JSON
3.1.2 Segment creation on Hadoop1. HDFS 中的資料被分成256/512MB 的分區
2. 每一個 mapper 將一個分區產生一個新的帶有索引的 Segment
3.1.3 Segment move from HDFS to NFS1. 從 HDFS 讀取資料,通過 httppost 送到 Pinot Controller 節點
2. PinotController 會將 Segment 儲存在 mount 在Pinot Controller 節點上的 NFS 中
3. 然後 Pinot Controller 會將 Segment 分配給一個 Pinot Server 
4. 分配的相關資訊則是由 Helix 來維護和管理
3.1.4 Segment move from NFS to Historical Node1. Helix會監控 Pinot Server 的存活狀態
2. 當一個 Server 啟動時,Helix 會通知 Pinot Server 分配給該 Server 的Segment
3. Pinot Server 從Controller Server 下載 Segment 並且裝入到本地的磁碟中
3.1.5 Segment Loading1. 解壓縮的 Segment 中包含中繼資料以及每列的正排和倒排索引
2. 然後根據裝載模式(memory, mmap),裝載到記憶體或是被mmap到伺服器
3. 裝載完成之後,Helix 會通知 Broker 節點該 Segment 可以在該伺服器被使用,Broker 會在查詢時將查詢路由到該伺服器
3.1.6 Segment Expiry1. Pinot 控制服務有一個後台清理線程去根據中繼資料刪除到期的 Segment
2. 刪除 Segment 會清理掉 Controller 服務中 NFS 上的資料,以及 Helix 服務上的中繼資料資訊
3. Helix 會通知 Pinot Server 對 Segment 進行線上離線切換,將 Segment 變為離線狀態,然後變為刪除狀態,從本地磁碟刪掉資料
note:1. hadoop   jar   pinot-hadoop-0.016.jar   SegmentCreation   job.properties
2. hadoop   jar   pinot-hadoop-0.016.jar   SegmentTarPush   job.properties 
3. Segment 裝載過程是由 Helix 觸發的離線線上切換3.2 Real time Node
3.2.1 Kafka consumption1. Pinot 建立一個 resource,Pinot 會分配一組執行個體從Kafka topic 消費資料
2. 如果 Pinot Server 掛掉,這個消費會被從新分布到其他的節點
3.2.2 Segment creation1. 當 Pinot Server 消費了預先配置好數量的事件後,會在記憶體中將資料轉變為離線 Segment
2. 當 Segment 建立成功後,Pinot 提交 offset 到 Kafka,如果失敗,Pinot 會從上次的 checkpoint 重建 Segment
3.2.3 Segment Expiry1. 只能配置到天,失效之後 Segment 從即時節點分發到曆史節點
note:即時節點產生的 Segment 的格式和曆史節點產生 Segment 格式相同,從而方便 segment 從即時節點到曆史節點的重新分發。
3.3 Pinot Cluster Management
3.3.1 概述1. 所有的管理命令都需要通過 Pinot Controller,比如這些命令:allocating Pinot Server and Brokers, Creating New Table, Uploading New Segments
2. 所有的 Pinot admin cmd 都需要在內部通過 Helix Admin Api 翻譯成 Helix cmd,然後 Helix cmd 修改 Zookeeper 中的中繼資料
3. Helix Controller 作為系統的大腦,將中繼資料的變化轉義成一個 action set,並在對應的 participant 上執行相應的 action
4. Helix Controller 還負責監控 Pinot Server,當 Pinot Server 啟動或是掛掉的時候,Helix Controller 發現並修改對應的 external view,Pinot Broker 觀察到觀察這些變化,並隨之動態更改 table 的路由
3.3.2 術語對應1. Pinot Segment:對應 Helix Partition,每一個 Segment 都有多分拷貝
2. Pinot Table:由多個 Segment 組成,隸屬於同一個 Table 的 Segment 具有同一個 Schema
3. Pinot Server:對應 Helix Participant,主要用於儲存 Segment
4. Pinot Broker:對應 Helix Spectator,用於觀察 Segment 和 Pinot Server 的狀態的變化。為了支援多租戶,Pinot Broker 也作為 Helix Participant
3.3.3 Zookeeper主要用於儲存叢集的狀態,同時也用於儲存 Helix 和 Pinot 的一些配置
3.3.4 Broker Node主要負責將用戶端請求的 query 路由到 Pinot Server 執行個體上,收集 Pinot Server 的返回結果,最後合并成最終結果,返回給用戶端。功能有:
1. service discovery:感知 Server、Table、Segment、Time range,計算 query 的執行路由2. Scatter gather:將 query 分發到對應的 Server,將每個 Server 返回的結果合并成,返回給用戶端 Pinot Broker 實現了多種選擇 Pinot Server 的策略:Segment 均勻分布策略、貪心演算法策略(最大/小 Pinot Server 參與)、隨機播放 segment 的 Server。如果 Pinot Server 執行失敗或逾時,Pinot Broker 只能返回部分結果,未來通過支援其他的方式,比如 re-try 或者將相同的執行計畫發給多個 segment 副本
4. Pinot Index Segment
4.1 行式儲存和列式儲存的區別4.1.1 行式儲存特點1. OLTP2. 一整行資料被儲存在一起3. INSERT/UPDATE容易4.1.2 列式儲存特點1. OLAP
2. 查詢時只有涉及到的列會被讀取
3. 任何列都能作為索引:fixed length index、sparse index等
4. 易於壓縮
5. 配合 bitmap 可以提高查詢執行效能4.2 Anatomy of Index Segment4.2.1 Segment Entities1. Segment Metadata :主要定義 Segment 的中繼資料資訊,包括:
segment.name
segment.table.name
segment.dimension.column.names
segment.metric.column.names
segment.time.column.name
segment.time.interval
segment.start.time/segment.end.time
segment.time.unit
......
2. Column Metadata,包括:column..cardinality
column..totalDocs
column..dataType: INT/FLOAT/STRING 
column..lengthOfEachEntry
column..columnType: Dimension/Metric/Time
column..isSorted
column..hasDictionary
column..isSingleValues
......
3. Creation Metadata (creation.meta),包括:Dictionary (.dict):列的編碼字典
Forward Index (.sv.sorted.fwd): Single Value Sorted Forward Index,首碼壓縮索引
5. Query Processing

5.1 Query Execution Phases5.1.1 Query Parsing採用 Antlr 做文法解析器將 PQL 轉化成 query parse tree
5.1.2 Logical Plan Phase通過查詢中繼資料資訊,將 query parse tree 轉化成  Logical Plan Tree
5.1.3 Physical Plan Phase根據 Segment 的資訊進一步最佳化、具體執行計畫
5.1.4 Executor Service在相應的 Segment 上執行 physical operator tree 
5.2 PQLPQL 是 SQL 的一個子集,不支援 join,不支援子查詢

ref: https://github.com/linkedin/pinot/wiki/Architecture

著作權聲明:本文為博主原創文章,未經博主允許不得轉載。

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.