存儲與計算分離:OSS構建表 + 計算引擎對接
看到標題,可能有用戶要問:OSS不是用來存圖片、視頻、及文件的嗎,還可以在上麵建表、數倉?計算效率和經濟性表現怎麼樣?
本文先給出基本結論:
- OSS是什麼?
對象存儲(Object Storage Service,簡稱OSS)是基於阿裏雲飛天分布式係統的海量、安全和高可靠的雲存儲服務,是一種麵向互聯網的大規模、通用存儲,提供RESTful API,具備容量和處理的彈性擴展能力。
- 基於OSS是否可以創建數據表?
既然可以把攝像頭推流接到OSS,建表屬於小Case了。並且2016年在亦龍大神的幫助下,Hadoop社區在官方版本中支持OSS,開啟了阿裏雲存儲與開源融合的新裏程碑。
- OSS上建表是否易用?
今天為了降低OSS上建表的門檻,日誌服務(原SLS)LogHub可以支持OSS上表的實時寫入(表類型包括TextFile,列存儲Parquet),支持壓縮及數據Partition配置。在計算引擎端,我們已經和阿裏雲(MaxCompute、E-MapReduce)和主流開源計算引擎(Presto等)打通,無縫使用多種計算引擎熱插拔對接。
既然可以把數據表直接建在HDFS、MaxCompute(原ODPS)上,選擇OSS來存儲表數據又是為什麼呢?
存儲與計算分離的趨勢
在2009年做大規模計算的核心詞是“Locality”:讓計算盡量靠近數據以提升效率。當時一個公認的模型是:構建一個足夠大的資源池,把數據和計算融合在裏麵發揮規模效應。
但最近幾年以來,生態和環境都悄然發生了一些變化:
- 計算模式:全量數據計算模式,逐步被Impala、Presto等更高效計算模式趕上
- 存儲格式:ORC/Parquet/Kudu等列存、索引技術誕生,使得計算不需要Scan大塊數據
- 網絡架構:25G網絡開始上線,FPGA等技術也加快了網絡體驗
- 存儲介質:SSD、AliFlash、3D X-Point 大量混合技術使得存儲可以“既快又勐”
- 計算平台:GPU、FGPA、甚至是未來的TPU等改變計算形態
從這些變化使得我們發現:
通過一款機型通吃存儲+計算方案,已經演變成存儲+計算各自服務化,通過高速網絡進行連接的趨勢
這種方式可以使得存儲、計算不用再被”機型“,”機櫃“,”電力“等方案束縛,在各自最擅長的領域進行創新。從業界對於”分層“的工作中,我們也看到了這類的嚐試:
案例1:Netflix 基於S3解決方案
Netflix是AWS創新代表,特別是他們的大數據業務。根據2016 Re:Invent上Slides描述,Netflix每天新增500 Billion條日誌(數據量500 TB)、存量數倉規模 60PB、每天會對其中3PB數據做計算。
在Slides中Netflix談到:從2014年開始就決定開始摒棄各種係統隔閡,底層使用了統一存儲S3,之上構建各種計算引擎係統。事實證明Netflix這一步走得正確,海量的存儲與計算能力使得商業的創新得到了充分釋放,成為AWS上令人引以為傲的學習榜樣。
受Netflix啟發,AWS 在2016 Re:Invent 上推出了一款新的計算產品Athena:該產品將Presto服務化提供基於各種存儲類服務的 Ad-Hoc Query能力。
AWS Athena利用多個可用區(Availability Zones)中的計算資源執行查詢,並將S3用作底層數據存儲係統,由於數據冗餘地存儲在多個地點和每個地點的多個設備中,服務具備很高的可用性和可靠性。
案例2:Facebook RocksDB項目
Google開源了Level DB,而Facebook通過改造成RocksDB使它上升到新高度。RocksDB除了對LSM模型的多個優化外,另一個非常吸引人的地方在對存儲介質、計算層適配得非常友好,可以充分發揮計算和存儲的性能。底層的介質與存儲對上層API透明熱插拔,是在軟件設計層麵存儲+計算分離的一個優美案例。
OSS上建立數倉的優勢
優勢1:不受限製的存儲空間
對於數據倉庫來說最重要一點是海量存儲,能為計算分析提供大數據吞吐支持。在這個點上OSS是非常合適的。
結合OSS的目錄設置,對大規模(百萬級別以上)文件做合理劃分,並與計算引擎配合拿到更高的計算效率。LogHub投遞OSS存儲支持Hive-style分區目錄,將數據按照日期存儲,可以設置多維分區。
舉個例子,我們有一個應用叫my-app,為應用創建一個dw項目 my-dw,在項目中創建了一組表,以其中一個表my-table作為例子:表中的數據以時間(天)作為partition(例如date='20170330' 代表當天的數據目錄)。
整個數倉的層級結構可以映射為OSS的一個訪問路徑:
- my-app 為 OSS 上bucket名稱
- my-dw 之後則為數倉的項目名(namespace)
- my-table是表名
- date=20170330是一維分區
優勢2:極低的存儲成本
OSS 是提供實時數據讀寫“最便宜”存儲產品之一,對於100GB日誌數據:
- 使用列存儲編碼(以Parquet格式為例),通過snappy壓縮後,存儲數據量在8 GB左右
- 以OSS當前官網價格計算,使用OSS存儲一個月費用為 8 * 0.148 = 1.184 元
- 除此之外,OSS有兩種根據訪問頻率可任意轉換形態:IA(低頻)、Archive(冷備),最低可以降低60%成本。OSS 與 IA,Archive之間數據模型是一致的,數據形態可以非常便捷的轉換。
優勢3:一份數據,對接多種計算引擎
我們可以將數據以一種通用的協議存儲(例如textfile,sequence file或parquet等),目前OSS上數據支持如下計算引擎:
- 開源:Spark、Presto、Druid,Pig,Hive等
- 阿裏雲:MaxCompute,E-MapReduce、RDS-PG、Batch Compute等
以上計算引擎和存儲之間都是熱插拔,可以方便地在不同大小的測試、生產數據集上進行切換組合。
對比與傳統數倉方案,數據存儲於OSS,計算實現了Schema on Read,使得數據分析的自由度得到了很大提升。
除了支持多種計算引擎外,OSS 本身還有Geo-Replication功能,可以在不同Region間準實時進行同步,不把雞蛋放在一個籃子裏,以進一步提升重要數據的安全性。
優勢4:在計算效率上比肩HDFS類存儲
OSS從API上看起來不像HDFS類存儲這麼細,性能並不一定好?
這裏以一個Map-Reduce作業舉例,在作業的執行過程中,OSS會在3個地方被用到:
- 調度:當查詢提交時,需要根據計算數據範圍 List OSS目錄製定plan,確定多少文件目錄參與計算
- 運行:每個Worker根據plan掃描指定目錄下文件,讀取並進行自定義計算
- 結果:當計算完成時,寫入OSS(計算中間結果產生的Shuffle文件可以寫在本機以優化性能,部分場景下也可以選擇使用OSS)
可見,對於Ad-Hoc Query類場景,OSS在使用模式上都可以完全勝任。
開始在OSS分析數據
數據寫入
- LogHub(推薦)
直接將日誌以準實時方式寫入OSS,支持JSON、Parquet格式,投遞規則配置如下:
數據在OSS存儲如下:
2017-04-18 11:50:39 513.75KB oss://oss-shipper-shenzhen-test/tfs_access_log/updatetime=2017_04_18_11_00/log_1492487434507106535_1670221.snappy.parquet
2017-04-18 11:56:01 517.36KB oss://oss-shipper-shenzhen-test/tfs_access_log/updatetime=2017_04_18_11_00/log_1492487754196771821_1670280.snappy.parquet
2017-04-18 12:01:31 537.03KB oss://oss-shipper-shenzhen-test/tfs_access_log/updatetime=2017_04_18_12_00/log_1492488089710991745_1670335.snappy.parquet
2017-04-18 12:06:54 512.95KB oss://oss-shipper-shenzhen-test/tfs_access_log/updatetime=2017_04_18_12_00/log_1492488410774368293_1670389.snappy.parquet
2017-04-18 12:22:55 512.95KB oss://oss-shipper-shenzhen-test/tfs_access_log/updatetime=2017_04_18_12_00/log_1492489370787863606_1670558.snappy.parquet
2017-04-18 12:34:21 261.69KB oss://oss-shipper-shenzhen-test/tfs_access_log/updatetime=2017_04_18_12_00/log_1492490057002827204_1670672.snappy.parquet
object list number is: 5451
totalsize is: real:195677878828, format:182.24GB
通過LogHub寫入優勢:數據接入LogHub多種選擇,全托管歸檔服務,準實時投遞,支持異常重試,STS授權。了解OSS投遞請參考文檔。
- OSS API/SDK
使用OSS 各種SDK或API寫入,完全自主的寫入方式,參考文檔。
計算引擎
- E-MapReduce/Spark/Hive 用戶:參考社區文檔。
- MaxCompute 用戶(ODPS):功能內測中。
- PG用戶:請聯係 鐵庵。
- Presto用戶:參考社區文檔。
- 其它:隨時一個Get,數據全部拿走。
最後更新:2017-04-28 23:21:44