天天看點

三分鐘了解大資料技術發展史

我們常說的大資料技術,大緻主要起源于Google在2004年前後發表的三篇論文,其實資料處理早就存在,每個公司或者個人都有自己的大資料處理系統,并沒有形成程式設計架構和理念,而這三篇論文也就是我們熟知的大資料三駕馬車,分别是分布式檔案系統GFS、大資料分布式計算架構MapReduce和NoSQL資料庫BigTable,這三篇論文影響了當今大資料生态,可以稱得上大資料的基石,Doug cutting大佬在基于谷歌的三篇論文開發出了hadoop hdfs分布式檔案存儲、MapReduce計算架構,實際上從hadoop開源代碼中窺見大資料并沒有多麼高深的技術難點,大部分實作都是基礎的java程式設計,但是對業界的影響是非常深遠的。那個時候大多數公司還是聚焦在單機上,如何盡可能提升單機的性能,需求更貴的伺服器,谷歌通過把許多廉價的伺服器通過分布式技術組成一個大的存儲、計算叢集給業界應對存儲計算問題提供了新的發展思路。

2006年hadoop釋出後,Yahoo首先運用起來,随後越來越多大公司開始采用hadoop進行大資料存儲和計算,2008年hadoop  正式成為Apache頂級項目,許多大資料商業公司也開始出現,與此同時MapReduce程式設計模型編寫較為複雜,Yahoo内部開發出了Pig一門腳本語言,提供類SQL的文法,開發者可以用pig腳本描述要對資料集進行的操作,Pig經過編譯後會生成MapReduce程式,然後運作到Hadoop叢集中。           

Pig有個問題雖然比直接編寫MR成需要容器但是仍然需要去學習新的腳本文法,于是Facebook又發明了HIve 支援使用SQL語言進行大資料計算,然後轉化成MR計算程式運作,極大的簡化了MapReduce分布式程式的門檻,讓資料開發人員、資料分析師也能夠快速入手,是以hive迅速得到了開發者和企業的追捧。随後衆多Hadoop周邊産品開始出現,其中包括:

專門将關系資料庫中的資料導入導出到hadoop平台的Sqoop

資料收集諸如大規模日志進行分布式收集、聚合和傳輸的Flume

MapReduce工作流排程引擎Oozie、Airflow、Azkaban

在Hadoop早起MapReduce即是一個執行引擎又是一個資源排程架構,其中包含許多元件使得MapReduce非常臃腫也不利于資源複用,于是出現了Yarn可以将MapReduce的資源排程與執行引擎分離開來,随後被各類大資料産品支援,成為大資料平台上最主流的資源排程系統。

經曆了多年的發展從2016年前後MapReduce慢慢的被其他産品取代了,為什麼會被取代了?

主要有以下原因,高昂的維護成本,使用MapReduce需要嚴格的遵循Map和Reduce程式設計規範,當要處理更為複雜的業務流程,往往需要協調多個Map和多個Reduce任務。然而每一步的MapReduce都可能出錯,另外在機器學習業務場景非常複雜的,往往需要經曆資料ETL處理完成資料導入、特征處理、資料壓縮、資料備份、資料驗證、資料訓練等等,一個完整的業務流程需要多個任務,每一個Mr任務都可能出錯,都需要重試和異常處理機制,是以維護和開發這些系統比較難受。另外主要就是性能問題,機器學習疊代計算一個MapReduce程式就是進城運作,運作就需要啟動一次,帶來了大量時間性能損失,另外就是MR主要采取磁盤作為存儲媒體,中間資料都經過磁盤進行資料的讀取和結果的寫入。另外就是MapReduce程式配置麻煩,比如緩沖大小、分片多少、都需要經過時間去調試。

在2012年左右,UC伯克利AMP實驗室開發的Spark逐漸展露頭角,spark以Rdd的資料使方式、采用記憶體計算模型,再加上慢慢的Spark Sql 、Spark MLlib、Spark Graph等生态的完善,逐漸取代了MapReduce在企業應用中的地位。

一般來說像MapReduce、Spark這類架構主要處理的業務場景都被稱為批處理系統,其中的計算時間較長及面對的資料也是曆史資料,而不是線上實時資料,是以這類計算稱之為大資料離線計算,而在大資料領域還有一類需要對實時産生的資料進行即使計算,相應的有Storm、Flink、SparkStreaming、等流計算架構來處理實時線上産生的資料去滿足實時大資料的應用場景,這類計算也稱為大資料實時計算。當然大資料業務場景需要同時采用批處理技術對曆史資料進行計算,同時采用實時計算處理實時新增的資料,而像Flink這樣的計算引擎,就可以同時支援流批一體計算了。
另外除了大資料計算外,還會有解決大規模資料存儲與通路的NoSql系統也被稱之為大資料技術,比如Hbase、Cassandra、ClickHouse等。           

大資料處理的主要應用場景包括資料分析、資料挖掘、資料可視化與機器學習。資料分析主要使用 Hive、Spark SQL 等 SQL 引擎完成;資料挖掘與機器學習則有專門的機器學習架構 Spark 、TensorFlow、Mahout 、PyTorch、Alink等,内置了主要的機器學習和資料挖掘算法。 大資料要存入分布式檔案系統(HDFS),要有序排程 MapReduce 和 Spark 作業 執行,并能把執行結果寫入到各個應用系統的資料庫中,需要大資料排程平台,如何去管理整個大資料生态為業務賦能,還需要有一個大資料平台整合所有 這些大資料元件和企業應用系統。

大資料與雲原生,谷歌進化的角度依舊沒有停止從2014年谷歌又推出k8s,又給業界帶來了巨大的震撼,如今有一種趨勢,大資料開始結合雲原生已經成為一種趨勢了,可以關注下這個