Hadoop入門概念


 

   Hadoop作者:Dong Cutting.

       受Google三篇論文的啟發.

   版本:

     Apache:官方版本

     Cloudera:官方版本的封裝,優化,打很多patch,商業版本

     HortonWorks:基於apache的版本進行了集成

 

hadoop是什么?

    一個適合大數據的分布式存儲和計算平台.

    是一個平台,分布式的存儲和分布式的計算,在平台之上跑的一般都是大數據.抽象的層面理解hadoop就是一個分布式的平台.

什么是分布式的存儲系統?

    數據實際被分散存儲,但是對於開發人員而言感覺不到.

什么是分布式計算?

    一台tomcat不行的話,我們用多台tomcat來應對,用戶的請求就被分散到多台機器上去了,一定要有一個請求的分發機制.

什么是分布式計算系統?

    用戶的請求過來之后,被分散到多台機器上運行,但是開發人員感覺不到,不需要去管,是不是真的在很多機器上在運行,對用戶操作透明的計算系統就是一種分布式計算系統.

    分布式存儲和計算的平台是跨操作系統的,封裝了操作系統,操作系統的差異對我們用戶來說是透明的,適合大數據的.小數據放在hadoop上計算,效率低

什么樣的數據可以稱為大數據呢?

    上百G,PB,TB級別的,傳統的應用搞不定的數據

為什么要有有分布式存儲?

    數據在單服務器下存儲搞不定了,這時候,逼着我們要把數據存在很多台機器上存儲,但是,很多台服務器對我們開發人員而言必須要知道他們,識別他們,才處理它上邊的數據,對我們開發人員而言我們期望有一個透明的系統去管理分布式存儲

為什么要有分布式計算?

    集中式計算的瓶頸是在磁盤IO上.把數據分不到多台服務器上存儲,計算請求分散到多台服務器上同時執行,計算任務很少,

 

Hadoop核心項目:

    HDFS:Hadoop Distributed File System分布式文件系統,用來管理文件的.在hdfs上存儲的數據是分散很多服務器之上的,但是用戶感覺不到,文件真的分布在很多台機器上,就像一台機器上似的.

    MapReduce:分布式並行計算框架.實現的是分布式計算,大數據分布在很多台服務器上,需要它去並行地去執行

      Map:在每個分散的機器上進行計算的那部分.Reduce:主要做最后的一個匯總

HDFS架構:

    hdfs和MapReduce都是主從結構.管理與被管理這種關系,分為管理者和被管理者.被管理者通常做具體的事物的,管理者通常是組織,協調,管理工作的.

      節點:網絡環境中的每一台服務器.

    主節點:只有一個NameNode,負責各個節點數據的組織管理,

    從節點:有很多個DataNode,負責存儲數據,數據節點

     NameNode對外,DataNode對內,NameNode接收用戶的操作請求,NameNode負責協調管理,不是真正的存放數據,會把數據分散到各個節點上去存儲

  海量數據是單節點處理不了的,所以我們的數據需要存放在多台服務器上,作為管理的NamNode知道數據具體存放在DataNode的哪些節點上面

    NameNode如何知道數據存放在DataNode節點的位置的呢?

      NameNode對外暴漏的就是目錄的文件系統

    用戶要進行hdfs操作的時候,首先和NameNode打交道,NameNode上邊有一個文件系統的目錄結構,用戶通過看文件系統的目錄結構,就知道我們的數據是存放在那個路徑下面,文件叫什么名字,文件的路徑,文件有多大,我們的數據具體存放在那些節點上,客戶是不需要關心的

    NamNode負責:接收用戶操作請求,是用戶操作的入口.維護文件系統的目錄結構,稱作命名空間.

    DataNode負責:存儲文件數據

