隨著互聯網和移動互聯網的發展,時下我們正處在一個大數據的時代。在數據金山的誘惑下,各個機構紛紛開始探索從數據中提取洞見并指導實踐的可能。而在這個需求的刺激下,在過去數年,大數據開源生態圈得到了長足的發展——在數據的整個生命周期中,從收集到處理,一直到數據可視化和儲存,各種開源技術框架林立。
以這些開源技術為基石,業內涌現出一系列令人敬佩的大數據架構實踐,而在本文中,筆者將帶大家一覽這些精彩實踐賴以成型的根本——繁華的開源大數據生態圈。
資源調度與管理
談海量數據處理,機構首先面臨的就是對系統進行擴展,其中又分為縱向擴展和橫向擴展兩種方式。首先看縱向擴展,對于大型IT機構來說,拋開成本不談,用單機去應對海量數據顯然已不切實際,因此各個機構不得不在橫向擴展上尋找出路,也就是所謂的集群計算方式。聚焦集群計算,資源調度無疑構成了整個計算模式的基礎。在這個領域,YARN無疑最為耀眼,被廣泛部署于生產環境。然而,受限于資源粒度控制和隔離性等問題,Mesos同樣備受矚目,并在一些擁有深厚技術資本的公司得以使用,比如Apple、Twitter等。
分布式文件系統
在資源調度之外,大數據這一塊最主要的基礎無疑當屬分布式文件系統,而歷經數年發展,HDFS顯然已獨占鰲頭,同時也是MapReduce、Spark和Flink等系統的默認文件系統。關于HDFS細節相信已無需詳述。
出于業務對速度的追求,在內存速度遠高于磁盤價格又逐漸降低的情況下,機構使用內存來緩存大量數據已愈來愈普遍。而基于當下內存計算框架存在的普遍挑戰,內存文件系統Tachyon得到了顯著地關注,并在大量場景中得以部署,就拿下文提到的Spark來說:可以用作不同計算框架的數據共享,以避免磁盤IO;用以緩存數據,從而避免了JVM崩潰時的數據丟失并緩解GC開銷。此外,Tachyon還被用作遠程數據緩存,服務于即席查詢。在內存為王的時代,Tachyon前景不可小覷。
分布式計算類別
時至今日,隨著業務的不斷發展,分布式計算可大體分為3個方向——批處理、流計算和即席查詢。而針對這3個不同領域,大數據生態圈內同樣存在大量值得參考的框架。
1. 批處理
在開源大數據處理上,業內最早接觸的無疑就是MapReduce,同時也是當下生產環境部署最多的計算框架。然而正如上文所述,缺乏對內存的有效利用,效率比較低的MapReduce同樣面臨著大量的競爭者,其中兩個備受關注的就是Spark和Flink。
Spark出自伯克利AMPLab之手,基于Scala實現,從開源至今已吸引了越來越多企業的落地使用,僅國內比較知名的大規模部署就有百度、阿里、騰訊等。Spark最主要抽象概念是彈性分布式數據集(RDD),在內存中儲存數據,只有在需要時才會訪問磁盤,在迭代計算上具有明顯優勢。同時需要注意的是,Spark并不是一個完全基于內存的計算平臺。
Flink于今年躋身Apache頂級開源項目,與HDFS完全兼容。Flink提供了基于Java和Scala的API,是一個高效、分布式的通用大數據分析引擎,其主要借鑒了MPP的思路。更主要的是,Flink支持增量迭代計算,從而系統可以快速地處理數據密集型和迭代任務;同時,即使內存被耗盡,通過內存管理組件、序列化框架和類型推理引擎,Flink也可以正常運行。
2.流計算
當下知名度比較高的開源流式計算框架有Storm/JStorm、Spark Streaming、Flink、S4、Samza。其中S4出現的比較早,但是基于該項目的活躍度,這里不再討論。
Storm編程模型簡單,顯著地降低了進行實時處理的難度,也是當下最人氣的流計算框架之一。同時,對比其他計算框架,Storm有一個更低的延時(毫秒級)。此外,歷經數年發展,Storm也更加成熟,在容錯性、擴展性、可靠性上都有不俗的表現。
Samza出自于LinkedIn,構建在Kafka之上的分布式流計算框架,于今年年初躋身于Apache頂級開源項目。與Storm的區別是,Samza可以直接利用YARN。
Spark Streaming。嚴格來講,Spark Streaming該歸屬于批處理,其處理機制是將數據流分解成一系列小的RDD,通過時間窗來控制數據塊的大小。 雖然Spark Streaming在實時性上略微遜色,但卻擁有更大的吞吐,并且可以輕松的與Spark其它組件結合,發揮更強大的作用。
Flink支持delta-iterations,在迭代中可以顯著減少計算。同時,在處理方式中,Flink是一行一行處理,從而能獲得與Storm類似的性能。然而,對于SQL支持和社區活躍度上,Flink都稍遜Spark一籌。
3. 即席查詢
即席查詢當下比較受關注的有Hive、SparkSQL、Presto、Impala、Drill等,其中Hive借助于Hadoop的東風,已然在生產環境得到廣泛使用。在Hive之外,關注度最高的無疑是Spark SQL。Impala出自知名大數據創業公司Cloudera,在沉寂了一段時間后,當下亦有了復蘇的跡象。Presto來自Facebook,類似于Impala的一個即席查詢工具,在該公司內部得到廣泛使用,而國內也在一些知名公司得到部署,比如美團。Drill則是Google Dremel的開源實現,于今年5月發布了里程碑版本1.0,稍顯年輕。
大數據開源生態繁花似錦
在大數據領域,除下上述幾個分布式計算類別之外,在圖處理和機器學習領域同樣存在許多優秀的開源技術框架,比如:圖計算開源技術Spark Graphx、PowerGraph、Giraph、Neo4j等;機器學習開源技術Spark MLlib、Mahout、PredictionIO等。同時,開源技術已經占領了數據從收集到可視化和存儲的整個流程,比如:用于數據收集的Flume(NG)和Sqoop,分布式消息隊列技術Kafka、RabbitMQ,用于數據可視化的HighCharts、D3.js、Kibana、Echarts等等。此外,加之Cassandra、HBase、MongoDB、Redis等NoSQL,Lucene、Solr、ElasticSearch等搜索技術,Docker等容器技術,ZooKeeper等分布式應用程序協調服務,整個大數據開源生態繁花似錦!
本文永久更新鏈接地址:http://www.linuxidc.com/Linux/2015-09/122902.htm