在前1篇文章中,介紹到了Galaxy的增量計算性質,其state是框架內部管理的,和與Storm的簡單對照。這篇文章將講述更多Galaxy增量模型的事情,并介紹這套增量模型之上實現(xiàn)的Galaxy SQL和Galaxy Operator,同時會從增量角度對照Spark Streaming。
MRM模型全稱為MapReduceMerge,比MapReduce做了1個Merge操作。merge階段可與state交互,讀寫某個key的oldValue,并且這個merge接口還具有rollback語義。在流計算場景下,數(shù)據(jù)按時間或條數(shù)切成不同的批,批內可以做普遍意義下的MapReduce操作,批之間需要merge階段做跨批聚合的計算。大家可以對照Spark Streaming的UpdateStateByKey操作,在1個DStream內,各個時間段內的RDD(即各批)可以通過這個接口更新1次任務內的state。而galaxy的merge本質上是1次add的進程,對應的rollback是1次delete的進程,從數(shù)據(jù)庫的語義看,兩個進程合起來相當因而update操作,而這倆進程都是根據(jù)1個primary key來做的,所以這件事情與spark streaming的updateStateByKey做的事情是1樣的,但是細看的話,二者還是存在很大的差異。
galaxy的state暴露給計算task是線程級別獨享的,spark streaming的state是任務內全局同享的。線程級別獨享的優(yōu)點,就在于同1批數(shù)據(jù),按key shuffle以后來到不同的merge計算節(jié)點,各自不會阻塞各自的計算進程,而spark streaming的updateStateByKey操作會阻塞其他rdd的計算,雖然spark streaming能做到DStream內各個RDD并發(fā)履行,但是只要有state操作,終究還是落到了時間序列上的阻塞。本時間點StateRDD的計算需要依賴前1時間點父StateRDD的計算結果,而批內各個key對state操作是相互阻塞和影響的,所以著眼在這層barrier上的話,galaxy的merge進程更加精細,add和delete進程是分開的,批內的key是落到不同線程上計算而state是線程內獨享的。
Galaxy有3種Model,分別是MapOnlyModel,MapReduceModel,MapReduceMergeModel。即,你可使用M Model和MR Model做普通的流計算或小批計算,當需要跨批操作的時候就使用MRM Model。Model之間是隨便組合串連的,接口相比MapReduce實際上是相當靈活乃至過于靈活的,靈活的弊端是計算模型上帶來復雜性。
Galaxy SQL是1種StreamSQL,而且是目前業(yè)界沒有的。從語法上Galaxy SQL貼近HiveSQL,但又有些流計算語義上(無窮數(shù)據(jù)流)不能支持的語法,比如limit, order by。
Intel那邊弄了1個Spark Streaming + Spark SQL的結合,叫StreamSQL。利用Spark SQL里的SchemaRDD,為Spark Streaming流進來的RDD帶上了Schema元信息。借助Spark Streaming支持的操作,這類StreamSQL可以做滑窗效果的sql計算。但是真正跨批的增量語義(不單單是固定的window跨批計算),是支持不了的。Galaxy SQL可以做真實的增量流式SQL。
舉個最簡單的例子,
第1句sql中,根據(jù)t1的a字段分組,求了個count值。第2句sql中,t2表分組的字段變成t1表里count出來的cnt值。大家可以想象,在流計算場景里,第1次a求count出來的值多是100,下1個時間點,同1個a的key,count出來的值就是200了,這時候候,100這個cnt已丟到t2表里計算出結果了,現(xiàn)在100已更新到200了,200這個新的值的計算是簡單的,但問題是如何把t2里之前100的計算結果撤消呢?
可以仔細想一想,StreamSQL是做不了這樣的sql的,本質上是由于spark streaming不支持這樣的操作。Galaxy計算框架的merge階段可以做rollback操作,回滾之前"毛病"的狀態(tài),使得Galaxy SQL可以做散布式流式SQL。
Galaxy Operator是Galaxy MRM編程接口之上的1層DAG封裝,兼具易用性和表達能力。
算子層終究將映照成多個Galaxy的MRM Model,使用戶可以更加關注計算邏輯,屏蔽較復雜的MRM Model,特別是merge階段。
生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