hadoop的體系結構
NameNode - 主節點主服務器
SecondaryNameNode– 是輔助nameNode
DataNode -數據保存用的
TaskTracker – 接收任務
JobTracker - 分數據 -100M Datanode1,DataNode2,DataNode3
Master:主節點,至關於項目經理
Slave:從節點至關於PG
Hadoop只能運行在linux系統上:
在linux系統上裝JVM虛擬機,而後,上面運行了三個進程
SecondaryNameNode,Jobtracter,NameNode這三個進程,這三個都是java進程
其中,NameNode是最重要的一個java進程,他決定了主節點,在從節點上沒有這個進程
SecondaryNameNode至關於NameNode的祕書,協助NameNode完成工做, Jobtracter任務跟蹤進程,用來跟蹤任務
而且把任務交給從節點.
能夠看到一般應用都會有一個主節點和一個從節點,而且從節點中也有兩個java進程,由於在裝有從節點的服務器上,也裝的是linux系統,
在linux系統上裝有jvm,而後跑了兩個java進程,一個是: Jobtracter,另外一個是:DataNode數據節點,這個進程用來處理和數據有關的任務.
注意在hadoop系統中,只有一個主節點,其餘的都屬於從節點.
l NameNode:這是hadoop的守護進程(注意是進程JVM)。負責記錄文件是如何分割成數據塊,以及這些數據塊分別存儲到哪些數據節點上。
對內存進行集中管理。NameNode在整個hadoop中只有一個。一旦NameNode服務器宕機,整個系統將沒法運行。
l DataNode:集羣中的每一個從服務器都運行一個DataNode後臺程序。這個後臺程序負責將HDFS數據塊寫到本地的文件系統。
l Secondary NomeNode:用來監控HDFS狀態的輔助後臺程序。如保存NameNode的快照。
l JobTracker:用戶鏈接應用程序和hadoop。每個hadoop集羣中只一個 JobTracker,通常它運行在Master節點上。
l TaskTracker:負責與DataNode進行結合。
hadoop namenode -format [格式化之後生成的目錄 ,即hdfs的目錄。]
啓動hadoop
若是發現有5個java進程,則說明啓動成功:
由於這裏咱們用了一臺機器,因此這臺機器既充當了主節點,又充當了從節點.
用jps命令,能夠查看啓動了哪些java進程.
jps
ResourceManager(hadoop2.x封裝了JobTracker、TaskTracker)
NameNode
NodeManager
DataNode
SecondaryNameNode[這個進程,不知個人怎麼沒有啓動起來]
hdfs概念與命令
HDFS是hadoop Distributed file system的縮寫,是hadoop的分佈式文件系統。
HDFS由hadoop來管理,它不一樣於普通的文件系統,不能直觀的查找文件,必需要經過hadoop命令操做HDFS。
HDFS是一個主從結構的體系,一個HDFS集羣是由一個名字節點,它是一個管理文件的命名空間和調節客戶端訪問文件的主服務器,
固然還有的數據節點,一個節點一個,它來管理存儲。HDFS暴露文件命名空間和容許用戶數據存儲成文件。
內部機制是將一個文件分割成一個或多個的塊,這些塊存儲在一組數據節點中。
NameNode名字節點操做文件命名空間的文件或目錄操做,如打開,關閉,重命名,等等。它同時肯定塊與數據節點的映射。
DataNode數據節點來負責來自文件系統客戶的讀寫請求。
數據節點同時還要執行塊的建立,刪除,和來自名字節點的塊複製指示。
名字節點和數據節點都是軟件運行在普通的機器之上,機器典型的都是linux,HDFS是用java來寫的,
任何支持java的機器均可以運行名字節點或數據節點,利用java語言的超輕便型,很容易將HDFS部署到大範圍的機器上。
典型的部署時將有一個專門的機器來運行名字節點軟件,機羣中的其餘機器運行一個數據節點實例。
體系結構排斥在一個機器上運行多個數據節點的實例,可是實際的部署不會有這種狀況。
集羣中只有一個名字節點極大地簡單化了系統的體系。名字節點是仲裁者和全部HDFS的元數據的倉庫。系統設計成用戶的實際數據不通過名字節點。
一、hadoop下的文件操做命令
1 :列出hdfs文件
~# hadoop dfs –ls /或~# hadoop fs –ls / 或hdfs dfs -ls /
查看user下的內容
hadoop fs –ls /user
這裏查看這個文件還有一個方法就是在網頁中查看:進入http://127.0.0.1:50070,也就是hdfs的管理系統
而後點擊相應的文件目錄就能夠了.
這裏須要注意:當查看hadoop文件系統的時候須要用命令hadoop fs –ls 這樣前面加上hadoop fs 由於假如
直接用ls的話,那麼就是指模擬出來的linux文件系統中的東西
2:將文件上傳到hdfs
這裏演示將windows系統中的一個credream.txt文件上傳到hadoop的hdfs分佈式系統中,
首先能夠經過cd c:進入本地的windows的c盤
而後cd..走到系統的根目錄
Ls能夠看到當前文件系統的盤符
Cd c
Ls
能夠列出c盤中的文件
:
xiaofeng@xiaofeng-PC/cygdrive/c
下面經過命令把本地c盤中的credream.txt文件傳到hadoop hdfs文件系統中的user目錄下
下面是命令行:
注意:這裏hdfs dfs –put credream.txt /user/credream.txt
就是把c盤的文件上傳到hadoop的hdfs文件系統的user目錄下.
hdfs dfs –put credream.txt,這個指的是本地c盤,由於能夠看到cygdrive/c指的就是c盤了,因此沒有另外指定本地的文件目錄
並且能夠對文件進行重命名:
hdfs dfs –put credream.txt /user/hadoop.txt就是把本地c盤的credream.txt文件上傳到hadoop的hdfs系統並進行重命名.
echo hello credream > test.txt就是指的是在本地的C盤進行建立一個test.txt文件,可是若是是win7系統的話,那麼會有
權限問題
能夠看到在c盤不能夠,可是在d盤就能夠建立test.txt文件了
這是把本地D盤的test.txt文件上傳到hdfs文件系統的/user/目錄下不改變文件的名字
這裏是上傳整個目錄到hdfs文件系統的/user/目錄下
mkdir hadooptest 在本地d盤建立一個hadooptest文件夾
cp test.txt hadooptest就是把test.txt文件拷貝到hadooptest文件夾中
hadoop fs –put hadooptest /user/
把hadooptest文件夾上傳到hdfs文件系統的/user/目錄下
使用hadoop fs –copyFromLocal test.txt /user/testa.txt
將本地的test.txt文件拷貝一份而後上傳到hdfs文件系統中而且重命名爲testa.txt文件
而後經過hadoop fs –ls /user 查看hdfs文件系統中user目錄下的文件
3:將hdfs中的文件複製到本地系統中
經過get命令,便可以操做文件也能夠操做文件夾:
操做一個文件,將hdfs上的文件/wj/a.txt保存到本地,並取名爲b.txt
如下下載整個文件到當前目錄下來,注意最後的一個點
get命令例子二:
經過hadoop fs –get /user/testa.txt testb.txt 就是把hdfs中的user/下的testa.txt文件下載到本地並重命名
hadoop fs –get /user/testa.txt . 直接把hdfs中的user/下的testa.txt文件下載到本地 .表明直接到本地不進行重命名
hadoop fs –get /user/hadooptest . 直接把hdfs中的user/下的hadooptest文件夾下載到本地 .表明直接到本地不進行重命名
4:刪除hdsf下的某個文檔
這裏是刪除本地的文件,和linux下的命令同樣
刪除文件夾的時候要用遞歸
這裏是刪除hdfs文件系統中的文件和文件夾的例子:
hadoop fs –rm /user/testa.txt 刪除user文件夾下的testa.txt文件
hadoop fs –rm /user/*.txt 刪除user文件夾下全部.txt的文件
hadoop fs –rm /user/hadooptest 這樣是不能刪除一個文件夾的要用遞歸
hadoop fs –rmr user/hadooptest 這個命令能夠刪除文件夾和文件夾中的文件遞歸刪除 java