顯示具有 Hadoop 標籤的文章。 顯示所有文章
顯示具有 Hadoop 標籤的文章。 顯示所有文章

2016年9月22日 星期四

[ 文章收集 ] HDFS Federation 設計動機與基本原理

Source From Here 
Preface 
HDFS Federation 是 Hadoop 最新發布版本 Hadoop-0.23.0 中為解決 HDFS 單點故障而提出的 namenode 水平擴展方案。該方案允許 HDFS 創建多個namespace以提高集群的擴展性和隔離性。本篇文章主要介紹了HDFS Federation 的設計動機和基本原理。 

1. 當前 HDFS 概況 

1.1 當前 HDFS 架構 
當前 HDFS 包含兩層結構: 
* Namespace 管理目錄,文件和數據塊。它支持常見的文件系統操作,如創建文件,修改文件,刪除文件等。 
* Block Storage 有兩部分組成: 

Block Management 維護集群中datanode 的基本關係,它支持數據塊相關的操作,如:創建數據塊,刪除數據塊等,同時,它也會管理副本的複制和存放。Physical Storage 存儲實際的數據塊並提供針對數據塊的讀寫服務。Block Storage 的這兩部分分別在 namenode 和 datanode 上實現,所以該模塊由 namenode 和 datanode 分工完成:

當前 HDFS 架構只允許整個集群中存在一個 namespace,而該 namespace 被僅有的一個 namenode 管理。這個架構使得 HDFS 非常容易實現,但是,它(見上圖)在具體實現過程中會出現一些模糊點,進而導致了很多局限性(下面將要詳細說明),當然這些局限性只有在擁有大集群的公司,像 baidu,騰訊 等出現。 

1.2 當前 HDFS 局限性 
Block Storage 和 namespace 高耦合 
當前 namenode 中的 namespace 和 block management 的結合使得這兩層架構耦合在一起,難以讓其他可能 namenode 實現方案直接使用block storage。 

namenode 擴展性 
HDFS 的底層存儲是可以水平擴展的(解釋:底層存儲指的是 datanode,當集群存儲空間不夠時,可簡單的添加機器已進行水平擴展),但 namespace 不可以。當前的 namespace 只能存放在單個 namenode 上,而 namenode 在內存中存儲了整個分佈式文件系統中的元數據信息,這限制了集群中數據塊,文件和目錄的數目。 

性能 
文件操作的性能製約於單個 namenode 的吞吐量,單個 namenode 當前僅支持約 60K 的 task,而下一代 Apache MapReduce 將支持多餘 100K 的並發任務,這隱含著要支持多個 namenode。 

隔離性 
現在大部分公司的集群都是共享的,每天有來自不同 group 的不同用戶提交作業。單個 namenode 難以提供隔離性,即:某個用戶提交的負載很大的 job 會減慢其他用戶的job,單一的 namenode 難以像 HBase 按照應用類別將不同作業分派到不同 namenode 上。 

2. HDFS Federation 

2.1 為什麼採用 Federation 
採用 Federation 的最主要原因是簡單,Federation 能夠快速的解決了大部分單 Namenode 的問題。Federation 整個核心設計實現大概用了4個月。大部分改變是在 Datanode、Config 和 Tools,而 Namenode 本身的改動非常少,這樣 Namenode 原先的魯棒性不會受到影響。這使得該方案與之前的 HDFS 版本兼容。 

2.2 Federation 架構 


為了水平擴展 namenode,federation 使用了多個獨立的 namenode/namespace。這些 namenode 之間是聯合的,也就是說,他們之間相互獨立且不需要互相協調,各自分工,管理自己的區域。分佈式的 datanode 被用作通用的數據塊存儲存儲設備。每個 datanode 要向集群中所有的 namenode 註冊,且週期性地向所有 namenode 發送心跳和塊報告,並執行來自所有 namenode 的命令。 

一個 block pool 由屬於同一個namespace的數據塊組成,每個 datanode 可能會存儲集群中所有 block pool 的數據塊。每個 block pool 內部自治,也就是說各自管理各自的 block,不會與其他 block pool 交流。一個 namenode 掛掉了,不會影響其他 namenode。某個 namenode 上的 namespace 和它對應的 block pool 一起被稱為 namespace volume。它是管理的基本單位。當一個 namenode/nodespace 被刪除後,其所有 datanode 上對應的 block pool 也會被刪除。當集群升級時,每個 namespace volume 作為一個基本單元進行升級。 

