按照時間的早晚從大數據出現之前的時代講到現在。暫時按一個城市來比喻吧,反正Landscape的意思也大概是”風景“的意思。
早在大數據概念出現以前就存在了各種各樣的關於數學、統計學、算法、編程語言的研究、討論和實踐。這個時代,算法以及各種數學知識作為建築的原料(比如鋼筋、磚塊),編程語言作為粘合劑(比如水泥)構成了一座座小房子(比如一個應用程序),形成了一小片一小片的村庄(比如一台服務器)。這個時代村與村之間還沒有高速公路(GFS, HDFS, Flume, Kafka等),只有一條泥濘不好走的土路(比如RPC),經濟模式也是小作坊式的經濟。一開始互聯網並不發達,網速也不快,這種老土的方式完全應付得來,可是隨着社交網絡和智能手機的興起,改變了這一切。網站流量成百上千倍的提高,數據變得更加多樣化,計算機硬件性能無法按照摩爾定律穩定的提升,小村庄,小作坊生產的模式注定受到限制。人們需要更強大的模式...大數據應用領域總結來講分為離線計算和實時計算。隨着數據量的增加,OLTP模式已經難以勝任,於是OLAP逐漸成為主流。無論是實時計算還是離線計算,基本思想是相同的,即:分而治之。
起開始,人們以為只要有一個強大的中央數據庫,也就是在所有的村庄之間建一座吞吐量巨大,並且兼容並蓄(非關系型,NoSQL)的倉庫,用來中轉每個村庄生產的大量異質貨物就能夠拉動經濟的增長。可是沒過多久,人們就意識到這是一個too young to simple的想法,因為這個倉庫的大小也總是有上限的。
之后MapReduce的概念最早由google提出,用來解決大規模集群協同運算的問題,既然一台計算機性能有限,何不將他們聯合起來?其野心勃勃,希望為每個村庄都建立一條”村村通“公路,也就是GFS了,就是Google分布式文件系統的意思,將不同服務器的硬盤連接起來,在外面看起來就好像一塊巨大的硬盤。然后構建與其上的MapReduce就是一座工廠調度每個村庄的勞動力和物資,讓這些村庄作為一個經濟體運轉起來。居民變得富裕起來了。
不過,富裕起來的只有”谷歌鎮“,世界的其他村鎮仍然過着原始的生活。這個時候雅虎和Apache的一幫人本着獨樂樂不如眾樂樂的精神,仿造google的思想,創建了HDFS(Hadoop 分布式文件系統,對應GFS)、Hadoop(對應google的MapReduce),並公開了全部的藍圖,供全世界免費使用。這樣整個世界到處都建立起來了工廠,人們變得富裕起來了。這個時代,Hadoop叫做大數據基礎設施。
俗話說:飽暖思淫欲,工廠的領導不滿足於村鎮工廠的粗放型生產,也不再想雇用那么多的勞動力,所以Mahout、HBase、Hive、Pig應運而生,他們都是數控機床,加工中心,只需要幾名操作手就能夠讓整個工廠運轉起來,自此人們安居樂業,豐衣足食。
當然,少數更有野心的資本家,不滿足於現在的生產力,為了追求更高的利潤(這是資本主義的本質),開發了效率更高的系統Spark,可以10倍於Hadoop的速度生產產品,新的時代才剛剛拉開序幕...
HBase:是一個高可靠性、高性能、面向列、可伸縮的分布式存儲系統,利用HBase技術可在廉價PC Server上搭建起大規模結構化數據集群。像Facebook,都拿它做大型實時應用 Facebook's New Realtime Analytics System: HBase to Process 20 Billion Events Per Day
Pig:Yahoo開發的,並行地執行數據流處理的引擎,它包含了一種腳本語言,稱為Pig Latin,用來描述這些數據流。Pig Latin本身提供了許多傳統的數據操作,同時允許用戶自己開發一些自定義函數用來讀取、處理和寫數據。在LinkedIn也是大量使用。
Hive:Facebook領導的一個數據倉庫工具,可以將結構化的數據文件映射為一張數據庫表,並提供完整的sql查詢功能,可以將sql語句轉換為MapReduce任務進行運行。其優點是學習成本低,可以通過類SQL語句快速實現簡單的MapReduce統計。像一些data scientist 就可以直接查詢,不需要學習其他編程接口。
Cascading/Scalding:Cascading是Twitter收購的一個公司技術,主要是提供數據管道的一些抽象接口,然后又推出了基於Cascading的Scala版本就叫Scalding。Coursera是用Scalding作為MapReduce的編程接口放在Amazon的EMR運行。
Zookeeper:一個分布式的,開放源碼的分布式應用程序協調服務,是Google的Chubby一個開源的實現。
Oozie:一個基於工作流引擎的開源框架。由Cloudera公司貢獻給Apache的,它能夠提供對Hadoop MapReduce和Pig Jobs的任務調度與協調。
Azkaban: 跟上面很像,Linkedin開源的面向Hadoop的開源工作流系統,提供了類似於cron 的管理任務。
Tez:Hortonworks主推的優化MapReduce執行引擎,與MapReduce相比較,Tez在性能方面更加出色。
hadoop vs spark Hadoop:
分布式批處理計算,強調批處理,常用於數據挖掘、分析 Spark:是一個基於內存計算的開源的集群計算系統,目的是讓數據分析更加快速, Spark 是一種與 Hadoop 相似的開源集群計算環境,但是兩者之間還存在一些不同之處,這些有用的不同之處使 Spark 在某些工作負載方面表現得更加優越,換句話說,Spark 啟用了內存分布數據集,除了能夠提供交互式查詢外,它還可以優化迭代工作負載。 Spark 是在 Scala 語言中實現的,它將 Scala 用作其應用程序框架。
與 Hadoop 不同,Spark 和 Scala 能夠緊密集成,其中的 Scala 可以像操作本地集合對象一樣輕松地操作分布式數據集。 盡管創建 Spark 是為了支持分布式數據集上的迭代作業,但是實際上它是對 Hadoop 的補充,可以在 Hadoop 文件系統中並行運行。通過名為Mesos的第三方集群框架可以支持此行為。
Spark 由加州大學伯克利分校 AMP 實驗室 (Algorithms,Machines,and People Lab) 開發,可用來構建大型的、低延遲的數據分析應用程序。
雖然 Spark 與 Hadoop 有相似之處,但它提供了具有有用差異的一個新的集群計算框架。首先,Spark 是為集群計算中的特定類型的工作負載而設計,即那些在並行操作之間重用工作數據集(比如機器學習算法)的工作負載。為了優化這些類型的工作負載,Spark 引進了內存集群計算的概念,可在內存集群計算中將數據集緩存在內存中,以縮短訪問延遲.
在大數據處理方面相信大家對hadoop已經耳熟能詳,基於GoogleMap/Reduce來實現的Hadoop為開發者提供了map、reduce原語,使並行批處理程序變得非常地簡單和優美。
Spark提供的數據集操作類型有很多種,不像Hadoop只提供了Map和Reduce兩種操作。比如map,filter, flatMap,sample, groupByKey, reduceByKey, union,join, cogroup,mapValues, sort,partionBy等多種操作類型,他們把這些操作稱為Transformations。同時還提供Count,collect, reduce, lookup, save等多種actions。
這些多種多樣的數據集操作類型,給上層應用者提供了方便。各個處理節點之間的通信模型不再像Hadoop那樣就是唯一的Data Shuffle一種模式。用戶可以命名,物化,控制中間結果的分區。
引自於知乎