多租戶(一)Capacity Schedular

Hadoop的yarn資源調度器一般分爲FIFO,Capacity Scheduler跟Fair Scheduler。但是多租戶大多常用兩種Capacity Scheduler跟Fair Scheduler兩種

 

1,Capacity Scheduler:

基於yarn的資源調度,協調不同資源需求的應用程序,比如內存、CPU、磁盤。但是本質還是資源隊列,但是在隊列內部還是用的FIFO,因此還是先從yarn配置文件入手

 

Capacity Scheduler特性:

    層次化的隊列設計,這種層次化的隊列設計保證了子隊列可以使用父隊列設置的全部資源。
    容量保證,隊列上都會設置一個資源的佔比,這樣可以保證每個隊列都不會佔用整個集羣的資源。
    安全,每個隊列又嚴格的訪問權限控制。用戶只能向自己的隊列裏面提交任務,而且不能修改或者訪問其他隊列的任務。
    彈性分配,空閒的資源可以被分配給任何隊列。當多個隊列出現爭用的時候,則會按照比例進行平衡。
    多租戶租用,通過隊列的容量限制,多個用戶就可以共享同一個集羣,同事保證每個隊列分配到自己的容量,提高利用率。
    操作性,yarn支持動態修改調整容量、權限等的分配,可以在運行時直接修改。還提供給管理員界面,來顯示當前的隊列狀況。管理員可以在運行時,添加一個隊列;但是不能刪除一個隊列。管理員還可以在運行時暫停某個隊列,這樣可以保證當前的隊列在執行過程中,集羣不會接收其他的任務。如果一個隊列被設置成了stopped,那麼就不能向他或者子隊列上提交任務了。
    基於資源的調度,協調不同資源需求的應用程序,比如內存、CPU、磁盤等等。

    
1.1,yarn-site.xml配置文件
<!-- 配置ResouceManager使用CapacityScheduler -->
<property>
    <name>yarn.resourcemanager.scheduler.class</name>
    <value>org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler</value>
</property>


1.2,Capacity-site.xml配置文件
<property>
<name>yarn.scheduler.capacity.root.queues</name>
<value>default,prod,dev</value>
<description>The queues at the this level (root is the root queue).root下的三個隊列</description>
</property>

<property>
    <name>yarn.scheduler.capacity.root.default.capacity</name>
    <value>20</value>
    <description>default隊列佔所有資源的百分比</description>
</property>

<property>
    <name>yarn.scheduler.capacity.root.prod.capacity</name>
    <value>30</value>
    <description>prod隊列佔所有資源的百分比</description>
</property>

<property>
    <name>yarn.scheduler.capacity.root.dev.capacity</name>
    <value>50</value>
    <description>dev隊列佔所有資源的百分比</description>
</property>


<property>
    <name>yarn.scheduler.capacity.root.dev.queues</name>
    <value>eng,science</value>
    <description>dev隊列下的兩個子隊列</description>
</property>


<property>
    <name>yarn.scheduler.capacity.root.dev.eng.capacity</name>
    <value>50</value>
    <description>dev子隊列佔dev隊列的百分比</description>
</property>

<property>
    <name>yarn.scheduler.capacity.root.dev.science.capacity</name>
    <value>50</value>
    <description>dev子隊列佔dev隊列的百分比</description>
</property>

<property>
    <name>yarn.scheduler.capacity.root.dev.maximum-capacity</name>
    <value>75</value>
</property>

 

<property>
<name>yarn.scheduler.capacity.root.default.maximum-capacity</name>
<value>20</value>
<description>The maximum capacity of the default queue.</description>
</property>


<property>
<name>yarn.scheduler.capacity.root.default.state</name>
<value>RUNNING</value>
<description>The state of the default queue. State can be one of RUNNING or STOPPED.</description>
</property>

<property>
<name>yarn.scheduler.capacity.root.default.acl_submit_applications</name>
<value>root</value>
<description>The ACL of who can submit jobs to the default queue.</description>
</property>

<property>
<name>yarn.scheduler.capacity.root.default.acl_administer_queue</name>
<value>root</value>
<description>The ACL of who can administer jobs on the default queue.</description>
</property>


<property>
<name>yarn.scheduler.capacity.root.prod.state</name>
<value>RUNNING</value>
<description>The state of the prod queue. State can be one of RUNNING or STOPPED.</description>
</property>

<property>
<name>yarn.scheduler.capacity.root.prod.acl_submit_applications</name>
<value>uplooking</value>
<description>哪些用戶或組可以向這個隊列提交任務</description>
</property>

<property>
<name>yarn.scheduler.capacity.root.prod.acl_administer_queue</name>
<value>root</value>
<description>哪個用戶或組可以管理這個隊列</description>
</property>

用戶和用戶組之間用空格分開,用戶之間用“,”分割,用戶組之間用“,”分割,如果queue的屬性值中只有用戶組,則前面保留一個空格。
用戶格式:*表示任何用戶。 user1,user2 group2,group2


<property>
<name>yarn.scheduler.capacity.queue-mappings</name>
<value>u:uplooking:prod,u:root:default</value>
<description>
 用戶組與隊列的映射關係,格式爲[u or g]:[name]:[queue_name][,next_mapping]*。
 如果用戶名與隊列名一致時,可以使用user%代替。當用戶的組與隊列各一致時,可以使用%primary_group
 u:user1:queue1,g:group1:queue2,u:%user:%user,u:user2:%primary_group
yarn.scheduler.capacity.queue-mappings-override.enable,客戶端是否可以修改組映射關係,默認是false
</description>
</property>

 

scp capacity-scheduler.xml root@node2:/opt/hadoop/etc/hadoop/
scp capacity-scheduler.xml root@node3:/opt/hadoop/etc/hadoop/

重啓yarn平臺 start-yarn.sh

 

代碼提交隊列
job.getConfiguration().set("mapreduce.job.queuename", "eng");


hive裏單獨用戶(例如:wys3160)
SET mapreduce.job.queuename=eng;(新版本)
set mapred.job.queue.name=queue3;
set mapred.queue.names=queue3;


hive全部用戶設置全局隊列(沒意義)
hive-site.xml
<property>
<name>mapreduce.job.queuename</name>
<value>eng</value>
</property>

 

 

注意:如果不加隊列映射,會報錯submitted by user hive to unknown queue: default(隊列名)

https://blog.csdn.net/longshenlmj/article/details/39158927
https://www.cnblogs.com/skyrim/p/10289057.html

 

 

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