2.3 Federation 關鍵技術點 

命名空間管理 
Federation 中存在多個命名空間,如何劃分和管理這些命名空間非常關鍵。在 Federation 中並採用 “文件名hash”的方法,因為該方法的 locality 非常差,比如:查看某個目錄下面的文件,如果採用文件名 hash 的方法存放文件,則這些文件可能被放到不同 namespace 中, HDFS 需要訪問所有 namespace,代價過大。為了方便管理多個命名空間,HDFS Federation 採用了經典的 Client Side Mount Table。 


如上圖所示,下面四個深色三角形代表一個獨立的命名空間,上方淺色的三角形代表從客戶角度去訪問的子命名空間。各個深色的命名空間 Mount 到淺色的表中,客戶可以訪問不同的掛載點來訪問不同的命名空間,這就如同在 Linux 系統中訪問不同掛載點一樣。這就是 HDFS Federation 中命名空間管理的基本原理:將各個命名空間掛載到全局 mount-table 中,就可以做將數據到全局共享;同樣的命名空間掛載到個人的 mount-table 中,這就成為應用程序可見的命名空間視圖。 

2.4 主要優點 

擴展性和隔離性 
支持多個 namenode 水平擴展整個文件系統的 namespace。可按照應用程序的用戶和種類分離 namespace volume,進而增強了隔離性。 

通用存儲服務 
Block Pool抽象層為HDFS的架構開啟了創新之門。分離 block storage layer 使得: 
<1> 新的文件系統(non-HDFS)可以在block storage上構建
<2> 新的應用程序(如HBase)可以直接使用block storage層
<3> 分離的block storage層為將來完全分佈式namespace打下基礎


設計簡單 
Federation 整個核心設計實現大概用了4個月。大部分改變是在 Datanode、Config 和 Tools 中,而 Namenode 本身的改動非常少,這樣 Namenode 原先的魯棒性不會受到影響。雖然這種實現的擴展性比起真正的分佈式的 Namenode 要小些,但是可以迅速滿足需求,另外 Federation 具有良好的向後兼容性,已有的單 Namenode 的部署配置不需要任何改變就可以繼續工作. 

3. HDFS Federation 不足 

單點故障問題 
HDFS Federation 並沒有完全解決單點故障問題。雖然 namenode/namespace 存在多個,但是從單個 namenode/namespace 看,仍然存在單點故障:如果某個 namenode 掛掉了,其管理的相應的文件便不可以訪問。Federation 中每個 namenode 仍然像之前HDFS上實現一樣,配有一個 secondary namenode,以便主 namenode 掛掉一下,用於還原元數據信息。 

負載均衡問題 
HDFS Federation 採用了 Client Side Mount Table 分攤文件和負載,該方法更多的需要人工介入已達到理想的負載均衡。 

Supplement 
HDFS Federation ppt in Apache Hadoop India Summit 2011 
IBM Knowledge center - Configuring HDFS federation

2016年3月22日 星期二

[ 常見問題 ] Hadoop 解除 "Name node is in safe mode"

Source From Here
Introduction
運行 hadoop 程序時,有時候會報以下錯誤:
org.apache.hadoop.dfs.SafeModeException: Cannot delete /user/hadoop/input. Name node is in safe mode

這個錯誤應該還滿常見的吧(至少我運行的時候是這樣的) 那我們來分析下這個錯誤,從字面上來理解: Name node is in safe mode 說明 Hadoop 的 NameNode 處在安全模式下。 那什麼是 Hadoop 的安全模式呢? 在分佈式文件系統啟動的時候,開始的時候會有安全模式,當分佈式文件系統處於安全模式的情況下,文件系統中的內容不允許修改也不允許刪除,直到安全模式結束。安全模式主要是為了系統啟動的時候檢查各個DataNode上數據塊的有效性,同時根據策略必要的複製或者刪除部分數據塊。運行期通過命令也可以進入安全模式。在實踐過程中,系統啟動的時候去修改和刪除文件也會有安全模式不允許修改的出錯提示,只需要等待一會兒即可。 現在就清楚了,那現在要解決這個問題,我想讓Hadoop不處在safe mode模式下,能不能不用等,直接解決呢? 答案是可以的,只要在Hadoop的目錄下輸入:
# bin/hadoop dfsadmin -safemode leave

