前言
HDFS 分散式檔案系統不只具備高效能的存取運作, 更不會受限於單一台 DataNode 運算主機的硬碟空間容量, 可輕易的依需求增加 DataNode 運算主機來擴增 HDFS 的容量. 而分散式的儲存模式, 更提高了資料保存的容錯性, 不過在使用 HDFS 之前, 必須先設定 "core-site.xml", "hdfs-site.xml", "slaves" 和 "hadoop-env.sh" 這幾個檔案. 在完成初始化設定之後, 才能順利啟用 HDFS 分散式檔案系統.
設定 core-site.xml 檔案
"core-site.xml" 是 HDFS 分散式檔案系統的系統核心設定檔, 透過此檔案能夠讓 Client 端與負責執行 NameNode 服務的主機順利連結. 在實體主機的終端視窗, 利用下面命令開啟 "core-site.xml" 進行編輯設定:
設定內容中的 "fs.default.name" 是用來指定負責執行 NameNode 服務的主機, 在此我們指定了 'nn' 運算主機. 只後 Client 端就會利用此設定檔與執行 NameNode 服務的 nn 運算主機進行連結. 底下是關於此設定檔的某些重要設定說明:
* fs.default.nameHDFS 分散式檔案系統不只具備高效能的存取運作, 更不會受限於單一台 DataNode 運算主機的硬碟空間容量, 可輕易的依需求增加 DataNode 運算主機來擴增 HDFS 的容量. 而分散式的儲存模式, 更提高了資料保存的容錯性, 不過在使用 HDFS 之前, 必須先設定 "core-site.xml", "hdfs-site.xml", "slaves" 和 "hadoop-env.sh" 這幾個檔案. 在完成初始化設定之後, 才能順利啟用 HDFS 分散式檔案系統.
設定 core-site.xml 檔案
"core-site.xml" 是 HDFS 分散式檔案系統的系統核心設定檔, 透過此檔案能夠讓 Client 端與負責執行 NameNode 服務的主機順利連結. 在實體主機的終端視窗, 利用下面命令開啟 "core-site.xml" 進行編輯設定:
設定內容中的 "fs.default.name" 是用來指定負責執行 NameNode 服務的主機, 在此我們指定了 'nn' 運算主機. 只後 Client 端就會利用此設定檔與執行 NameNode 服務的 nn 運算主機進行連結. 底下是關於此設定檔的某些重要設定說明:
* hadoop.tmp.dir
* io.file.buffer.size
* io.native.lib.available
* ipc.client.connection.maxidletime
* ipc.server.tcpnodelay
* ipc.client.tcpnodelay
設定 hdfs-site.xml 檔案
"hdfs-site.xml" 是 HDFS 分散式檔案系統的 "運作設定檔", 透過此檔案可以設定資料區塊的切割大小, 複本數量等等. 使用下面指令進行編輯:
設定內容中 "dfs.replication" 是用來設定資料區塊含複本的數量, 這邊設定為 2 說明一個資料區塊要產生一個複本, 預設值為 3. 接著設定以下內容:
"dfs.namenode.name.dir" 就是 NameNode 用來存放 HDFS 系統的 Metadata 儲存目錄, 而 "dfs.datanode.data.dir" 則是 DataNode 用來存放資料區塊的儲存目錄. 未來在啟動 HDFS 分散式檔案系統時, 會依據設定的儲存路徑在 nn 運算主機自動產生 "nn" 資料夾; 而在 dn01 與 dn02 運算主機中自動產生 "dn" 資料夾. 部分重要設定項目說明如下:
* dfs.replication
* dfs.replication.max
* dfs.namenode.replication.min
* dfs.blocksize
* dfs.namenode.name.dir
* dfs.datanode.data.dir
* dfs.namenode.checkpoint.dir
* dfs.namenode.checkpoint.period
* dfs.namenode.http-address
指定 DataNode 運算主機
HDFS 分散式檔案系統預設是透過 Hadoop 官方套件中的 "start-dfs.sh" 這支 Bash Script 來啟動, 並讀取 "slaves" 檔案中的設定, 查看哪幾台主機主要負責執行 DataNode 的服務, 並使用 SSH 遠端管理連線, 自動登入指定的 DataNode 運算主機啟動 DataNode 服務.
在實體主機視窗使用下面命令開啟 "slaves" 檔案進行編輯設定:
HDFS 運作資源規劃
Hadoop 分散式運算平台是由 Java 語言撰寫, 這也代表 NameNode 與 DataNode 其實就是 Java 程式! 所以在實際應用上, 還必須在 "hadoop-env.sh" 中設定執行時 JVM 使用的記憶體大小. 請輸入下面指令開啟該檔案並進行編輯設定:
當 HDFS 系統啟動時, 存放 Log 檔的目錄中會產生兩種類型檔案. 第一種是副檔名為 ".log" 的檔案, 由 NameNode 產生, 其內容包含 Hadoop 運算主機的運作資訊, 如 NameNode 主機的運作紀錄等, 我們可以透過此類型的 log 檔來判斷 HDFS 系統的故障原因; 第二種是副檔名為 ".out" 的檔案, 由 HDFS 系統的啟動程式 "start-dfs.sh" 產生, 此檔案室用來存放 ulimit (User limits) 的資訊, 包括可以開啟的檔案數量, 可使用的記憶體總量等.
初始化 HDFS 分散式檔案系統
接下來我們必須初始化 HDFS 系統的 "Metadata", 也就是我們俗稱的檔案系統 "格式化", 才能開始使用 HDFS 分散式檔案系統. 輸入以下指令啟動並登入負責執行 NameNode 服務的nn 虛擬主機開始格式化 HDFS 分散式檔案系統: (Ctrl+a, q 來離開 Console)
接著使用命令 tree 檢視生成目錄內容:
"fsimage" 開頭的檔案是用來存放 HDFS 系統中, 所有檔案及目錄的屬性資料, 其他檔案說明會在後面介紹.
第一次啟動 HDFS 分散式檔案系統
格式化之後就可以正式來啟動 HDFS 分散式檔案系統了. 在這之前請先啟動 NameNode 與 DataNode. 接著使用 Console 登入 nn 運算主機:
第一次啟動 HDFS 檔案系統, NameNode 會檢查是否有新的 DataNode 運算主機, 並把 Metadata 目錄中的 "VERSION" 檔傳送給新的 DataNode 運算主機, 而在該檔案中有一個相當重要的參數 "clusterID", 若下次重新啟動 HDFS 檔案系統時, DataNode 就會把 "clusterID" 傳送給 NameNode, 以此判斷是否隸屬於相同的 Hadoop 分散式運算平台.
接著來看 DataNode 運算主機的 "clusterID":
需要注意的是當 NameNode 服務主機若重新格式化, "VERSION" 檔中的 "clusterID" 將會改變! 擁有原先 clusterID 的 DataNode 運算主機將無法被判斷為隸屬於相同的 Hadoop 分散式平台, 這將會造成 DataNode 運算主機無法與 NameNode 連線的狀況. 後面的介紹會進一步說明解決方法. 若不需要使用其他操作, 可以使用下面命令關閉 HDFS 檔案系統服務:
沒有留言:
張貼留言