近幾年,大資料非常熱門,大資料計算的方案也較多,目前,大資料計算機平台有很多,但卻越來越沉重,主要是由于這三個方面的原因:
并不是任何事物都需要沉重的大資料平台,許多還是需要輕量級計算。
輕量級計算需求
大資料的技術本質是高性能
提高性能的需求無處不在
不總是有那麼大的資料量
低延遲即時響應業務資料量并不
不總是适合部署大資料平台
即時查詢常常有被內建需求 臨時性資料處理來不及建 設
大資料平台 不總是可以擴容硬體(記憶體)
大資料開發難度大
大資料平台對SQL查詢關注過多
性能比拼的主要陣地 優化SQL性能幾乎無助于降低開 發難度
大量過程計算的開發難度還很大
用SQL很難描述,複雜SQL優化效果不好 仍需大量底 層的編碼,經常編寫UDF
提高性能本質上是降低開發難度
複雜運算的自動優化靠不住,需要快速編寫高性能算 法
舉例:漏鬥轉換器
<b>叢集透明化</b>
讓通路叢集的時候和單擊運算一樣,看不見叢集。
大資料平台努力實作叢集透明化
單機與叢集一緻 網絡存儲系統+自動任務配置設定
透明化提高代碼相容性,降低開發難度
透明化難以獲得最優性能
高性能計算方案因場景而異,可能是沖突的
透明化隻能選擇最保險的方法,一般是性能較差的那 個,透明化架構對資源消耗嚴重
透明化與高性能的權衡
資料分布
節點檔案系統:可控備援,記憶體利用
網絡檔案系統
任務配置設定
程式員配置設定:根據節點能力安排任務,無架構資源消 耗,系統自動配置設定
輕量級計算的技術特征
目标:過程計算
可內建性
資料源開放性
直接檔案計算
注重單機優化
多線程并行
權衡叢集透明與高性能
節點檔案存儲,不用網絡檔案系統
多個單機運算,不用統一叢集架構
<b>集算器 — 技術特征</b>
面向過程計算
無縫應用內建
多樣性資料源接口 直接檔案計算
單機優化技術 多線程并行
無中心叢集結構 自由資料分布和任務配置設定
集算器 — 靈活文法體系
某支股票的漲幅交易日
文法體系更容易描述人的思路
資料模型不限制高效算法實作
<b>集算器 — 面向過程計算</b>
完整的循環分支控制
<b>集算器 — 開發環境</b>
<b></b>
<b>集算器 — 應用結構</b>
高效二進制壓縮檔案、列式存儲
RDB:Oracle,DB2,MS SQL,MySQL,PG,….
TXT/CSV,JSON/XML,EXCEL
Hadoop:HDFS,HIVE,HBASE
MongoDB,REDIS,…
HTTP、ALI-OTS … …
内置接口,即裝即用
<b>單機計算技術 </b>
1、周遊技術
周遊是大資料計算的基礎
延遲遊标
遊标概念:
流式讀入資料,每次僅計算一小部分
延遲計算 :
在遊标上定義運算,傳回結果仍然是遊标,可再定義運算
不立即計算,最終一次性周遊和計算
周遊複用
外存計算優化方向是減少通路量
可複用的周遊減少外存通路量
一次周遊可傳回多個分組結果
聚合了解
從一個集合計算出一個單值或另一個集合都可了解為聚合
高複雜度的排序問題轉換為低複雜度的周遊問題
有序遊标
針對已有序的資料可一次周遊實作大結果集分組運算,減少外存交換。
複雜處理需要讀出到程式記憶體中再處理 有序遊标有效減少查找和周遊數量。
2、連接配接解決
區分JOIN
外鍵指針化
外鍵需要随機小量頻繁通路
記憶體指針查找大幅提高性能
外鍵序号化
序号化相當于外存指針化
不需要再計算Hash值和比較
有序歸并
同維表和主子表連接配接可以先排序後變成有序歸并
追加資料的再排序也仍然是低成本的歸并計算
3、存儲格式
壓縮二進制
資料類型已存入,無須解析
輕量級壓縮
減少硬碟空間
很少占用CPU時間
泛型存儲,允許集合資料
可追加
自由列存
自由配置設定列組
行列存統一 重複值壓縮 對上透明通路
過濾優化
隻讀取與條件相關的列組
序号主鍵
多層序号式主鍵
外存指針式外鍵,高速引用
外存遊離記錄表示,離散性
天然有序,易于查找
分組針對外鍵
結果自然對齊有序
主子合一
多層複式表
層次式有序集合 每層均可以有資料結構 同維表與主子表統一 消除對齊式連接配接
4、使用索引
有序對分查找
有序資料提供對分查找,快速定位
普通定位索引
按鍵值找到資料
兩段式索引提高維護性能
片狀索引
連續記錄的索引
應用:切片的雙向逆序索引
CUBE切片索引的困難
列存索引太大
資料必須實際排序
雙向逆序索引
按D1,…,Dn和Dn,…,D1雙倍排序
隻針對前半部分次元使用片式索引
5、分段并行
文本分段
倍增分段
分段數足夠大,以适應變化的并行數
每段記錄數相對平均
資料追加時不必重寫所有資料,保持連續性
列存分段
有序與對位分段
倍增分段方案解決列存并行困難 各列同步分段
同列連續存儲
有序資料的分段點要落在組邊界上才能分段并行
同維表、主子表需同步分段
多路遊标
建立多路遊标,可繼續進行過程計算,會自動并行執行,簡化書寫難度。
<b>叢集方案</b>
叢集設計原則
確定容錯
減少網絡傳輸量
考慮負載均衡
叢集計算技術
<b>叢集方案 — 無中心設計</b>
<b></b><b></b>
<b>伺服器叢集無中心</b>
集算器沒有架構,沒有永久的中心主要節點,程式員用代碼控制參與計算的節點
無中心不會發生單點失效
所有節點地位都等同,不會發生單點失效,某個節點有故障時整個叢集仍然可以運作
計算任務有主要節點
在計算過程中由主要節點臨時尋找其它節點參與計算
<b>叢集方案 — 負載均衡與容錯</b>
具備負載均衡能力
根據每個節點空閑程度(目前正在運作的線程數量)決定是否配置設定任務, 實作負擔和資源的有效平衡
具備容錯能力
某個節點失效導緻子任務失敗,主要程式還會再次将這個子任務配置設定給
其它有效的節點
<b>叢集方案 — 并行邏輯結構</b>
<b>共享式資料計算分布</b>
共享資料源方式:計算分布實作,資料共享讀取
<b>備援式外存分布</b>
所有任務都需要用到的公共維表複制存儲
事務資料分成N個區,根據需要的容錯指數循環分區 存儲使用率約為1/k(允許k-1個節點失效)
<b>外存分布 — 資料同步</b>
集算器提供節點之間的同區資料同步功能。
每個節點都是獨立的計算機,可以應用記憶體和外存的計算方法。
<b>外存分布 — 動态任務配置設定</b>
<b>備胎式記憶體分布</b>
資料分區分别加載進節點記憶體
n個節點(每節點一個分區)+k個備份節點
記憶體使用率n/(n+k)
<b>記憶體分布 — 靜态任務配置設定</b>
預留備份節點(備胎)不加載任何資料分區
發現有分區在所有可用節點都找不到時,啟動找備份節點執行加載該分區
任務直接配置設定到相應節點,不再動态詢問
<b>叢集維表</b>
大維表分段存入節點機記憶體
利用記憶體特性提供随機通路
批量通路+節點過濾降低網絡負擔
JOIN總結
外鍵式:小維表、大維表
對齊式:有序歸并
避免低效率Hash分段算法
<b>叢集維表 — 示例</b><b>MapReduce->ForkReduce</b>
MapReduce的問題
任務太碎,管理成本過高
難以實作關聯運算
Hash Shuffle随意性太強
ForkReduce
批量任務,排程成本低
結合對位分段技術實作關聯運算
Shuffle結果有确定分布方案
<b>叢集應用 — 異構資料</b>
集算器可以基于同構或異構資料庫叢集進行結果彙總,為報表輸出彙總後的結果集。
<b>叢集應用 — 異構資料庫叢集(聯合查詢)</b>
集算器與報表V5合作提供DQL語言,可基于異構資料庫叢集進行聯合查詢,結果彙總後為上層應用提供資料輸出服務。
<b>叢集應用 — 協助HADOOP工作</b>
集算器是輕量級、高性能、分布式的計算引擎,解決HADOOP上SQL能力弱、開發難、運算慢的問題,可以極大地縮減大資料平台的搭建周期和實施成本。
<b>叢集應用 — 獨立工作</b>
集算器作為獨立的大資料計算引擎,可自己管理資料,不需要網絡檔案系統,通過标準的接口為上層應
用提供資料輸出服務。
原文釋出時間為:2017-11-15
本文作者:蔣步星