MapReduce架構:

     主節點執行一個管理者的角色,從節點執行一個被管理者的角色.管理和被管理完成數據的一個計算(任何對數據的處理都叫做計算,查詢,過濾,數據的檢索..利用cpu和內存進行數據處理).

    主節點只有一個:JobTracker,

    把我們用戶的操作請求,拿過來,分發給TaskTracker,接收用戶提交的計算任務,把計算任務分配到TaskTracker去執行,監控TaskTracker的執行情況

    從節點有很多個:TaskTracker,

    是我們自己安裝部署的,通常和DataNode在一起,執行用戶的操作,運行時根據TaskTracker上DataNode的數據只執行一部分,執行程序時,去找DataNode本地的數據,然后加載DataNode上邊的數據,去運行

    MapReduce進行計算時,處理的數據就是用戶提交的這些數據

    TaskTracker通過反射將我們的程序讀進內存中,然后在jvm中運行,程序在含有數據的DataNode的節點上運行

    TaskTracker負責用戶提交的計算任務

    節點的數量越多,整體的計算時間越短,JobTracker管理執行任務的TaskTracker

    NameNode和DataNode負責完成數據存儲

    JobTracker和TaskTracker完成數據的計算

    NameNode和JobTracker不一定非要在同一台機器上,在生產中,通常是分開的,因為用戶的請求,NameNode也接收,JobTracker也接收,為了防止NameNode操作慢,所以NameNode  最好是一台機器,充分利用cpu和內存,JobTracker也是一台機器,都是獨立的

    DataNode和TaskTracker通常是同一台機器,是因為TaskTracker在運行的時候,可以執行本地的數據,如果不在一起,就要經過網絡傳播(網絡一不穩定,二耗時) DataNode只管理本地,  不管理遠程

    JobTracker和TaskTracker不從HDFS上讀數據一樣可以去做事情

    用戶存儲數據首先和NameNode打交道,用戶的數據直接和DataNode打交道,繞過了NameNode,就是說用戶在進行存儲的時候,去問NameNode我要去哪里讀寫數據,一旦用戶知道了,  就沒有NameNode的事了,直接去DataNode那去處理了.假設用戶處理數據一定經過NameNode,那么兩三個用戶上來之后,NameNode內存幾乎全爆了,因為是海量數據,內存肯定是裝不下  的.只是向NameNode申請block塊和blockId

    架構的設計是讓數據傳輸的時候不經過NameNode,所以架構沒有瓶頸

Hadoop的特點:

    擴容能力(Scalable):能可靠(reliably)地存儲和處理PB級別的數據.這就是存儲數據的,數據裝不了了,再增加節點就可以了

    成本低(Economical):可以通過普通機器組成的服務器群來分發以及處理數據.這些服務器群總即可達數千個節點.

    高效率(Efficient):通過分發數據,hadoop可以在數據所在節點上並行地(parallel)處理他們,這使得處理非常的迅速.

    可靠性(Reliable):hadoop能夠自動地維護數據的多份副本,並且在任務失敗后能夠自動地重新部署(redeploy)計算任務.JobTracker可以監控TaskTracker運行情況,一旦TaskTracker崩了,在其他的節點上再起一個任務,可以保證任務的執行

Hadoop集群的物理分布: 

    主節點只有一個,從節點有很多個,並且TaskTracker和DataNode都在一起,實際部署中JobTracker和NameNode各有一台機器,集群需要擴展的時候只需要增加從節點就可以了,機器之  間通信通過網絡進行傳輸.用戶通過一個外部網絡連接到我們的這個局域網中

單節點的物理結構:

        

    無論是主節點或者是從節點都有一個共同點,他們都是一台服務器,上邊裝的都是Linux操作系統,Linux之上又裝了JVM,在虛擬機上跑的都是一些java程序.如果只有一個java程序運行的  話,叫做集中式的運行環境,如果會開啟很多的java程序去運行的話,它就是一個分布式應用環境,hadoop運行時,會有很多的java程序

    主節點和從節點的區分:

      根據服務上運行的java程序的不同區分,有的程序扮演主節點,有的程序扮演從節點.一個節點可以有多個java進程, 也可以有一個,這些節點可以在一個機器上,也可以在很多台機器上  分散的.

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM