Hadoop做者:Dong Cutting.java
受Google三篇論文的啓發.apache
版本:tomcat
Apache:官方版本服務器
Cloudera:官方版本的封裝,優化,打不少patch,商業版本網絡
HortonWorks:基於apache的版本進行了集成架構
hadoop是什麼?框架
一個適合大數據的分佈式存儲和計算平臺.jvm
是一個平臺,分佈式的存儲和分佈式的計算,在平臺之上跑的通常都是大數據.抽象的層面理解hadoop就是一個分佈式的平臺.分佈式
什麼是分佈式的存儲系統?oop
數據實際被分散存儲,可是對於開發人員而言感受不到.
什麼是分佈式計算?
一臺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進程, 也能夠有一個,這些節點能夠在一個機器上,也能夠在不少臺機器上 分散的.