轉(zhuǎn)發(fā)地址:https://zhuanlan.zhihu.com/p/25928166
大數(shù)據(jù)前沿技術(shù)關(guān)注者
40 人贊了該文章
</header>
[今天解讀的內(nèi)容是來自 Hadoop Summit San 2016 關(guān)于 Apache Kudu 的一個(gè)介紹:Apache Kudu & Apache Spark SQL for Fast Analystics on Fast Data(視頻見文章末尾)遣疯。歡迎關(guān)注微信公眾號(hào):大數(shù)據(jù)技術(shù)峰會(huì)解讀(bigdata_summit)谎脯,獲取更多的內(nèi)容和大數(shù)據(jù)技術(shù)峰會(huì)視頻窟绷。
Apache Kudu 加速對(duì)頻繁更新數(shù)據(jù)的分析_騰訊視頻
視頻](http://link.zhihu.com/?target=https%3A//v.qq.com/x/page/h03728qz2xm.html)
Kudu Overview
<figure style="margin: 1em 0px;"></figure>
上圖是 Hadoop 生態(tài)體系中华弓,存儲(chǔ)引擎和應(yīng)用場(chǎng)景的對(duì)應(yīng)關(guān)系。
橫軸代表數(shù)據(jù)查詢分析的頻度(Pace of Analysis)凑术,依次為:
- 歸檔
- 基于靜態(tài)數(shù)據(jù)的掃描/分析(一次寫入多次讀壤沾小)
- 基于頻繁更新數(shù)據(jù)的快速分析
- 實(shí)時(shí)訪問/更新(OLTP)
縱軸代表的是數(shù)據(jù)的更新頻度(Pace of Data)共苛,依次為
- 只讀
- 追加(Append-Only)
- 頻繁更新
- 實(shí)時(shí)更新
我們知道,HDFS 特別適合歸檔和基于靜態(tài)數(shù)據(jù)的掃描/分析的場(chǎng)景(一次寫入多次讀纫前伞)庄新,也就是上圖中左下角的黃色區(qū)域,而HBase擅長(zhǎng)實(shí)時(shí)高并發(fā)的讀寫應(yīng)用,也就是右上角的藍(lán)色區(qū)域择诈。但是對(duì)于需要在頻繁更新的數(shù)據(jù)之上做快速分析械蹋,也就是上圖中間的虛線區(qū)域,Hadoop社區(qū)卻一直沒有比較好的存儲(chǔ)層產(chǎn)品來滿足吭从。Kudu正是出于填補(bǔ)這個(gè)空白而誕生的朝蜘。
視頻中提到,Kudu的設(shè)計(jì)借鑒了Parque和HBase一些理念 / 思想涩金。
Kudu產(chǎn)品的幾個(gè)要點(diǎn):
- 數(shù)據(jù)模型和關(guān)系數(shù)據(jù)庫類似谱醇,為結(jié)構(gòu)化的表;列的數(shù)量有限(和HBase/Cassandra相比較而言)
- 內(nèi)部數(shù)據(jù)組織方式為列式存儲(chǔ)
- 很好的橫向擴(kuò)展能力步做,目前測(cè)試的是275個(gè)節(jié)點(diǎn)(3PB)副渴,計(jì)劃支持到上千個(gè)節(jié)點(diǎn)(幾十PB)
- 不錯(cuò)的性能,集群能達(dá)到百萬級(jí)別的TPS全度,單節(jié)點(diǎn)吞吐為幾個(gè)GB/s
- 本身不提供SQL接口煮剧,只支持類似NoSQL的接口,如 Insert(), Update(), Delete() and Scan() 等
- 通過與 Spark 和 Impala 等(Drill将鸵,Hive的支持還在進(jìn)行中)的集成勉盅,對(duì)外提供基于 SQL 的查詢分析服務(wù)
Kudu 和 Spark 集成后,能帶來的好處:
- 帶來和 Parquet 相似的掃描性能顶掉,但卻不存在數(shù)據(jù)更新/插入的延遲草娜,也就是說,對(duì)數(shù)據(jù)的實(shí)時(shí)更新/插入痒筒,對(duì)分析應(yīng)用來說是即時(shí)可見的宰闰,無延遲。
- Spark對(duì)數(shù)據(jù)的過濾條件(基于判定的過濾條件簿透,即 predicate)可以下推到 Kudu 這一存儲(chǔ)層移袍,能提高數(shù)據(jù)讀取/掃描的性能
- 相對(duì) Parque,基于主鍵索引的查詢老充,性能更高
Spark Datasource
這部分比較簡(jiǎn)單葡盗,介紹Kudu與Spark集成的代碼片段÷煳基本上就創(chuàng)建一個(gè)kuduDataFrame后戳粒,后續(xù)的操作就和普通的Spark DataFrame API沒什么差別了
Quick Demo
Demo也比較簡(jiǎn)單,有興趣大家可以自己看一下視頻(位置在視頻的 18分26秒)虫啥,就是在 Spark Shell 中操作一個(gè) kuduDataFrame
Use Cases
Kudu 最適合的場(chǎng)景包含這兩個(gè)特點(diǎn):
- 同時(shí)有順序和隨機(jī)讀寫的場(chǎng)景
- 對(duì)數(shù)據(jù)更新的時(shí)效性要求比較高
這樣的場(chǎng)景有:
- 和時(shí)間序列相關(guān)的數(shù)據(jù)分析:對(duì)市場(chǎng)/銷售數(shù)據(jù)的實(shí)時(shí)分析蔚约;反欺詐;網(wǎng)絡(luò)監(jiān)控等
- 在線報(bào)表和數(shù)據(jù)倉庫應(yīng)用:如ODS(Operational Data Store)
片中還介紹了小米使用Kudu的一個(gè)具體場(chǎng)景涂籽,需求是要收集手機(jī)App和后臺(tái)服務(wù)發(fā)送的 RPC 跟蹤事件數(shù)據(jù)苹祟,然后構(gòu)建一個(gè)服務(wù)監(jiān)控和問題診斷的工具,要求:
- 高寫入吞吐:每天大于200億條記錄
- 為了能夠盡快定位和解決問題,要求系統(tǒng)能夠查詢最新的數(shù)據(jù)并能快速返回結(jié)果
- 為了方便問題診斷树枫,要求系統(tǒng)能夠查詢/搜索明細(xì)數(shù)據(jù)(而不只是統(tǒng)計(jì)信息)
在沒有使用kudu之前直焙,方案的架構(gòu)如下圖所示。
<figure style="margin: 1em 0px;"></figure>
這是典型的Lambda架構(gòu)(存在兩套相對(duì)獨(dú)立的數(shù)據(jù)流水線:批處理和流處理)砂轻,一部分源系統(tǒng)數(shù)據(jù)是通過Scribe(日志聚合系統(tǒng))把數(shù)據(jù)寫到HDFS奔誓,另一部分源系統(tǒng)數(shù)據(jù)(實(shí)時(shí)性要求較高的?)是直接寫入HBase搔涝,然后:
- 為了能支持交互式/實(shí)時(shí)的查詢厨喂,需要通過Hive/MR/Spark作業(yè)把這兩部分?jǐn)?shù)據(jù)合并成 Parquet 格式存放在HDFS,通過 Impala 對(duì)外提供交互式查詢服務(wù)
- 線下分析的就直接通過運(yùn)行 Hive/MR/Spark 作業(yè)來完成
我們可以看到庄呈,這樣的數(shù)據(jù)線比較長(zhǎng)蜕煌,帶來兩個(gè)問題:
- 其一是數(shù)據(jù)時(shí)效性較差(一個(gè)小時(shí)到一天);
- 其二是需要多次數(shù)據(jù)轉(zhuǎn)換(如:HFile + seqfile ==> Parquet)
還有一個(gè)問題诬留,存儲(chǔ)層中數(shù)據(jù)不是按照時(shí)間戳來排序斜纪,如果有部分?jǐn)?shù)據(jù)沒有及時(shí)到達(dá),那么為了統(tǒng)計(jì)某一天的數(shù)據(jù)文兑,可能就要讀取好幾天的數(shù)據(jù)才能得到盒刚。
使用了Kudu以后,方案的架構(gòu)如下圖所示绿贞。
<figure style="margin: 1em 0px;"></figure>
數(shù)據(jù)都存儲(chǔ)在Kudu中伪冰,分兩條線進(jìn)入Kudu:
- 對(duì)于需要做加工(ETL)的數(shù)據(jù)或來自壓力較大的系統(tǒng)的數(shù)據(jù)(產(chǎn)生的數(shù)據(jù)較多,源系統(tǒng)無法長(zhǎng)時(shí)間緩存)可以先進(jìn)入Kafka緩存樟蠕,然后通過Storm做實(shí)時(shí)的ETL后進(jìn)入Kudu,這種情況的延時(shí)在 0~10秒的區(qū)間
- 反之靠柑,源系統(tǒng)的數(shù)據(jù)可以直接寫入 Kudu寨辩,這種情況數(shù)據(jù)沒有任何延遲
然后,一方面可以通過 Impala 對(duì)外提供交互式查詢服務(wù)(基于SQL)歼冰,另一方面也可以直接通過 Kudu API 直接訪問數(shù)據(jù)
這樣的架構(gòu)帶來的好處比較明顯靡狞,一方面是大大提高數(shù)據(jù)的時(shí)效性,另一方面大大簡(jiǎn)化系統(tǒng)架構(gòu)
PPT中還有一張 Kudu + Impala 的方案與 MPP 數(shù)據(jù)庫產(chǎn)品(如 Greenplum隔嫡,Vertica 和 Teradata)進(jìn)行對(duì)比甸怕,但是由于時(shí)間關(guān)系視頻中沒有講,這里簡(jiǎn)單提一下:
他們有存在相似之處:
- 提供基于SQL的交互式快速查詢/分析
- 能夠提供插入腮恩、更新和刪除操作
相對(duì)于 MPP 數(shù)據(jù)庫梢杭,Kudu + Impala 方案的優(yōu)勢(shì):
- 更快的流式數(shù)據(jù)插入(streaming insert)
- 和 Hadoop 生態(tài)體系有較好的集成:
- 把 Kudu 和 HDFS 部署在同一個(gè)集群,可以關(guān)聯(lián)分別存儲(chǔ)在 Kudu 和 HDFS 上的表
- 和 Spark秸滴,F(xiàn)lume等的集成度較好
相對(duì)于 MPP 數(shù)據(jù)庫武契,Kudu + Impala 方案的劣勢(shì):
- 批量插入的性能相對(duì)較慢
- 不支持?jǐn)?shù)據(jù)裝載的原子操作,不支持跨行的原子操作,不支持二級(jí)索引
Kudu Roadmap
相對(duì) HDFS 和 HBase咒唆,Kudu還是一個(gè)比較新的項(xiàng)目届垫,視頻介紹了產(chǎn)品路線圖的一些想法:
安全方面:
- 和 Kerberos 的集成
- 力度更細(xì)的權(quán)限控制
- 基于組和角色的權(quán)限管理
- ...
運(yùn)維方面:
- 穩(wěn)定性的增強(qiáng)
- 一些恢復(fù)工具
- 故障診斷輔助工具
性能和擴(kuò)展性:
- 具體一些讀寫性能提升的想法
- 擴(kuò)展性的提升(短期到400節(jié)點(diǎn),長(zhǎng)期上千節(jié)點(diǎn))
客戶端方面:
- 目前支持Java全释、C++ 和 python装处,Python目前還是短板,有些功能還沒支持
- 文檔浸船、教程和日志等方面