1.開機啟動Hadoop,輸入命令:

檢查相關進程的啟動情況:

2.對Hadoop集群做一個測試: 
可以看到新建的test1.txt和test2.txt已經成功地拷貝到節點上(偽分布式只有一個節點,如果是完全分布式,則會顯示3個節點都拷貝成功)。這證明HDFS工作正常,其中,hadoop dfs –put [本地地址] [hadoop目錄] 代表將本地的地址目錄存放到hadoop目錄下;hadoop dfs –ls [文件目錄] 則表示查看指定目錄下的內容。更多Hadoop的常用指令請參考:http://blog.chinaunix.net/uid-10915175-id-3258669.html。
接下來測試MapReduce:

這里運行了一個Java例子,jar代表運行java程序,wordcount表示運行jar包里面的wordcount功能,in代表原始數據地址,out代表目的地址(新的目錄)。
運行 bin/hadoop dfs -ls 命令,列出根目錄的所有內容;運行bin/hadoop dfs -cat .out/* 可以看到文件內容的統計。

也可以通過WEB來了解Hadoop的活動:通過瀏覽器和http訪問jobtracker所在節點的50030端口監控jobtracker,通過瀏覽器和http訪問namenode所在節點的50070端口監控集群。
那么在操作系統Linux的角度,文件保存到哪里了呢?
查看HADOOP_HOME下的data目錄下的current目錄下,會發現一大堆blk開頭的文件,后綴名為.meta的是元數據,而沒有此后綴的文件是寫入的數據,在Linux角度看,這些數據根本打不開。
3.HDFS設計基礎與目標:
(1) 硬件錯誤是常態,因此需要冗余。原因可能是內存不穩定,CPU過熱,硬盤壽命到期,硬盤介質損壞等等。
(2) 流式數據訪問,即數據批量讀取而非隨機讀寫,Hadoop擅長做的是數據分析而不是事務處理,專為大數據而生。
(3) 大規模數據集。
(4) 簡單一致性模型。為了降低系統的復雜度,對文件采用一次性寫多次讀的邏輯設計,即如果是文件,一經寫入、關閉,就再也不能修改。
(5) 程序采用"數據就近"原則分配節點執行。
4.HDFS體系結構:
包括NameNode、DataNode、事務日志、映像文件以及SecondaryNameNode。

NameNode:
(1) 管理文件系統的命名空間。
(2) 記錄每個文件數據塊在各個DataNode上的位置和副本信息。
(3) 協調客戶端對文件的訪問。
(4) 記錄命名空間內的改動或空間本身屬性的改動。
(5) NameNode使用事務日志記錄HDFS元數據的變化。使用映像文件存儲文件系統的命名空間,包括文件映射,文件屬性等。
DataNode:
(1) 負責所在的物理節點的存儲管理。
(2) 一次寫入,多次讀取(不修改)。
(3) 文件由數據塊組成,典型的塊大小是64MB。
(4) 數據塊盡量散步到各個節點。
讀取數據的流程:
(1) 客戶端首先從NameNode獲得組成這個文件的數據塊位置列表。
(2) 根據列表知道存儲數據塊的DataNode。
(3) 訪問DataNode獲取數據。
由此可以看出NameNode並不參與數據實際的傳輸。
HDFS的可靠性:
(1) 冗余副本策略。可以在hdfs-site.xml中設置復制因子指定副本數量,所有數據塊都有副本,DataNode啟動時,會遍歷本地文件系統,產生一份hdfs數據塊和本地文件的對應關系列表(blockreport)匯報給NameNode。
(2) 機架策略。集群一般放在不同的機架上,機架之間帶寬要比機架內帶寬要小,HDFS有"機架感知"功能,Hadoop可以通過節點之間互相傳遞數據包,就可以知道兩個節點是不是在同一個機架上。一般在本機架存放一個副本,在其他機架在存放別的副本,這樣可以防止機架失效時丟失數據,也可以提高帶寬利用率。
(3) 心跳機制。NameNode周期性從DataNode接受心跳信號和塊報告,NameNode根據塊報告驗證元數據,沒有按時發送心跳的DataNode會被標記為宕機,不會再給它任何I/O請求。如果DataNode失效造成副本數量下降,並且低於預先設置的閾值,NameNode會檢測出這些數據塊,並在合適的時機進行重新復制。引發重新復制的原因還包括數據副本本身損壞,磁盤錯誤,復制因子被增大等等。
(4) 安全模式。NameNode啟動時會先經過一個"安全模式"階段,在這個階段,不會產生數據寫操作,NameNode會收集各個DataNode的報告,當數據塊達到最小副本數以上時,會被認為是"安全"的。在一定比例(可設置)的數據塊被確定為安全后,再過若干時間,安全模式結束,當檢測到副本數不足時,該塊會被復制,直到達到最小副本數。
(5) 校驗和。在文件創立時,每個數據塊都產生校驗和,校驗和會作為單獨一個隱藏文件保存在命名空間下,客戶端獲取數據時可以檢查校驗和是否相同,從而發現數據塊是否損壞。如果正在讀取的數據塊損壞,則可以繼續讀取其他副本。
(6) 回收站。刪除文件時,其實是放入回收站/trash,回收站里的文件是可以快速恢復的。可以設置一個時間閾值,當回收站里文件的存放時間超過這個閾值,就會被徹底刪除,並且釋放占用的數據塊。
(7) 元數據保護。映像文件和事務日志是NameNode的核心數據,可以配置為擁有多個副本。副本會降低NameNode的處理速度,但增加安全性。NameNode依然是單節點,如果發生故障仍然要手動切換。
(8) 快照機制。0.20.2還未實現。支持存儲某個時間點的映像,需要時可以使數據重返這個時間點的狀態。
5.HDFS的一些操作(命令行,先進入HADOOP_HOME目錄下):
(1) 列出HDFS下的文件: bin/hadoop dfs -ls [文件目錄](不寫則默認hadoop的根目錄)
(2) 上傳文件到HDFS: bin/hadoop dfs -put [本地目錄] [hadoop目錄]
(3) 把HDFS的文件復制到本地: bin/hadoop dfs -get [hadoop目錄] [本地目錄]
(4) 刪除HDFS下的文檔: bin/hadoop dfs -rmr [文件目錄]
(5) 查看HDFS下某個文件的內容: bin/hadoop dfs -cat [文件路徑]
(6) 查看HDFS基本統計信息: bin/hadoop dfsadmin -report
(7) 進入和退出安全模式: bin/hadoop dfsadmin -safemode enter
bin/hadoop dfsadmin -safemode leave
怎樣增加新的節點?
(1) 在新節點安裝好Hadoop,配置好環境。
(2) 把NameNode的有關配置文件復制到該節點。
(3) 修改masters和slaves文件,增加該節點。
(4) 設置ssh免密碼進出該節點。
(5) 單獨啟動該節點上的DataNode和TaskTracker(hadoop-daemon.sh start datanode/tasktracker)。
(6) 運行start-balancer.sh進行數據負載均衡。
啟動某些特定后台進程而非所有后台進程:
start-all.sh是啟動所有進程。start dfs daemons是啟動NameNode,start mapred daemons是啟動JobTracker等等。
6.HDFS的一些操作(API):
寫文件 create
讀取文件 open
刪除文件delete
創建目錄 mkdirs
刪除文件或目錄 delete
列出目錄的內容 listStatus
顯示文件系統的目錄和文件的元數據信息 getFileStatus
