1. 程式人生 > >Hadoop,Spark,Storm,Docker,Mapreduce,Kafka深入解析

Hadoop,Spark,Storm,Docker,Mapreduce,Kafka深入解析

大資料,無論是從產業上,還是從技術上來看,都是目前的發展熱點。在中國,政府控制著80%的資料,剩下的多由“BAT”這樣的大公司擁有,中小企業如何構建自己的大資料系統?其他企業如何建設自己的大資料系統?

 

推薦兩大應用最廣泛、國人認知最多的Apache開源大資料框架系統:Spark  Hadoop

 

Spark:速度快、易於使用
Spark以效能見長,但是它也因易用性而小有名氣,原因是它隨帶易於使用的API,支援Scala(原生語言)、Java、Python和Spark SQL。Spark SQL非常類似於SQL 92,所以幾乎不需要經歷一番學習,馬上可以上手。

Spark是UC Berkeley AMP lab所開源的類Hadoop MapReduce的通用的平行計算框架,Spark基於map reduce演算法實現的分散式計算,擁有Hadoop MapReduce所具有的優點;但不同於MapReduce的是Job中間輸出結果可以儲存在記憶體中,從而不再需要讀寫HDFS,因此Spark能更好地適用於資料探勘與機器學習等需要迭代的map reduce的演算法。

Spark還有一種互動模式,那樣開發人員和使用者都可以獲得查詢和其他操作的即時反饋。MapReduce沒有互動模式,不過有了Hive和Pig等附加模組,採用者使用MapReduce來得容易一點。

成本上來看:Spark需要大量記憶體,但是可以使用常規數量的常規轉速磁碟。一些使用者抱怨會產生臨時檔案,需要清理。這些臨時檔案通常儲存7天,以便加快針對同一資料集的任何處理。磁碟空間相對便宜,由於Spark不使用磁碟輸入/輸入用於處理,已使用的磁碟空間可以用於SAN或NAS。

容錯上:Spark使用彈性分散式資料集(RDD),它們是容錯集合,裡面的資料元素可執行並行操作。RDD可以引用外部儲存系統中的資料集,比如共享式檔案系統、HDFS、HBase,或者提供Hadoop InputFormat的任何資料來源。Spark可以用Hadoop支援的任何儲存源建立RDD,包括本地檔案系統,或前面所列的其中一種檔案系統。

 

Hadoop:分散式檔案系統

Hadoop是Apache.org的一個專案,其實是一種軟體庫和框架,以便使用簡單的程式設計模型,跨計算器叢集對龐大資料集(大資料)進行分散式處理。Hadoop可靈活擴充套件,從單一計算機系統,到提供本地儲存和計算能力的數千個商用系統,它都能輕鬆支援。實際上,Hadoop就是大資料分析領域的重量級大資料平臺。

Hadoop由協同執行、構建Hadoop框架的多個模組組成。Hadoop框架的主要模組包括如下:

•Hadoop Common

•Hadoop分散式檔案系統(HDFS)

•Hadoop YARN

•Hadoop MapReduce

雖然上述四個模組構成了Hadoop的核心,不過還有其他幾個模組。這些模組包括:Ambari、Avro、Cassandra、Hive、Pig、Oozie、Flume和Sqoop,它們進一步增強和擴充套件了Hadoop的功能,得以擴大到大資料應用領域,處理龐大資料集。

許多使用大資料集和分析工具的公司使用Hadoop。它已成為大資料應用系統中事實上的標準。設計Hadoop的初衷是處理這項任務:搜尋和搜尋數十億個網頁,將這些資訊收集到資料庫中。正是由於渴望搜尋和搜尋網際網路,才有了Hadoop的HDFS及分散式處理引擎MapReduce。

成本上:MapReduce使用常規數量的記憶體,因為資料處理基於磁碟,所以公司得購買速度更快的磁碟和大量磁碟空間來執行MapReduce。MapReduce還需要更多的系統,將磁碟輸入/輸出分佈到多個系統上。

容錯上:MapReduce使用TaskTracker節點,它為JobTracker節點提供了心跳(heartbeat)。如果沒有心跳,那麼JobTracker節點重新排程所有將執行的操作和正在進行的操作,交給另一個TaskTracker節點。這種方法在提供容錯性方面很有效,可是會大大延長某些操作(即便只有一個故障)的完成時間。

 

總結:Spark與MapReduce是一種相互共生的關係。Hadoop提供了Spark所沒有的功能特性,比如分散式檔案系統,而Spark為需要它的那些資料集提供了實時記憶體處理。完美的大資料場景正是設計人員當初預想的那樣:讓Hadoop和Spark在同一個團隊裡面協同執行。