Hive On Spark, SparkSQL On Spark, 與Spark On YARN如何定義呢?
Hive On Spark和SparkSQL是很有意思滴一對。
Spark是新一代的計算引擎,相對於傳統的MapReduce。而SQL基本上是每個類似引擎都繞不過必須實現的東西,畢竟數據分析的用戶有很大一半並非CS背景,不可能指望他們寫程序的。SparkSQL和Hive On Spark都是在Spark上實現SQL的解決方案。Spark早先有Shark項目用來實現SQL層,不過後來推翻重做了,就變成了SparkSQL。這是Spark官方Databricks的項目,Spark項目本身主推的SQL實現。
Hive On Spark比SparkSQL稍晚。Hive原本是沒有很好支持MapReduce之外的引擎的,而Hive On Tez項目讓Hive得以支持和Spark近似的Planning結構(非MapReduce的DAG)。所以在此基礎上,Cloudera主導啟動了Hive On Spark。這個項目得到了IBM,Intel和MapR的支持(但是沒有Databricks)。下面簡單說技術上的東西。結構上Hive On Spark和SparkSQL都是一個翻譯層,把一個SQL翻譯成分散式可執行的Spark程序。比如一個SQL:SELECT item_type, sum(price)
FROM item
GROUP item_type;
- 讀取item表,抽出item_type,price這兩個欄位;對price計算初始的SUM(其實就是每個單獨的price作為自己的SUM)
- 因為GROUP BY說需要根據item_type分組,所以設定shuffle的key為item_type從第一組節點分組後分發給聚合節點,讓相同的item_type匯總到同一個聚合節點,然後這些節點把每個組的Partial Sum再加在一起,就得到了最後結果。
不管是Hive還是SparkSQL大致上都是做了上面這樣的工作。需要理解的是,Hive和SparkSQL都不負責計算,它們只是告訴Spark,你需要這樣算那樣算,但是本身並不直接參与計算。
下面簡單說陰毛論和政治的東西。
Spark官方Databricks本身是不願意承認Hive On Spark的正統地位的。Shark, Spark SQL, Hive on Spark, and the future of SQL on Spark
從它們官博上可以看出他們對Hive On Spark的定位更像是小三而不是正房。所以你看到Apache Hive On Spark的各種努力,並沒有得到最重要的Spark Vendor,Databricks的多少支持。SQL是面對用戶最直接的一個層面,如果Databricks能控制這個層面,各種功能添加都由自己做主,就不用受制於Hive的社區,這也是很直接的好處,而且我覺得引擎就位之後幾個廠商拼的都是上層,要搞出數據倉庫還有很多東西要做,但是如果把不住SQL這層,就很難辦。但Hive畢竟有辣嘛多廠商支持,D社是否能拿到主控權,還不好說。D社已經有廢掉Shark的前科,所以我不是很看好SparkSQL。當然這些都是陰毛論,有Cloudera或者Databrikcs的童鞋可以出來揭秘。至於Spark On Yarn,是和這兩個沒法在一起討論的。Yarn是Hadoop 2的調度模塊,原則上說,任何需要佔用資源的引擎在Hadoop平台上跑,只要能和Yarn交互,就可以與其他系統和平共處。
-------------------------------------------------------------------------------------------2015-01-06補充個相關的公司之間撕逼貼,好搞笑。
Did Cloudera Just Shoot Their Impala?看客共賞。Hive / SparkSQL
Spark / MapReduce
Yarn / Mesos
大概是這麼分層的。最上面是SQL引擎,負責把SQL查詢翻譯成計算引擎可以理解的命令。中間是計算引擎,Spark可以理解成更快的MapReduce。Yarn和Mesos一樣,都是管理協調計算引擎發下來的任務。Spark支持3種部署方式:standalone、spark on mesos、spark on YARN。第一種可以單獨部署到一個集群,無需依賴於其他資源管理系統,內部獨立實現容錯性和資源管理,類似Mapreduce 1.0的情況;而後兩種,部分容錯性和資源管理交由統一的資源管理系統完成。mesos是AMP Lab自己開發的,YARN來自MapRecuce2.0。一般認為,後兩者是未來趨勢——讓Spark運行在一個通用的資源管理系統之上,可以與其他計算框架(如MapReduce),公用一個集群資源,降低運維成本、提高資源利用率。
Hive On Spark, SparkSQL On Spark相當於基於Spark平台做的二次開發。Spark API雖然比Mapreduce友好(相對來說),但是還是不夠方便。Hive/SQL on Spark基於Spark API做了抽象(當然這中間有一個解釋/翻譯的過程),可以更好地使用Spark平台(操作數據、進行數據處理)。推薦閱讀: