【yarn node label】yarn node label設置presto主節點(接上一篇)

接上篇https://blog.csdn.net/w8998036/article/details/101522048,安裝好presto on yarn之後,presto集羣的coordinator主節點是由yarn自動分配的,那麼每次訪問presto的時候地址都會變,在程序中就沒法固定presto的連接參數,此問題可以由yarn node label來解決

 

使用node label需要結合yarn的隊列功能。

一.CapacityScheduler

Capacity Scheduler是一個hadoop支持的可插拔的資源調度器,它允許多租戶安全的共享集羣資源,它們的applications在容量限制之下,可以及時的分配資源。使用操作友好的方式運行hadoop應用,同時最大化吞吐能力和集羣利用率。
Capacity Scheduler提供的核心理念就是Queues(隊列),這些queues通常有管理員設定。爲了在共享資源上,提供更多的控制和預見性,Capacity Scheduler支持多級queue,以確保在其他queues允許使用空閒資源之前,資源可以在一個組織的sub-queues之間共享

找到hadoop/conf/capacity-scheduler.xml,配置隊列相關的參數。因爲我們環境是用ambri管理的,參數配置都在ui上

我的原始參數如下

yarn.scheduler.capacity.default.minimum-user-limit-percent=100
yarn.scheduler.capacity.maximum-am-resource-percent=0.2
yarn.scheduler.capacity.maximum-applications=10000
yarn.scheduler.capacity.node-locality-delay=40
yarn.scheduler.capacity.root.accessible-node-labels=*
yarn.scheduler.capacity.root.acl_administer_queue=*
yarn.scheduler.capacity.root.capacity=100
yarn.scheduler.capacity.root.default.acl_administer_jobs=*
yarn.scheduler.capacity.root.default.acl_submit_applications=*
yarn.scheduler.capacity.root.default.capacity=100
yarn.scheduler.capacity.root.default.maximum-capacity=100
yarn.scheduler.capacity.root.default.state=RUNNING
yarn.scheduler.capacity.root.default.user-limit-factor=1
yarn.scheduler.capacity.root.queues=default

root是所有隊列的父節點,在root下可以定義子節點及多級節點隊列

yarn.scheduler.capacity.root.queues=default 默認定義了default隊列,需要定義多個,後面值用逗號分隔如“default,apple,hive”

yarn.scheduler.capacity.root.default.capacity=75 定義default隊列使用的最大容量,75表示75%。該值需要滿足一個要求,即某個父節點下所有的隊列該值加起來必須爲100.如default=25,apple=35,hive=40

yarn.scheduler.capacity.root.default.maximum-capacity=100 定義default隊列最大可使用容量,該值要大於上面的值

其他參數的含義具體去百度。

 

二.Node Label

Node label是將相似特點的節點進行分組的一種途徑,application可以指定在哪裏運行。就是爲每個節點打上特定的標籤,使得具體應用可控制的分配到某個活某些節點上運行。

本例就需要將presto的coordinator主節點固定到某一個節點上,其他節點部署worker

首先在CapacityScheduler定義node label相關參數,我定義的參數如下

yarn.scheduler.capacity.default.minimum-user-limit-percent=100
yarn.scheduler.capacity.maximum-am-resource-percent=0.2
yarn.scheduler.capacity.maximum-applications=10000
yarn.scheduler.capacity.node-locality-delay=40
yarn.scheduler.capacity.root.accessible-node-labels=*
yarn.scheduler.capacity.root.accessible-node-labels.coordinator.capacity=100
yarn.scheduler.capacity.root.accessible-node-labels.worker.capacity=100
yarn.scheduler.capacity.root.acl_administer_queue=*
yarn.scheduler.capacity.root.capacity=100
yarn.scheduler.capacity.root.default.accessible-node-labels=*
yarn.scheduler.capacity.root.default.accessible-node-labels.coordinator.capacity=100
yarn.scheduler.capacity.root.default.accessible-node-labels.worker.capacity=100
yarn.scheduler.capacity.root.default.acl_administer_jobs=*
yarn.scheduler.capacity.root.default.acl_submit_applications=*
yarn.scheduler.capacity.root.default.capacity=100
yarn.scheduler.capacity.root.default.default-node-label-expression=worker
yarn.scheduler.capacity.root.default.maximum-capacity=100
yarn.scheduler.capacity.root.default.state=RUNNING
yarn.scheduler.capacity.root.default.user-limit-factor=1
yarn.scheduler.capacity.root.queues=default

yarn.scheduler.capacity.root.accessible-node-labels=*  定義root隊列可以進入的標籤,*代表所有,即root隊列可以使用任何標籤的node。多個可以逗號分割如“coordinator,worker”

yarn.scheduler.capacity.root.accessible-node-labels.coordinator.capacity=100 定義root隊列coordinator標籤可使用集羣的容量

yarn.scheduler.capacity.root.accessible-node-labels.worker.capacity=100 定義root隊列worker標籤可使用集羣的容量

 

yarn.scheduler.capacity.root.default.accessible-node-labels=*  定義default隊列可以進入的標籤,*代表所有,即root隊列可以使用任何標籤的node。多個可以逗號分割如“coordinator,worker”

yarn.scheduler.capacity.root.default.accessible-node-labels.coordinator.capacity=100 定義default隊列下coordinator標籤可使用default隊列的容量

yarn.scheduler.capacity.root.default.accessible-node-labels.worker.capacity=100 定義default隊列下worker標籤可使用default隊列d的容量

yarn.scheduler.capacity.root.default.default-node-label-expression=worker 定義default隊列默認使用的標籤爲worker。表示如果application提交任務時沒有指定label,那麼它就使用該值的label。如果要使用沒有label的節點,該值設置爲空格。

參數設置好之後,需要重啓yarn。

並刷新CapacityScheduler

 

然後在node集羣設置node的label

1.首先在系統添加label:yarn rmadmin -addToClusterNodeLabels coordinator,worker

查看系統label命令:yarn cluster --list-node-labels

刪除label命令:yarn rmadmin -removeFromClusterNodeLabels coordinator

2.設置節點label

查詢node信息:yarn node --list

添加node label:yarn rmadmin -replaceLabelsOnNode t007.wux.chin.seagate.com:45454,coordinator

刪除node label:yarn rmadmin -replaceLabelsOnNode t007.wux.chin.seagate.com:45454

查看node節點label:yarn node -status t007.wux.chin.seagate.com:45454

ui查看

三:問題

1.刷新CapacityScheduler時,Illegal capacity of 1.0 for children of queue root for label=coordinator

需要同時設置

yarn.scheduler.capacity.root.accessible-node-labels.coordinator.capacity=100

yarn.scheduler.capacity.root.accessible-node-labels.worker.capacity=100

yarn.scheduler.capacity.root.default.accessible-node-labels.coordinator.capacity=100

yarn.scheduler.capacity.root.default.accessible-node-labels.worker.capacity=100

2.刷新CapacityScheduler時,default cannot be found during refresh!

沒有設置default隊列

 

上述設置完成,使用前文的presto啓動命令啓動

bin/slider package --install --name PRESTO --package ../presto-yarn-package-1.6-SNAPSHOT-0.220.zip

bin/slider create presto1 --template appConfig-default.json --resources resources-default.json

 

 

 

 

諸將莫慌,糧草已到!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章