顯示具有 Big Data 研究 標籤的文章。 顯示所有文章
顯示具有 Big Data 研究 標籤的文章。 顯示所有文章

2015年10月9日 星期五

[ Big Data 研究 ] 07 建置 YARN 分散式運算系統 - 新增與移除 NodeManager

Introduction
在第六章我們知道如何新增一台 DataNode 運算主機, 以擴充 HDFS 分散式檔案系統的儲存空間, 並提升資料區塊和副本配置的分散率, 進而提升資料讀取的效能, 且新增的機器還可以單純的執行 HDFS 的功能即可, 因此新增的機器在硬體與規格上可著重儲存空間的大小與效能.

既然可以新增一台機器來擴充 HDFS 的空間, 當然也可以新增機器來提升 YARN 的運算資源與效能, 而新增的機器也可單純指定為 NodeManager, 所以依據需求, 這台機器在硬體規格上就可以著重在運算資源的效能, 如強大的 CPU 與較多的記憶體.

新增與移除 NodeManager

新增 NodeManager
NodeManager 的新增方式與 DataNode 大致相同, 唯一的差別只有在 "slave" 檔案的設定. 由於新增的 DataNode 主要是用來擴充 HDFS 的儲存空間, 故需要在 "slaves" 檔案中寫入新增的主機名稱, 不過若新增的主機只是要用來增加 YARN 的運算資源, 那就並不需要針對 slaves" 檔案做任何的增修了, 只要確認其基本運作與連線正常, 就算完成新增 NodeManager 的設定了.

這邊以 dn03 運算主機作為新增的 NodeManager, 在測試 dn03 是不是能夠正確的加入 YARN 運算資源之前, 我們必須先確認 Hadoop 的系統以及各個角色都有正常在運作. 在 nn 運算主機的終端機輸入 HDFS 系統的 "dfsadmin" 管理指令查看 HDFS 的運作狀態:
ubuntu@nn:~$ hdfs dfsadmin -report
...
Live datanodes (2):

Name: 172.16.1.210:50010 (dn01)
Hostname: dn01
Rack: /16/1
...

在第六章我們已經將 dn03 運算主機從 HDFS 系統的白名單移除, 所以在上面只會看到 dn01 與 dn02 運算主機執行 DataNode 的服務. 接著在 rm 運算主機終端機輸入以下指令確認目前只有dn01 與 dn02 運算主機在 YARN 系統資源中:
ubuntu@rm:~$ yarn node -all -list
...
Total Nodes:2
Node-Id Node-State Node-Http-Address Number-of-Running-Containers
dn02:54093 RUNNING dn02:8042 0
dn01:57407 RUNNING dn01:8042 0

確定 Hadoop 系統以及各個角色都有正常運作後, 我們先使用 SSH 連線到 dn03 運算主機, 並執行以下指令來啟動上面的 NodeManager 服務:
ubuntu@dn03:~$ yarn-daemon.sh start nodemanager
starting nodemanager, logging to /tmp/yarn-ubuntu-nodemanager-dn03.out
ubuntu@dn03:~$ jps
2190 Jps
2090 NodeManager

ubuntu@rm:~$ yarn node -all -list
...
Total Nodes:3
Node-Id Node-State Node-Http-Address Number-of-Running-Containers
dn02:54093 RUNNING dn02:8042 0
dn03:60306 RUNNING dn03:8042 0
dn01:57407 RUNNING dn01:8042 0

當看到 dn03 運算機出現, 就表示 dn03 已經加入到 YARN 運算資源之內且可以開始負擔資料運算工作了. 至於要怎樣把 dn03 從 YARN 的運算資源中移除, 只需要在該運算機的終端機視窗內輸入下面命令即可把該運算機從 YARN 的運算資源中移除:
ubuntu@dn03:~$ yarn-daemon.sh stop nodemanager
stopping nodemanager
ubuntu@dn03:~$ jps
2227 Jps

