Preface:
HDFS 是 Hadoop Distributed File System 的縮寫, 是 Apache Hadoop 項目中的一個子項目, 也是 Google GFS 分布式文件系統的開源實現. Hadoop 非常適用於存儲大型數據, 並使用 HDFS 作為其存儲系統. HDFS 允許用戶連接多個叢集中包含的節點, 那些叢集上分布著一些數據文件. 然後用戶可以將那些數據文件作為一個無縫文件系統來進行訪問與存儲. 對數據文件的訪問通過一種 streaming 方式進行處理, 這意味著應用程序或命令通過 MapReduce 處理模型直接執行.
HDFS 簡介:
HDFS 能提供高吞吐量的數據訪問, 非常適合大規模數據集上的應用. 它預設的數據塊大小為 64MB, 每一個數據塊在多個 DataNode 都可以設定副本, 客戶端通過 NameNode 節點得到數據塊的位置, 接著直接訪問 DataNode 以獲取數據.
HDFS 特點
HDFS 分布式文件系統與其他分布式文件系統有相同點, 也有不同點. 一個明顯的差別之處是 HDFS 的 "一次寫入, 多次讀取" (Write-once-read-many) 模型. 該模型的顯著優點是可以降低併發控制的要求, 提高數據的聚合並支持高吞吐量的訪問.
Hadoop 的優勢表現在於它已經在 20 個節點上實際應用過 (Nutch 項目). Yahoo 公司通過採用 Hadoop 架構在兩個月內搭建一個研究集群, 並使他們的客戶能很快使用這個新的架構. Hadoop 另一個優點也是缺點是它是開源的. HDFS 另一個獨特的特點是能處理分布式處理邏輯並把執行放置在數據附近, 這種特性比將數據向應用程序移動更好.
HDFS 的基本概念
1. 數據塊 (Block)
2. NameNode 與 DataNode
3. Secondary NameNode
HDFS 的目標與源由
HDFS 的設計目標有 5 個, 分別說明如下:
1. 硬體故障
2. Streaming 數據訪問
3. 大規模數據集
4. 移動計算
5. 跨硬體與 OS 平台
HDFS 的常用操作:
了解了 HDFS 的基礎知識後, 接下來要介紹一些 HDFS 的常用操作.
HDFS 下的文件操作
HDFS 實作為一個開源框架, 對於程序員來說, 並不需要了解底層的文件操作原理, 但不能不懂其提供的命令工具. 它提供一套與 Linux 文件命令長相相似的命令集來對文件操作.
<cmd> 的命令與 Unix 對應的命令名相同. 例如文件列表的命令是 hadoop fs -ls. 接下來將一一來了解這些命令的使用.
1. 創建目錄
2. 上傳文件
put 命令從本地文件系統中複製單個文件或是多個文件到 HDFS.
下面是一個實際範例:
類似的命令可以參考 copyFromLocal
3. 列出 HDFS 上的文件
使用 ls 命令列印出 HDFS 上面的文件清單.
4. 查看 HDFS 中的檔案內容
透過 cat 命令檢視 HDFS 中文件的內容
5. 將 HDFS 中的文件複製到本地系統中
使用 get 命令將 HDFS 中的文件複製到本地系統.
類似的命令為 copyToLocal.
6. 刪除 HDFS 下的文檔
透過 rm 命令刪除 HDFS 中的文件
Ps. 如果要 recursive 刪除某個目錄與其中的所有內容, 可以使用命令 rmr
7. 格式化 HDFS
透過命令 namenode 加上 -format 參數實現 HDFS 格式化.
8. 改變 HDFS 文件的副本係數
透過命令 setrep 改變某個文件的副本係數.
9. 測試 HDFS 文件
利用 test 命令測試 HDFS 文件是否存在, 大小等訊息.
更多的 fs shell 命令可以參考 Hadoop Shell Commands.
更新與管理:
HDFS 管理包括查看 HDFS 的基本訊息, 安全模式的進入與退出, 節點的添加以及負載均衡.
HDFS 的基本統計訊息
可以透過下面指令查看 HDFS 的基本統計訊息:
執行結果:
安全模式的進入與退出
NameNode 在啟動時會自動進入安全模式. 安全模式是 NameNode 的一種狀態, 在安全模式下文件系統不可以允許有任何修改. 啟動安全模式的目的是在系統啟動時檢查各個 DataNode 上的數據塊的有效性, 同時根據策略對數據塊進行必要的複製或刪除. 當數據塊最小的百分比數滿足最小副本係數時, NameNode 將會自動推出安全模式. 當系統顯示 "Name node is in safe mode.", 說明系統正處於安全模式, 這時需要等待也可以透過下面命令強迫離開安全模式:
或是使用下面命令將 HDFS 設置為安全模式:
添加節點
HDFS 的一個重要特性是可擴展性, 向 HDFS 叢集中添加數據節點是很容易實現的. 如果要動態添加 DataNode 到 已經運行的 Cluster 可以參考 這裡. 以我的範例來說, 我建立了 datanode3 環境 (192.168.80.193/ubuntud3), 接著登入 datanode3:
或這你可以使用瀏覽器登入 http://namenode_ip:50070 也可以查看 DataNode 是否有添加成功:
負載平衡
HDFS 的數據有很多 DataNode 節點, 在各個 DataNode 中分布數據時肯定存在數據塊分配不均勻的情況, 在 DataNode 節點出現故障或新增 DataNode 節點時這種情況更容易發生. 用戶可以使用start-balance.sh 工具重新平衡 DataNode 上數據塊的分布:
Supplement:
* Hadoop 管理 NameNode AND SecondaryNameNode
* Hadoop 解除 "Name node is in safe mode"
HDFS 是 Hadoop Distributed File System 的縮寫, 是 Apache Hadoop 項目中的一個子項目, 也是 Google GFS 分布式文件系統的開源實現. Hadoop 非常適用於存儲大型數據, 並使用 HDFS 作為其存儲系統. HDFS 允許用戶連接多個叢集中包含的節點, 那些叢集上分布著一些數據文件. 然後用戶可以將那些數據文件作為一個無縫文件系統來進行訪問與存儲. 對數據文件的訪問通過一種 streaming 方式進行處理, 這意味著應用程序或命令通過 MapReduce 處理模型直接執行.
HDFS 簡介:
HDFS 能提供高吞吐量的數據訪問, 非常適合大規模數據集上的應用. 它預設的數據塊大小為 64MB, 每一個數據塊在多個 DataNode 都可以設定副本, 客戶端通過 NameNode 節點得到數據塊的位置, 接著直接訪問 DataNode 以獲取數據.
HDFS 特點
HDFS 分布式文件系統與其他分布式文件系統有相同點, 也有不同點. 一個明顯的差別之處是 HDFS 的 "一次寫入, 多次讀取" (Write-once-read-many) 模型. 該模型的顯著優點是可以降低併發控制的要求, 提高數據的聚合並支持高吞吐量的訪問.
Hadoop 的優勢表現在於它已經在 20 個節點上實際應用過 (Nutch 項目). Yahoo 公司通過採用 Hadoop 架構在兩個月內搭建一個研究集群, 並使他們的客戶能很快使用這個新的架構. Hadoop 另一個優點也是缺點是它是開源的. HDFS 另一個獨特的特點是能處理分布式處理邏輯並把執行放置在數據附近, 這種特性比將數據向應用程序移動更好.
HDFS 的基本概念
1. 數據塊 (Block)
2. NameNode 與 DataNode
3. Secondary NameNode
HDFS 的目標與源由
HDFS 的設計目標有 5 個, 分別說明如下:
1. 硬體故障
2. Streaming 數據訪問
3. 大規模數據集
4. 移動計算
5. 跨硬體與 OS 平台
HDFS 的常用操作:
了解了 HDFS 的基礎知識後, 接下來要介紹一些 HDFS 的常用操作.
HDFS 下的文件操作
HDFS 實作為一個開源框架, 對於程序員來說, 並不需要了解底層的文件操作原理, 但不能不懂其提供的命令工具. 它提供一套與 Linux 文件命令長相相似的命令集來對文件操作.
<cmd> 的命令與 Unix 對應的命令名相同. 例如文件列表的命令是 hadoop fs -ls. 接下來將一一來了解這些命令的使用.
1. 創建目錄
2. 上傳文件
put 命令從本地文件系統中複製單個文件或是多個文件到 HDFS.
下面是一個實際範例:
類似的命令可以參考 copyFromLocal
3. 列出 HDFS 上的文件
使用 ls 命令列印出 HDFS 上面的文件清單.
4. 查看 HDFS 中的檔案內容
透過 cat 命令檢視 HDFS 中文件的內容
5. 將 HDFS 中的文件複製到本地系統中
使用 get 命令將 HDFS 中的文件複製到本地系統.
類似的命令為 copyToLocal.
6. 刪除 HDFS 下的文檔
透過 rm 命令刪除 HDFS 中的文件
Ps. 如果要 recursive 刪除某個目錄與其中的所有內容, 可以使用命令 rmr
7. 格式化 HDFS
透過命令 namenode 加上 -format 參數實現 HDFS 格式化.
8. 改變 HDFS 文件的副本係數
透過命令 setrep 改變某個文件的副本係數.
9. 測試 HDFS 文件
利用 test 命令測試 HDFS 文件是否存在, 大小等訊息.
更多的 fs shell 命令可以參考 Hadoop Shell Commands.
更新與管理:
HDFS 管理包括查看 HDFS 的基本訊息, 安全模式的進入與退出, 節點的添加以及負載均衡.
HDFS 的基本統計訊息
可以透過下面指令查看 HDFS 的基本統計訊息:
執行結果:
安全模式的進入與退出
NameNode 在啟動時會自動進入安全模式. 安全模式是 NameNode 的一種狀態, 在安全模式下文件系統不可以允許有任何修改. 啟動安全模式的目的是在系統啟動時檢查各個 DataNode 上的數據塊的有效性, 同時根據策略對數據塊進行必要的複製或刪除. 當數據塊最小的百分比數滿足最小副本係數時, NameNode 將會自動推出安全模式. 當系統顯示 "Name node is in safe mode.", 說明系統正處於安全模式, 這時需要等待也可以透過下面命令強迫離開安全模式:
或是使用下面命令將 HDFS 設置為安全模式:
添加節點
HDFS 的一個重要特性是可擴展性, 向 HDFS 叢集中添加數據節點是很容易實現的. 如果要動態添加 DataNode 到 已經運行的 Cluster 可以參考 這裡. 以我的範例來說, 我建立了 datanode3 環境 (192.168.80.193/ubuntud3), 接著登入 datanode3:
或這你可以使用瀏覽器登入 http://namenode_ip:50070 也可以查看 DataNode 是否有添加成功:
負載平衡
HDFS 的數據有很多 DataNode 節點, 在各個 DataNode 中分布數據時肯定存在數據塊分配不均勻的情況, 在 DataNode 節點出現故障或新增 DataNode 節點時這種情況更容易發生. 用戶可以使用start-balance.sh 工具重新平衡 DataNode 上數據塊的分布:
Supplement:
* Hadoop 管理 NameNode AND SecondaryNameNode
* Hadoop 解除 "Name node is in safe mode"
This message was edited 53 times. Last update was at 04/11/2013 21:46:33
沒有留言:
張貼留言