最近在搞公司数据中台,调研linkis如何与yarn的资源协调,如何做到用户提交和资源的隔离的?
将调研的结果做个记录,欢迎大家访问我的程序员资料网站java-broke.site,获取更多大数据、架构和面试题。
在启用了Kerberos认证的YARN环境中,多队列资源隔离机制可以帮助实现不同用户和应用之间的资源隔离和公平分配。下面我将详细介绍基于Kerberos认证的YARN多队列资源隔离机制的工作原理和配置示例。
YARN多队列资源隔离机制
YARN通过队列机制来实现资源的隔离和分配。每个队列都可以有自己的资源分配策略和限制,从而确保不同用户和应用之间的资源公平分配。
Kerberos认证
Kerberos认证用于确保只有经过认证的用户才能提交作业或访问资源。用户需要使用正确的密钥表文件(keytab)并通过kinit
命令获取有效的票据(Ticket Granting Ticket, TGT),才能成功认证并提交作业到YARN。
配置示例
以下是一个基于Kerberos认证的YARN多队列资源隔离机制的配置示例。
1. 配置队列
在yarn-site.xml
中定义队列及其属性。
<configuration>
<!-- 定义根队列 -->
<property>
<name>yarn.scheduler.capacity.root.queues</name>
<value>team-a,team-b,team-c</value>
</property>
<!-- 配置每个队列的资源分配 -->
<property>
<name>yarn.scheduler.capacity.root.team-a.capacity</name>
<value>40</value>
</property>
<property>
<name>yarn.scheduler.capacity.root.team-b.capacity</name>
<value>30</value>
</property>
<property>
<name>yarn.scheduler.capacity.root.team-c.capacity</name>
<value>30</value>
</property>
<!-- 设置队列的最大容量 -->
<property>
<name>yarn.scheduler.capacity.root.team-a.maximum-capacity</name>
<value>40</value>
</property>
<property>
<name>yarn.scheduler.capacity.root.team-b.maximum-capacity</name>
<value>30</value>
</property>
<property>
<name>yarn.scheduler.capacity.root.team-c.maximum-capacity</name>
<value>30</value>
</property>
<!-- 配置队列的调度策略 -->
<property>
<name>yarn.scheduler.capacity.root.team-a.ordering-policy</name>
<value>fair</value>
</property>
<property>
<name>yarn.scheduler.capacity.root.team-b.ordering-policy</name>
<value>fifo</value>
</property>
<property>
<name>yarn.scheduler.capacity.root.team-c.ordering-policy</name>
<value>fifo</value>
</property>
<!-- 配置队列状态 -->
<property>
<name>yarn.scheduler.capacity.root.team-a.state</name>
<value>RUNNING</value>
</property>
<property>
<name>yarn.scheduler.capacity.root.team-b.state</name>
<value>RUNNING</value>
</property>
<property>
<name>yarn.scheduler.capacity.root.team-c.state</name>
<value>RUNNING</value>
</property>
<!-- 设置队列的父队列 -->
<property>
<name>yarn.scheduler.capacity.root.team-a.parent</name>
<value>root</value>
</property>
<property>
<name>yarn.scheduler.capacity.root.team-b.parent</name>
<value>root</value>
</property>
<property>
<name>yarn.scheduler.capacity.root.team-c.parent</name>
<value>root</value>
</property></configuration>
2. 启用Kerberos认证
在core-site.xml
中启用Kerberos认证。
<configuration>
<property>
<name>hadoop.security.authentication</name>
<value>kerberos</value>
</property></configuration>
3. 配置NodeManager和ResourceManager
在yarn-site.xml
中配置NodeManager和ResourceManager以支持Kerberos认证。
<configuration>
<!-- 配置ResourceManager -->
<property>
<name>yarn.resourcemanager.principal</name>
<value>yarn/_HOST@EXAMPLE.COM</value>
</property>
<property>
<name>yarn.resourcemanager.keytab</name>
<value>/etc/security/keytabs/yarn.service.keytab</value>
</property>
<!-- 配置NodeManager -->
<property>
<name>yarn.nodemanager.principal</name>
<value>yarn/_HOST@EXAMPLE.COM</value>
</property>
<property>
<name>yarn.nodemanager.keytab</name>
<value>/etc/security/keytabs/yarn.service.keytab</value>
</property></configuration>
4. 获取Kerberos票据
用户需要通过kinit
命令获取Kerberos票据,以便提交作业到YARN。
kinit alice@EXAMPLE.COM -kt /path/to/alice.keytab
5. 提交作业到特定队列
用户可以使用-queue
参数指定提交作业到哪个队列。
yarn jar my-job.jar -queue team-a
总结
通过上述配置,您可以实现在启用了Kerberos认证的YARN环境中使用多队列资源隔离机制。这确保了不同用户和应用之间的资源隔离和公平分配。Kerberos认证进一步增强了安全性,确保只有经过认证的用户才能访问和使用资源。