管理 NodeManager 的異動
雖然可以利用上面介紹的方式新稱與移除 NodeManager 已改變 YARN 的運算資源, 但在實際應用上並不建議上述的方式來異動 NodeManager 與管理 DataNode 運算主機, 我們必須採用 "管理" 的角度來管理 NodeManager 的異動, 不然網路隨便一台機器都可以進入 YARN 的管轄之內, 以系統安全來說並不太洽當, 如同第六章管理 DataNode 運算主機的方式一樣, 我們也可以撰寫 YARN 的 "白名單", 也就是 YARN 可以使用的運算資源名單.

首先使用下面命令建立 YARN 的白名單 "yarn.allow":
root@ubuntu:~# vi /opt/hadoop-2.5.2/etc/hadoop/yarn.allow // 在 Host 主機

目前我們只允許 dn01 與 dn02 運算主機加入 YARN 運算資源之內, 不過我們還必須在 "yarn-site.xml" 檔案中寫入白名單的檔案存放位置:
# vi /opt/hadoop-2.5.2/etc/hadoop/yarn-site.xml

# lxc-console -n rm // 登入 rm 主機
ubuntu@rm:~$ yarn-daemon.sh stop resourcemanager
stopping resourcemanager
ubuntu@rm:~$ yarn-daemon.sh start resourcemanager
starting resourcemanager, logging to /tmp/yarn-ubuntu-resourcemanager-rm.out
ubuntu@rm:~$ jps
2209 ApplicationHistoryServer
3563 Jps
3321 ResourceManager

ubuntu@rm:~$ yarn node -all -list
...
Total Nodes:2
Node-Id Node-State Node-Http-Address Number-of-Running-Containers
dn02:53256 RUNNING dn02:8042 0
dn01:33099 RUNNING dn01:8042 0

此時就算去 dn03 啟動 nodemanager, 也不會在 YARN 的運算資源中看到 dn03 了:
ubuntu@rm:~$ ssh dn03
ubuntu@dn03:~$ yarn-daemon.sh start nodemanager
starting nodemanager, logging to /tmp/yarn-ubuntu-nodemanager-dn03.out
ubuntu@dn03:~$ jps
2820 NodeManager
2896 Jps

ubuntu@dn03:~$ exit
ubuntu@rm:~$ yarn node -all -list // 不會看到 dn03
...
Total Nodes:2
Node-Id Node-State Node-Http-Address Number-of-Running-Containers
dn02:53256 RUNNING dn02:8042 0
dn01:33099 RUNNING dn01:8042 0

This message was edited 9 times. Last update was at 09/10/2015 21:03:50

[ Big Data 研究 ] 07 建置 YARN 分散式運算系統 - 管理 YARN 分散式運算系統

Introduction
在一般企業應用上, 一旦 HDFS 分散式檔案系統開始運作, 就會依照企業內部管理規範定期維護主機. 而 YARN 分散式運算系統當然也需要定期的維護與監控系統的運作狀態, 但是 YARN 更需要對運算程式的效能進行管理, 才能有效率的應用有效資源, 進行 Big Data 的運算, 而 Hadoop 官方當然也有提供 YARN 的管理與設定指令, 讓 YARN 系統運行的更有效率.

管理 YARN 分散式運算系統

查看 YARN 分散式運算系統的狀態
使用下面指令登入 rm 運算主機:
# lxc-console -n rm
ubuntu@rm:~$ yarn node -list -all // 查看 YARN 的運作狀態
...
Total Nodes:2
Node-Id Node-State Node-Http-Address Number-of-Running-Containers
dn02:36364 RUNNING dn02:8042 0
dn01:34233 RUNNING dn01:8042 0

"Node-Id" 代表每台 NodeManager 的 ID; "Node-State" 就是每台 NodeManager 的運作狀態; "Http-Address" 是每台 NodeManager 的 HTTP 位址, 讓管理人員能夠透過瀏覽器查看 NodeManager 詳細的運作資訊. 我們也可以利用 "yarn node -status" 指令加上要查詢的 "Node-Id" 來查看更詳細的 NodeManager 資訊:
ubuntu@rm:~$ yarn node -status dn01:34233
...
Node Report :
Node-Id : dn01:34233
Rack : /16/1
Node-State : RUNNING
Node-Http-Address : dn01:8042
Last-Health-Update : Fri 09/Oct/15 04:17:24:659PDT
Health-Report :
Containers : 0
Memory-Used : 0MB
Memory-Capacity : 8192MB
CPU-Used : 0 vcores
CPU-Capacity : 8 vcores