也就是關閉 Hadoop 的安全模式,這樣問題就解決了。

safemode 模式
用户可以通过 dfsadmin -safemode value 来操作安全模式,参数 value 的说明如下:
* enter - 进入安全模式
* leave - 强制NameNode离开安全模式
* get - 返回安全模式是否开启的信息
* wait - 等待,一直到安全模式结束。

This message was edited 2 times. Last update was at 22/03/2016 09:49:44

2016年1月14日 星期四

[ 常見問題 ] Avoid MapReduce Out-of-Memory Errors

Source From Here
How-To
If your installation uses the TaskTracker (pre-YARN distributions), your lens builds can fail with out-of-memory errors. Better tuning of the TaskTracker task properties and Java virtual memory (JVM) settings can fix these errors.

When creating a MapReduce job, Hadoop does not dynamically detect system resources to determine the number of map or reduce task slots to allocate. Instead, the MapReduce job tries to use as many task slots as it is allowed with as much Java virtual memory (JVM) allowed. A Platfora configuration can pass JVM allocation for a MapReduce job but it cannot set the allowable tasks. The Hadoop configuration controls the allowable tasks.

The maximum number of simultaneous tasks that can run on a Hadoop TaskTracker node is configured by the following MapReduce configuration properties:
mapred.tasktracker.map.tasks.maximum
The maximum number of map tasks that will be run simultaneously by a task tracker. (Default is 2)

mapred.tasktracker.reduce.tasks.maximum
The maximum number of reduce tasks that will be run simultaneously by a task tracker. (Default is 2)

Note.
In MR1, the mapred.tasktracker.map.tasks.maximum and mapred.tasktracker.reduce.tasks.maximum (mapred-default.html) properties dictated how many map and reduce slots each TaskTracker had. These properties no longer exist in YARN. Instead, YARN uses yarn.nodemanager.resource.memory-mb and yarn.nodemanager.resource.cpu-vcores (yarn-default.xml), which control the amount of memory and CPU on each node, both available to both maps and reduces. If you were using Cloudera Manager to configure these properties automatically, Cloudera Manager will take care of it in MR2 as well. If configuring these properties manually, simply set these to the amount of memory and number of cores on the machine after subtracting out resources needed for other services.

Your Hadoop administrator configures these on the Hadoop TaskTracker nodes.

The maximum number of tasks able to run on a single TaskTracker node has nothing to do with the number of tasks a job needs. For example, a job may require 10 map tasks. If the maximum map task slots is 5, then the job runs 5 tasks at a time until it completes all 10. Likewise the maximum reduce task slots could be set to 10, but a job may only need to use 2 reduce slots.

Your Hadoop administrator should make sure that the number of task slots is sized according to the amount of memory and CPU available on your Hadoop TaskTracker nodes, and the typical job workload. If the tracker nodes have swap enabled, administrators can reduce these limits to take that into account.

The total JVM size that Hadoop allocates per task slot is set by the mapred.java.child.opts property. You set this in Platfora's local mapred-site.xml file. Platfora needs at least a 1 GB JVM size for its task slots. But if you decide to use a higher JVM size to optimize lens build performance, you must make sure not to over-allocate system memory on your Hadoop TaskTracker nodes.

In addition to its operating system requirements, a TaskTracker node requires enough RAM to support the TaskTracker process, the data node virtual machine, and any other process a node may run. Think of this as the node's RAM requirements. A good rule of thumb for setting mapred.java.child.opts for Platfora is:
(Node RAM requirements – 4GB) / (mapred.tasktracker.map.tasks.maximum + mapred.tasktracker.reduce.tasks.maximum)

For example, if a TaskTracker node returns 32 GB of RAM, minus 4 GB reserve memory, then 28 GB is available for all MapReduce tasks. If the maximum map tasks allowed is 5 and the maximum reduce tasks is 3, then no more than 8 tasks can run at one time on the node. 28 GB divided by 8 is 3.5 GB per task ( -Xmx3500M ).

Supplement
Hadoop 參數設定 – mapred-site.xml
FAQ - Out of Memory Error in Hadoop
You can assign more memory by editing the conf/mapred-site.xml file and adding the property:
  1.   
  2.   mapred.child.java.opts  
  3.   -Xmx1024m  
  This will start the hadoop JVMs with more heap space.

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


    [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...