天天看點

Hadoop--初識Hadoop

什麼是hadoop?

搞什麼東西之前,第一步是要知道what(是什麼),然後是why(為什麼),最後才是how(怎麼做)。但很多開發的朋友在做了多年項目以後,都習慣是先how,然後what,最後才是why,這樣隻會讓自己變得浮躁,同時往往會将技術誤用于不适合的場景。

hadoop架構中最核心的設計就是:mapreduce和hdfs。mapreduce的思想是由google的一篇論文所提及而被廣為流傳的,簡單的一句話解釋mapreduce就是“任務的分解與結果的彙總”。hdfs是hadoop分布式檔案系統(hadoop distributed file system)的縮寫,為分布式計算存儲提供了底層支援。

mapreduce從它名字上來看就大緻可以看出個緣由,兩個動詞map和reduce,“map(展開)”就是将一個任務分解成為多個任務,“reduce”就是将分解後多任務處理的結果彙總起來,得出最後的分析結果。這不是什麼新思想,其實在前面提到的多線程,多任務的設計就可以找到這種思想的影子。不論是現實社會,還是在程式設計中,一項工作往往可以被拆分成為多個任務,任務之間的關系可以分為兩種:一種是不相關的任務,可以并行執行;另一種是任務之間有互相的依賴,先後順序不能夠颠倒,這類任務是無法并行處理的。回到大學時期,教授上課時讓大家去分析關鍵路徑,無非就是找最省時的任務分解執行方式。在分布式系統中,機器叢集就可以看作硬體資源池,将并行的任務拆分,然後交由每一個空閑機器資源去處理,能夠極大地提高計算效率,同時這種資源無關性,對于計算叢集的擴充無疑提供了最好的設計保證。(其實我一直認為hadoop的卡通圖示不應該是一個小象,應該是螞蟻,分布式計算就好比螞蟻吃大象,廉價的機器群可以匹敵任何高性能的計算機,縱向擴充的曲線始終敵不過橫向擴充的斜線)。任務分解處理以後,那就需要将處理以後的結果再彙總起來,這就是reduce要做的工作。

hadoop解決兩個問題海量資料存儲、海量資料分析

提供了一個可靠的共享存儲和分析系統,hdfs(hadoop distributed file system)實作存儲,mapreduce實作分析處理。這兩塊是hadoop的核心。

hadoop具有最大化利用記憶體、最大化利用磁盤、最大化利用cpu的特點。

hbase:nosql資料庫,最大化利用記憶體。

hdfs:架構設計原則(最大化利用磁盤):

    block(檔案塊):一個檔案分塊預設64m。

    namenode:儲存檔案系統的目錄資訊,讀取資訊。資料節點很多時,容易成為系統的瓶頸,避免這個問題,實作namenode一般都儲存到記憶體中,同僚持久化一部分資訊在磁盤上,以備資料丢失。

    datanode:用于存儲block。

    hdfs的ha政策:2.x開始hadoop支援namenode的active-standy模式,當機時standy切換成active模式為整個應用提供服務。

Hadoop--初識Hadoop

mapreduce:

最大化利用cpu,分析處理大規模的資料集

通過圖檔可以簡單了解,将同一操作,放在相當于多台處理器上并行執行,每個處理器執行1部分執行後,在将結果彙總在一起,這樣減少了很多的時間。

Hadoop--初識Hadoop

繼續閱讀