運算資源的彙整與管理 (CPU 與記憶體)
在啟動了 YARN 分散式運算系統後, NodeManager 會向 ResourceManager 回報可使用的運算資源, 在預設情況下, 不管實際的硬體規格如何, 一台 NodeManager 的記憶體預設為 8GB, CPU 則預設為 8 個核心, 為了反應實際的硬體規格, 我們必須對 NodeManager 來做設定. 首先我們透過網頁來檢視預設的運算資源:

















上面的 "Memory Total" 和 "VCores Total" 是 Yarn 預設可以使用的運算資源, 不過實際上 YARN 能夠使用的 Memory Total 和 VCores Total, 還必須根據 NodeManager 目前所在主機上的 CPU 與 記憶體來進行運算資源的設定, 而這些設定都可以在 "yarn-site.xml" 檔案中來完成.

請在 Host 主機輸入以下指令進行編輯設定:
# vi /opt/hadoop-2.5.2/etc/hadoop/yarn-site.xml

  •   ubuntu@rm:~$ ssh dn01
    ubuntu@dn01:~$ /opt/hadoop-2.5.2/sbin/stop-yarn.sh
    stopping yarn daemons
    ...

    ubuntu@dn01:~$ jps // 確認 NodeManager 已經停止
    1950 DataNode
    2485 Jps

    ubuntu@dn01:~$ exit
    ubuntu@rm:~$ ssh dn02
    ubuntu@dn02:~$ /opt/hadoop-2.5.2/sbin/stop-yarn.sh
    stopping yarn daemons
    ...

    ubuntu@dn02:~$ jps
    2441 Jps
    1939 DataNode

    ubuntu@dn02:~$ exit
    ubuntu@rm:~$ /opt/hadoop-2.5.2/sbin/stop-yarn.sh
    stopping yarn daemons
    ...

    ubuntu@rm:~$ jps
    1373 Jps
    936 ApplicationHistoryServer

    ubuntu@rm:~$ /opt/hadoop-2.5.2/sbin/start-yarn.sh
    starting yarn daemons
    ...

    此時再重新刷新瀏覽器:



















    查看 Timeline Server 的 Log 資訊
    Timeline Server 是用來紀錄 YARN 執行完程式後所產生的結果. 輸入以下指令開啟並編輯 "yarn-site.xml":
    ubuntu@rm:~$ vi /opt/hadoop-2.5.2/etc/hadoop/yarn-site.xml
    1.   
    2.     yarn.timeline-service.webapp.address  
    3.     rm:8188  


  • 設定內容中的 "yarn.timeline-service.webapp.address" 指定可以使用瀏覽器在 "rm:8188" 開啟 Timeline Server 的 Web 服務:















    如果要在終端機檢視某個 Application 的資訊, 可以透過上面網頁的 "Application ID" 並搭配指令 "yarn application -status" 查看更詳細內容:
    ubuntu@rm:~$ yarn application -status <application_id>



    [ Big Data 研究 ] 07 建置 YARN 分散式運算系統 - 設定與初始化 YARN 分散式運算系統

    Introduction
    YARN 不僅能對 Big data 進行快速運算, 也能支援多種運算模式, 這都是因為各個角色的互相配合才能辦到. 因此要啟動 YARN 就必須在 "mapred-site.xml", "yarn-site.xml" 與 "yarn-env.sh" 檔案中對這些角色進行設定.

    設定 mapred-site.xml 檔案
    在實體主機終端機輸入以下指令開啟 "mapred-site.xml" 檔案:
    # cp /opt/hadoop-2.5.2/etc/hadoop/mapred-site.xml.template /opt/hadoop-2.5.2/etc/hadoop/mapred-site.xml
    # vi /opt/hadoop-2.5.2/etc/hadoop/mapred-site.xml
    上述設定說明 MapReduce 將由 YARN 來進行運算.

    設定 yarn-site.xml 檔案
    "yarn-site.xml" 是 MapReduce, YARN, 與 Timeline Server 的運作設定檔, 輸入以下命令開啟此檔案進行編輯:
    # vi /opt/hadoop-2.5.2/etc/hadoop/yarn-site.xml

     "yarn.nodemanager.aux-services" 是告訴 NodeManager 要額外啟用 Shuffle 服務; 而 "yarn.nodemanager.aux-services.mapreduce.shuffle.class" 則是設定真正要執行 shuffle 服務的 Java 程式. 接著輸入以下內容:

  • 上面設定內容的 "yarn.resourcemanager.hostname" 指定負責 ResourceManager 服務的運算主機, 並透過 "yarn.resourcemanager.webapp.address" 的設定連結 ResourceManager 的服務; "yarn.nodemanager.local-dirs" 則是 NodeManager 執行 Container 時所需要的資源檔儲存目錄. 接著繼續設定如下:
     

    "yarn.timeline-service.hostname" 指定 Timeline Server 位置; "yarn.timeline-service.generic-application-history.enabled" 讓 Timeline Server 紀錄 YARN 執行程式的相關資訊. 如程式有無執行成功, 程式執行的開始與結束時間等.

    YARN 執行資源的規劃
    YARN 與 HDFS 分散檔案系統一樣, 所有運作角色都只是個 Java 程式, 因此 YARN 同樣也需要設定每個角色執行時的記憶體大小, 以及 Log 檔的存放位置. 而這些設定可以在 "yarn-env.sh" 檔案中來完成. 輸入以下指令開啟並編輯該檔案:
    # vi /opt/hadoop-2.5.2/etc/hadoop/yarn-env.sh
    1. ...  
    2. #JAVA_HEAP_MAX=-Xmx1000m  
    3. JAVA_HEAP_MAX=-Xmx256m  
    4. ...  
    5. YARN_HEAPSIZE=256  
    6. ...  
    7. export YARN_RESOURCEMANAGER_HEAPSIZE=256  
    8. ...  
    9. export YARN_TIMELINESERVER_HEAPSIZE=256  
    10. ...  
    11. export YARN_NODEMANAGER_HEAPSIZE=256  
    12. ...  
    13. export YARN_LOG_DIR=/tmp  
    14.   
    15. default log directory & file  
    16. if [ "$YARN_LOG_DIR" = "" ]; then  
    17.   YARN_LOG_DIR="$HADOOP_YARN_HOME/logs"  
    18. fi  
    19. if [ "$YARN_LOGFILE" = "" ]; then  
    20.   YARN_LOGFILE='yarn.log'  
    21. fi  


    啟動 YARN 分散式運算系統
    接著在啟動 YARN 服務前, 務必先啟動 HDFS 分散式檔案系統. 請在 nn 運算主機終端前使用下面指令啟動 HDFS:
    # lxc-console -n nn // 目前 Host 主機 Console 時, 請登入 nn 運算主機.
    ubuntu@nn:~$ start-dfs.sh // 啟動 HDFS
    ...
    ubuntu@nn:~$ jps
    9485 NameNode
    9689 SecondaryNameNode
    10432 Jps

    // 接著可以使用 Ctrl+a , q 來回到 Host 主機

    啟動 ResourceManager 與 NodeManager
    完成 YARN 分散式運算系統的初步設定, 我們可以正式來啟動 YARN 中的 ResourceManager 與 NodeManager 了. 請輸入以下指令啟動 rm 運算主機並登入此運算主機:
    # sudo lxc-start -n rm -d
    # sudo lxc-console -n rm
    // 登入 rm 主機
    ubuntu@rm:~$ /opt/hadoop-2.5.2/sbin/start-yarn.sh
    starting yarn daemons
    starting resourcemanager, logging to /tmp/yarn-ubuntu-resourcemanager-rm.out
    dn02: Warning: Permanently added 'dn02,172.16.1.211' (ECDSA) to the list of known hosts.
    dn02: starting nodemanager, logging to /tmp/yarn-ubuntu-nodemanager-dn02.out
    dn01: starting nodemanager, logging to /tmp/yarn-ubuntu-nodemanager-dn01.out

    ubuntu@rm:~$ jps // 確認 ResourceManager 服務起來
    629 ResourceManager
    893 Jps

    ubuntu@rm:~$ ssh dn01
    ubuntu@dn01:~$ jps // 確認 NodeManager 服務起來.
    2251 Jps
    1950 DataNode
    2126 NodeManager

    ubuntu@dn01:~$ exit

    啟動 Timeline Server
    只啟動 ResourceManager 與 NodeManager 還是無法使用 YARN 分散式運算系統來執行程式, 還必須啟動 Timeline Server 才行. 在 rm 運算主機輸入下面指令啟動它:
    ubuntu@rm:~$ /opt/hadoop-2.5.2/sbin/yarn-daemon.sh start timelineserver
    starting timelineserver, logging to /tmp/yarn-ubuntu-timelineserver-rm.out
    ubuntu@rm:~$ jps -v | grep ApplicationHistoryServer // 確認 Timeline Server 服務起來
    936 ApplicationHistoryServer -Dproc_timelineserver -Xmx256m -Dhadoop.log.dir=/tmp -Dyarn.log.dir=/tmp -Dhadoop.log.file=yarn-ubuntu-timelineserver-rm.log -Dyarn.log.file=yarn-ubuntu-timelineserver-rm.log -Dyarn.home.dir= -Dyarn.id.str=ubuntu -Dhadoop.root.logger=INFO,RFA -Dyarn.root.logger=INFO,RFA -Djava.library.path=/opt/hadoop-2.5.2/lib/native -Dyarn.policy.file=hadoop-policy.xml -Dhadoop.log.dir=/tmp -Dyarn.log.dir=/tmp -Dhadoop.log.file=yarn-ubuntu-timelineserver-rm.log -Dyarn.log.file=yarn-ubuntu-timelineserver-rm.log -Dyarn.home.dir=/opt/hadoop-2.5.2 -Dhadoop.home.dir=/opt/hadoop-2.5.2 -Dhadoop.root.logger=INFO,RFA -Dyarn.root.logger=INFO,RFA -Djava.library.path=/opt/hadoop-2.5.2/lib/native

    測試 YARN 分散式運算系統
    在啟動 YARN 分散式運算系統後, 我們可以使用 Hadoop 內建的測試程式 "hadoop-mapreduce-examples-2.5.2.jar" 來確認 MapReduce 是否完成了建置, 由於此程式是一個 jar 檔, 因此可以使用專門來處理 jar 檔的 "hadoop jar" 指令來做測試. 請在 rm 主機上輸入下面指令:

    ubuntu@rm:~$ vi ~/.bashrc // 將 Hadoop 執行檔路徑加入環境變數 PATH 中
    1. export PATH=/opt/hadoop-2.5.2/bin/:$PATH  
    ubuntu@rm:~$ hadoop jar /opt/hadoop-2.5.2/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.5.2.jar pi 1 1
    ...
    Job Finished in 6.155 seconds
    Estimated value of Pi is 4.00000000000000000000


    2015年10月7日 星期三

    [ Big Data 研究 ] 07 建置 YARN 分散式運算系統 - YARN 運作原理

    Introduction 
    Hadoop 具備資料儲存與運算, 這兩大基本系統架構, 除了前一章介紹的 HDFS 分散式檔案系統外, 另一個就是分散式運算系統. 第二代 Hadoop 基本預設為 YARN, 在目前 Hadoop 的架構上只要是使用 "MapReduce" 的運算模式, 就是由 YARN 來負責各項運算資源的分配與執行 (YARN 不僅用在 MapReduce 運算中), 然而 YARN 並不是單一的執行程序, 而是一套運算資源 (CPU, Memory) 管理, 分配與運算的系統, 由許多不同的 "角色", 以最佳的方式來完成整個資源的分配與運算的動作. 

    YARN 運作原理 
    相對於 Hadoop 的 HDFS 分散式檔案系統, YARN 的運作就顯得複雜得多, 而複雜的原因在於 YARN 將整個運作 (運算) 的過程細分成許多步驟, 每個步驟都由不同的 "角色" 來分擔不同的任務, 事實上每個角色都是 YARN 的基本運算單元, 利用角色分工的方式, 就可以有效率的進行資訊傳遞與資料運算的工作. 那麼 YARN 到底存在那些角色? 這些角色的功用分別為何? 角色彼此之間又是如何傳遞資訊與任務指派? 

    其實整個 YARN 的運作是由四大角色所組成, 分別為 "ResourceManager", "Application Master" (App Mstr), "NodeManager" 與 "Container". 每個角色說穿了其實都是一個完整的 Java 程式, 且在 YARN 運作的過程中, 都具有其獨特的功能, 各司其職已完成指派工作. 

    在上述角色中實際負責執行運算功能的角色為 Container, 其在執行運算過程時, 其本身存在一個標準與規範. 所有要在 Container 內執行的程式都要依循 Container 的標準與規範. 而此標準與規範則取決於這個 Container 所擁有的運算資源, 如 CPU 的效能與記憶體的多寡, 而每個 Container 可以依照不同的指派來執行不同的運算需求. YARN 的完整運作流程如下圖: 




























    YARN 的運作流程 
    依照上圖的流程, 整個 YARN 執行過程步驟大致如下: 
    步驟一: 

    Client 端要執行的程式 (*.jar), 需要先從 Client 上傳到 HDFS, 再由 YARN 從 HDFS 那取出要執行的程式.

    步驟二: 
    Client 向 ResourceManager 提出任務需求, ResourceManager 則會替該應用程式 (任務需求) 分配一個 Container, 並與此 Container 所在的 NodeManager 通訊, 要求他在這個 Container 中啟動管理應用程序的 Application Master (App Master), 接著 Client 端會告訴此 App Master 要執行的程式以及所需要資料的位置.

    步驟三: 
    App Master 回報 Resource Manager 已經準備完成, 可以承接運算需求.

    步驟四: 
    App Master 會由程式與資料計算總共需要多少個 Container, 然後回報給 ResourceManager, 並向 ResourceManager 要求所需要的運算資源.

    步驟五: 
    ResourceManager 會通知並準備好需要的 Container(s)

    步驟六: 
    Container 準備好就會開始執行程式, 並回報結果 (不管成功與否), 給 App Master.

    步驟七: 
    Client 會詢問 App Master 程式執行的進度與狀況.

    步驟八: 
    App Master 回報給 ResourceManager 整個專案的執行結果.

    以上就是整個 YARN 大致的執行過程, 各個角色透過溝通與協調分工, 就能夠善用所有可運用的運算資源, 以最快的速度與能力來完成 Client 端的任務需求. 話雖如此這些角色分別都是存在那些機器上面呢? dn01/dn02 運算主機除了作為 DataNode 之外, 還存在三種身分, 分別是 "NodeManager", "MRAppMaster" (MapReduce 的 Application Master) 以及 "YarnChild" (執行 MapReduce 程式的 Container), 在 dn01 或 dn02 運算主機輸入以下指令就可以看到所有的角色: 
    $ jps
    461 DataNode
    562 NodeManager
    1075 Jps
    964 MRAppMaster
    1061 YarnChild

    在實際任務執行上, 則會依據任務的指派有角色改變的情況發生. 

    MapReduce 的軟體架構 
    前面提到 YARN 是用來進行運算資源的分配與管理, 而從 Hadoop 2.x 版本開始, YARN 已經可以支援不同的運算模式的資料處理, 像是 Streaming (串流), Graph (關聯資料) 以及 Hadoop 1.x 版本預設的運算模式 "MapReduce". 

    MapReduce 的運算模式其實分為兩個部分: 一部分為 "Map"; 另一部分為 "Reduce". 兩者都是可以獨立運作的程式, 換句話說兩者都是可以獨立運作的 "Container". 不過 Map 與 Reduce 必須互相搭配才能完成整個 MapReduce 的運算, 其結果才會完整. 一個完整的 MapReduce 運算可以再細分為許多不同的處理程序: 



































    上面流程可以分為六個處理步驟: 
    步驟一: "Input" 
    決定想要運算的資料

    步驟二: "Splitting" 
    將輸入資料以行為單位, 切割成一個個基本運算文字單位.

    步驟三: "Mapping" 
    將分割好的資料進行計數.

    步驟四: "Shuffing" 
    依照每個基本運算文字類別, 分配到相對應的 NodeManager 進行彙整.

    步驟五: "Reducing" 
    將 Shuffling 過的資料進行最後的彙整, 並統計總數量.

    步驟六: "Final Result" 
    匯集並整合所有 Reducing 過後的資料, 而這也就是 MapReduce 之後的結果.

    Timeline Server 
    除了前面所述的四大角色外, 在所有 YARN 角色當中, 其實還有一個角色 "Timeline Server". 不過這一個角色相對特別, 因為它實際並不擔負任何與資源分配或是運算執行相關的工作. 這個角色是用來取代 Hadoop 1.x 版本中的 JobHistory Server, 並記錄 MapReduce 的 Log 資訊, 但是 Timeline Server 目前不僅記錄 MapReduce 的 Log, 另外也記錄像是 Streaming (串流), Graph (關聯資料) 的 Log 資訊. 因此 Hadoop 發展出一個通用的 Log Server 就是 "Timeline Server".

    2015年9月17日 星期四

    [ Big Data 研究 ] 06 設定與初始化 HDFS 分散式檔案系統 - Part5

    HDFS 檔案系統權限設定 
    使用 Hadoop 分散式運算平台分析巨量資料, 一個重要的課題就是 HDFS 的 "檔案權限設定". HDFS 的 "檔案權限設定" 預設為 "簡易模式" (simple), Client 端在連結時不會驗證密碼, 但是在存取資料時會依據不同使用者帳號, 給予不同的使用權限. 若讀者有密碼驗證的需求, 在 HDFS 的 "檔案權限設定" 中還有另一種 "kerberos" 認證設定. 此種認證需要架設認證服務器, 並在 "core-site.xml" 檔案中加入 "hadoop.security.authentication" 及填入設定值 "kerberos". 

    HDFS 的存取權限會對應到 Linux 作業系統的帳號與群組, 根據不同的使用者帳號分為 "User", "Group" 與 "Others" 這三種身分別, 對檔案的存取權限則分為 "r", "w" 與 "x". 也就是 "可讀", "可寫" 和 "可執行". 在權限設定的格式上與 Linux 作業系統是相同的. 

    建立 HDFS 分散式檔案系統帳號與群組 
    在 Hadoop 分散式運算平台中, NameNode 負責檔案存取的權限設定, 若要設定 HDFS 系統的管理帳號與群組, 就必須在負責執行 NameNode 服務主機內建立. 使用下面指令在 Linux 系統中建立 "bigred" 帳號, 我們將在後面小節使用此帳號設定為 HDFS 系統的管理帳號: 
    ubuntu@nn:~$ sudo useradd -m -s /bin/bash bigred
    ubuntu@nn:~$ ll /home/
    total 16
    drwxr-xr-x 4 root root 4096 Sep 17 18:23 ./
    drwxr-xr-x 21 root root 4096 Sep 13 00:21 ../
    drwxr-xr-x 2 bigred bigred 4096 Sep 17 18:23 bigred/
    drwxr-xr-x 6 ubuntu ubuntu 4096 Sep 14 00:42 ubuntu/

    接下來使用下面指令在 Linux 系統中建立 "biguser" 群組, 後續會使用此群組為 HDFS 系統的管理群組: 
    ubuntu@nn:~$ sudo groupadd biguser
    ubuntu@nn:~$ grep biguser /etc/group
    biguser:x:1002:

    若要讓 "bigred" 帳號成為管理群組的一員, 使用下面命令完成: 
    // -a, --append: append the user to the supplemental GROUPS mentioned by the -G option without removing
    // him/her from other groups
    // -G, --groups GROUPS: new list of supplementary GROUPS

    ubuntu@nn:~$ sudo usermod -a -G biguser bigred
    ubuntu@nn:~$ grep biguser /etc/group
    biguser:x:1002:bigred

    設定 HDFS 分散式檔案系統權限 
    其實在 "HDFS" 系統內, 早就有預設的管理群組 "supergroup", 當初在格式化 HDFS 系統時, 所使用的 Linux 系統帳號 (ubuntu) 會自動成為 HDFS 系統預設的管理帳號, 我們可以透過下面步驟更改 HDFS 系統的管理帳號與群組, 首先打開 "hdfs-site.xml" 進行設定: 
    ubuntu@nn:~$ sudo vi /opt/hadoop-2.5.2/etc/hadoop/hdfs-site.xml
    1.   
    2.     dfs.permissions.superusergroup  
    3.     biguser  
      ubuntu@nn:~$ start-dfs.sh // 啟動 HDFS 服務
    ubuntu@nn:~$ hdfs dfs -chown -R bigred:biguser /
    ubuntu@nn:~$ hdfs dfs -chmod -R 770 /
    ubuntu@nn:~$ hdfs dfs -ls -d /
    drwxrwx--- - bigred biguser 0 2015-09-14 00:52 /
    ubuntu@nn:~$ echo 'test' >> test.dat
    ubuntu@nn:~$ hdfs dfs -put test.dat /test
    ubuntu@nn:~$ hdfs dfs -ls /test/test.dat
    -rw-r--r-- 2 ubuntu biguser 5 2015-09-17 18:40 /test/test.dat
    建立 HDFS 分散式檔案系統工作目錄 
    為了方便後續章節的操作, 我們要停止 dn03 運算主機的 DataNode 服務, 首先請登入 dn03 運算主機視窗, 並使用下面命令停止 DataNode 服務: 
    ubuntu@nn:~$ ssh dn03
    ubuntu@dn03:~$ jps
    2004 Jps
    1910 DataNode

    ubuntu@dn03:~$ /opt/hadoop-2.5.2/sbin/hadoop-daemon.sh stop datanode
    stopping datanode
    ubuntu@dn03:~$ jps // Make sure "DataNode" not exist
    2034 Jps

    接著回到 nn 運算主機, 並編輯 slaves 與 hdfs.allow 設定檔來 comment out 'dn03': 
    ubuntu@dn03:~$ exit
    ubuntu@nn:~$ sudo vi /opt/hadoop-2.5.2/etc/hadoop/slaves
    1. dn01  
    2. dn02  
    3. #dn03  
    ubuntu@nn:~$ sudo vi /opt/hadoop-2.5.2/etc/hadoop/hdfs.allow
    1. dn01  
    2. dn02  
    3. #dn03  
    ubuntu@nn:~$ stop-dfs.sh
    ubuntu@nn:~$ start-dfs.sh
    ubuntu@nn:~$ hdfs dfsadmin -report // 應該只剩下 dn01dn02
    ...
    Live datanodes (2):
    ...

    最後來建立後續章節會使用到的目錄: 
    ubuntu@nn:~$ hdfs dfs -mkdir /user
    ubuntu@nn:~$ hdfs dfs -mkdir /user/bigred
    ubuntu@nn:~$ hdfs dfs -mkdir /tmp
    ubuntu@nn:~$ hdfs dfs -ls /
    Found 4 items
    drwxrwx--- - bigred biguser 0 2015-09-14 00:52 /system
    drwxrwx--- - bigred biguser 0 2015-09-17 18:40 /test
    drwxr-xr-x - ubuntu biguser 0 2015-09-17 18:54 /tmp
    drwxr-xr-x - ubuntu biguser 0 2015-09-17 18:54 /user

    Supplement 
    [ Big Data 研究 ] 06 設定與初始化 HDFS 分散式檔案系統 - Part1 
    [ Big Data 研究 ] 06 設定與初始化 HDFS 分散式檔案系統 - Part2 
    [ Big Data 研究 ] 06 設定與初始化 HDFS 分散式檔案系統 - Part3 
    [ Big Data 研究 ] 06 設定與初始化 HDFS 分散式檔案系統 - Part4 
    [ Big Data 研究 ] 06 設定與初始化 HDFS 分散式檔案系統 - Part5

    [Git 常見問題] error: The following untracked working tree files would be overwritten by merge

      Source From  Here 方案1: // x -----删除忽略文件已经对 git 来说不识别的文件 // d -----删除未被添加到 git 的路径中的文件 // f -----强制运行 #   git clean -d -fx 方案2: 今天在服务器上  gi...