科技在進步,市場在變化,軟硬件條件突飛猛進般發展的同時,企業的需求也不斷升級。例如從離線到在線的轉變,規模效應的需求,更低的成本需求都刺激著Hadoop生態圈的進步和壯大。
2014業內值得關注的事情
1. Hortonworks上市
Hortonworks于2014年11月11日向美國證監會提出IPO申請,這標志著Hadoop技術發展開始走入商業階段,更標志著Hadoop從2014年開始真正的“成熟”了。
2. Hadoop2.0開始大規模落地
Hadoop2.0 從提出到發展至今經歷了數年時間,國內外有很多公司在嘗試Hadoop2.0的架構,但在這個階段引領業內潮流的并非主流大企業,率先嘗試的反而是一些小公司。2013年Yahoo!開始嘗試Hadoop2.0,并有了業內最大的Yarn集群,擁有將近4500臺機器,國內如阿里、美團等企業都在嘗試 Yarn,目前都有上千臺的規模,2014年騰訊Yarn集群規模接近萬臺。
3. 國內Spark氛圍漸濃,欲與Hadoop試比高
2014 年Spark是個爆發年,這一年里Spark社區快速發布了多個版本,最高發布版本已經到了1.2.0。Spark Core之外的部分:Spark廢棄了Shark,然后大力發展Spark SQL,與此同時Spark Streaming也更為成熟。Spark Core:Spark社區內部優化無數,空前活躍,各種會議、研究、探討,圍繞Spark本身的周邊配套系統也越來越多,形成了Hadoop這個大生態圈之內不可忽視的小生態圈。國內外大小企業都在嘗試Spark,在業務和規模方面都取得一定成績:根據公開資料,eBay構建了一個大約2000臺的 Spark集群;騰訊構建了一個大約2000臺的Spark集群,通過Spark挖掘運算之后的模型提供給廣告推薦使用,給騰訊廣告帶來百億規模的收入;百度構建了大約1300臺的Spark集群。
盤點2014年展望2015的技術發展
【HDFS:高度挖掘資源利用率的存儲】
2014年HDFS發布了以下主要特性。
1. 更方便的在線升級
HDFS開始支持在線升級,并且FSImage通過ProtocolBuffer序列化與反序列化,由于ProtocolBuffer的數據結構兼容性較好,元數據升級也更為方便。
2. 異構存儲
在 HDFS支持異構存儲媒介之前,HDFS假設底層存儲媒介是同構的,性能完全一樣,比如全是HDD(機械盤),但隨著新型媒介的出現以及對應成本的下降,很多公司開始嘗試使用新的存儲媒介,比如SSD。基于此,HDFS也緊跟時代發展潮流,支持異構存儲媒介,即一個HDFS的各個存儲節點上可以指定若干不同的存儲媒介,比如HDD、SSD等,這樣,用戶可以根據應用特點將不同類型數據存儲在不同媒介上,以滿足性能需求。
3. 集中管理的DataNode緩存
目前HDFS中DataNode上緩存的數據并沒有通過適當途徑暴露給外界應用程序,尤其是像Spark、Hive、Pig、Impala等計算框架無法充分利用DataNode內存進行計算、優化。該功能將集中管理DataNode緩存,并統一控制哪些文件需要加載到緩存中來,提高讀取性能。
4. 端到端的加密
HDFS實現了一個透明的、端到端的加密方式。一旦配置了加密,從HDFS讀出數據解密和寫入數據加密的過程對用戶應用程序來說都是透明的。加密過程是端到端的,這意味著數據只能在應用程序解密。
5. Archival Storage
將計算能力與不斷增長的存儲能力分離。擁有高密度低成本的存儲但計算能力較低的節點利用率將變得更高,比如可以在集群中做冷存儲。增加更多此類節點作冷存儲可以提高集群的存儲能力,跟集群的計算能力無關。
未來HDFS社區將發展跨數據中心的容災。
目前的HDFS只能做到機房內的容災,不支持跨機房部署,因此無法提供更大規模的全球可用服務;在跨機房同步數據方面也只能依賴一些導入導出工具離線操作。HDFS計劃未來支持多機房部署,實現跨機房容災,零丟失率,低延時。
【Yarn:面向通用化和服務化】
社區對Yarn的定位開始更加面向在線服務,比如7×24小時的服務,與此同時系統需要更加健壯。2014年Yarn發布了以下主要特性。
1. ResourceManager HA
在Hadoop 2.4.1版本中Resource-Manager新增HA功能,這意味著集群中最大的單點解決了,系統可用性大大提升。
2. 支持Docker
Yarn 的新版本中,支持了Docker。Yarn將使用Docker解決每個Container執行環境的問題。使用Docker的Yarn集群將得到更好地資源隔離性,并可以更快速地部署。Docker有強大的鏡像存儲和分發能力,開發者可以很方便地從鏡像中心獲取Hadoop Yarn應用的鏡像。
Yarn未來社區發展方向
社區正在針對NodeManager HA特性研發,不久之后就會問世。從2014年的發展和社區最新的動向來看,社區對Yarn的定位是離線與在線通吃。
【Spark:高度活躍的小生態圈】
Spark社區在2014年里共發布了四個版本,平均每個季度一個,這里每個版本都有一些新的特性,使得Spark功能越來越豐富,更加可靠和高效。
2014年Spark發布了主要以下特性。
1. Standalone模式HA
增加Standalone模式下運行的HA功能,使得Spark Streaming的Driver在Standalone模式下掛掉后可自動恢復。
2. GraphX
增加了多個算法,包括PageRank、SVD++、標簽傳播算法并進入穩定版本。
3. Mllib
新增SVN、PCA、L-BFGS、Word2Vec和TF-IDF、Navie Bayes、Random forests和Gradient-boosted算法,并支持learning pipelines機制,這使得多個算法可以在一遍處理過程中執行完成。
4. Spark SQL
已經與Hive 0.13兼容,并可以支持動態分區插入,同時引入了動態字節碼生成功能,同時支持多種語言編寫的UDF函數。
5. Driver HA
實現了通過WAL機制來保證HA。
未來Spark社區
Spark社區發展快速,已經形成了Hadoop生態圈下的小生態圈,并且以獨立形式運作,支持高效的內存文件系統和更快速,更豐富的計算,成為Hadoop一個強有力的補充計算引擎。
【MR:持續優化】
MapReduce發布以下主要特性。
1. Shuffle Handler提供了keep-alive機制,提高了Shuffle的效率。
2. 提供了斷點恢復的機制,這使得已完成MapTask不需要因為NodeManger重啟而重跑。
3. 計算前數據切分,獲取文件信息并行化。
4. 提供了Rehash Partitioner機制,這個方案使Key的分布更均勻。
5. ApplicationManger由于ResourceManger HA的特性減少了失敗重跑的代價。
6. 支持任務內資源搶占機制。
未來社區發展方向
1. 由于搶占機制的引入提高了資源被搶占的概率,但為了減少Task被搶占的代價,Task斷點恢復的機制加入到規劃當中。
2. 當前中間結果量的遞增,引起磁盤隨機讀寫次數增加導致性能非線性下降,未來將中間結果按Partition聚合和批處理等方案也在討論當中。
【HBase:1.0時代】
HBase開始進入1.0時代,系統在穩定性、可用性、易用性方面有質的提升,主要體現的特性如下。
1. HydraBase
提供高可靠性:Region的副本只有一個是關鍵Region支持寫入,其余的都是在線副本;設定一個延遲,這個延遲以內關鍵Region沒有應答,就把請求發給其他在線副本,保證一致性和可靠性。
2. Replication Protocol
一組副本之間將只有一個leader,系統將使用RAFT協議來完成leader的選舉,leader響應client所有讀取和寫入的請求,每個副本都會有自己的wal并存儲在本地,寫操作將由leader同步復制到其他副本。
3. RMAP
RMAP包含每個Region的quorum配置信息。
基于到client的網絡延遲,每個數據中心都將有一個Rank,RT最低的數據中心將具有最高等級的Rank,數據中心Rank排名較高、有quorum member資格的將能夠接管領導權,較高等級(數據中心Rank加機器Rank)的副本將最優可能成為leader。
具體架構如圖1所示。
【Hive:性能優化】
Hive社區在SQL性能優化方面做了大量工作,在2014年取得了許多的突破和進展。
1. ORCFile存儲格式完善
豐富了ORCFile的統計信息(提供stripe level的列統計信息)以及外圍的接口,讓元數據庫中存儲的統計信息和ORCFile中的統計信息可以配合使用,進一步降低數據讀取的代價。
2. Hive On Tez
Tez是一個基于Yarn的DAG計算引擎,相比于MapReduce,Tez可以更加靈活地描述計算過程,減少中間結果落地的次數,大大提高了計算效率。Hive On Tez使得那些需要多步MapReduce計算的復雜SQL執行效率明顯提升。
3. 向量執行
向量查詢執行是Hive的一大特性,可以顯著降低一些典型查詢操作的CPU使用率,如掃描、過濾、聚合和連接。傳統Hive的查詢執行是按行進行處理,這樣效率很低,向量查詢計劃是批量處理數據,一次處理上千行數據,每列表示成一個向量,內部循環掃描這些列向量,沒有方法調用、反序列化、條件語句等額外開銷,提高了CPU指令流水線的利用率,從而大大減少CPU的使用。使用此種方式,數據存儲必須是ORC格式的。目前支持此種方式的數據類型有:tinyint、 smallint、int、bigint、boolean、float、double、decimal、date、timestamp、string。支持此種方式的表達式有:算術表達式、邏輯表達式、比較表達式、數學函數、字符串函數、用戶自定義函數、類型轉換、日期函數和if表達式。
Hive從0.13版本加入此特性。
4. 基于代價的優化器
Hive 基于代價的優化器使用了開源軟件Optiq來獲取更優的執行計劃。Optiq擁有超過50種優化手段,通過它以及數據統計信息,Hive可以方便地實現 Join最優算法、Join最優順序選擇等。同時它也提升了Hive的易用性,它的存在使得無需用戶過多參與就能得到比較優化的執行計劃,從而提升SQL 執行效率。
5. SQL 完整性
除了性能的優化工作之外,Hive社區也在持續建設SQL的完整性:例如在 where子句中使用子查詢功能(IN/NOT IN、EXIST/NOT EXIST);引入了類似Oracle/PostgreSQL的CTES語法和功能,進一步加強SQL的表達能力;加入char數據類型,完善 Decimal數據類型。
未來社區發展
社區計劃以完善當前版本為主要目標,但值得注意的是Hive On Spark工作,Spark目前發展迅速,大有與MapReduce分庭抗禮之勢。目前Hive On Spark已經完成基本功能開發并進行了大量的bugfix,估計在2015年會正式發布,值得期待。
【Tez:孵化成功】
Tez 是什么?Tez這樣一個新興的技術對大家來說比較陌生,但Tez確是Hadoop家族最有想象力的一個突破。Tez產生的主要原因是繞開 MapReduce所施加的限制。除了必須要編寫Mapper和Reducer的限制之外,強制讓所有類型的計算都滿足這一范例——例如使用HDFS存儲多個MR作業之間的臨時數據,這是一個負載。Tez主要應用了DAG計算模型,它可以將多個有依賴的作業轉換為一個作業從而大幅提升DAG作業的性能。 2014年Tez成功從Apache項目孵化器中脫離出來成為Apache的頂級項目之一,這預示著Tez開始走向成熟化和產品化。
目前Tez擁有如下幾點主要特性。
1. 比原生Hadoop MapReduce更好的性能。使用Tez的調度框架可以減少其中不必要的處理階段,如MRMR我們可以簡化為MRR,參考架構示意如圖2所示。
2. 具有表現力的數據流API。
3. 靈活:可以通過連接不同的輸入、處理器和輸出,動態地構建運行時執行器。
4. 數據類型無關性:僅關心數據的移動,不關心數據格式。
5. 對MapReduce的無縫兼容,Tez能夠運行任意MR任務,不需要做任何改動。
未來社區計劃。
2014中Tez主要發布了0.5.x系列版本,但大多以bugfix為主題,因此從這點來看2015未來社區也仍舊以穩定成熟為目標。
總結
Hadoop 社區雖然繁榮,但無法完全覆蓋各種應用場景,即使可用也未必是最優方案,尤其在一些頂級企業中,面臨的數據量都是海量的。不得不提,面對無法覆蓋的需求,有實力的企業會自主研發各種差異化的系統。如百度自己研發了類似Yarn一樣的調度系統,阿里自主研發了類似Hadoop的飛天系統,騰訊針對大數據的快速多維檢索也有Hermes這類產品。
不得不說開源成為了社會進步的主要元素。BAT在開源這塊最近幾年貢獻頗多,成為國內開源技術的引領者,這是一種進步,是一種希望,也是針尖對麥芒商業戰背后的一種合作。由衷地希望這些企業能保持這種合作,讓技術最大化地成長,讓生態圈更完善。
作者:騰訊大數據團隊,專注于騰訊大數據平臺建設和數據產品的研發,規劃和研發接入平臺軟件(如海量數據消息中間件)及廣告推薦平臺,積極推動新一代高性能計算框架的研究和落地,同時在深度學習領域有一定研究。