Samza YARN安全

2018-08-22 18:20 更新

您可以安全的在 YARN 群集上运行 Samza 作业。YARN 使用 Kerberos 作为其认证和授权机制。有关 Hadoop 安全模式的详细信息,请参阅此文章

授权 token 管理策略

在安全的 YARN 群集上运行长期应用程序的挑战之一是其 token 更新策略。Samza 采取以下方法来管理 token 创建和更新。

  1. 运行 Samza 应用程序的客户需要使用 kinit 的凭据激活到 KDC,并在提交应用程序之前将 HDFS 代理 token 添加到启动器上下文。
  2. 接下来,客户端为应用程序准备本地资源,如下所示:(1)首先,它在 HDFS 上创建一个暂存目录。该目录只能由正在运行的用户访问,用于存储应用程序主(AM)和容器所需的资源。(2)然后客户端将该 keytab 作为本地资源添加到 AM 的容器启动器上下文中。(3)最后,它将相应的主体和路径发送到临时目录中的 keytab 文件到协调器流。Samza 目前使用登台目录来存储 keytab 和刷新的 token ,因为通过 Kerberos 保护对目录的访问。
  3. 一旦资源被分配给应用程序主服务器,节点管理器将使用启动器上下文中的 HDFS 委托 token 将 HDFS 中的应用程序资源本地化。同样的规则也适用于集装箱本地化。
  4. 当应用程序主机启动时,它将 keytab 文件本地化到其工作目录中,并从协调器流中读取主体。
  5. 应用程序主程序会定期对给定的主键和 keytab 进行身份验证。在每次迭代中,它创建新的委托 token ,并将它们存储在 HDFS 上的给定作业特定登台目录中。
  6. 每个正在运行的容器将在 HDFS 的凭据文件中获得新的授权 token ,然后才能到期。
  7. 应用程序主容器和容器不会相互通信。每个方面通过在 HDFS 上阅读或写入 token 来独立进行。

默认情况下,任何 HDFS 委托 token 的最长使用期限为7天(由 dfs.namenode.delegation.token.max-lifetimehdfs-site.xml 配置), token 通常每24小时更新一次(由dfs.namenode.delegation.token.renew-intervalhdfs-site.xml 配置)。如果应用程序主机死机,需要在7天后重启?存储在启动器上下文中的原始 HDFS 委托 token 无论如何都是无效的。幸运的是,Samza 可以依靠 Resource Manager 来处理这种情况。有关详细信息,请参阅以下配置部分:

组件

安全管理器

当 ApplicationMaster 启动时,它产生 SamzaAppMasterSecurityManager,它在其单独的线程上运行。该 SamzaAppMasterSecurityManager 负责通过给定的 Kerberos 密钥表定期登录和定期再生 HDFS 委托 token 。每次运行后,它会在 HDFS 上的预定义的作业特定目录上写入新的 token 。该过程的频率由下式确定 yarn.token.renewal.interval.seconds。

每个容器,一开始就运行一个 SamzaContainerSecurityManager。它从 HDFS 上的凭据文件读取,并以相同的间隔刷新其授权 token 。

组态

  1. 对于 Samza 作业,在启用安全性的 YARN 群集上需要以下作业配置:#Job job.security.manager.factory = org.apache.samza.job.yarn.SamzaYarnSecurityManagerFactory

YARN

yarn.kerberos.principal=user/localhost
yarn.kerberos.keytab=/etc/krb5.keytab.user
yarn.token.renewal.interval.seconds=86400
  1. 配置 Hadoop 集群以使资源管理器能够代表应用程序用户重新创建和更新委托 token 。这将解决以下2种情况:
* When Application Master dies unexpectedly and needs a restart after 7 days (the default maximum lifespan a delegation token can be renewed).

* When the Samza job terminates and log aggregation is turned on for the job. Node managers need to be able to upload all the local application logs to HDFS.

1. Enable the resource manager as a privileged user in yarn-site.xml.
<property>
            <name>yarn.resourcemanager.proxy-user-privileges.enabled</name>
            <value>true</value>
        </property>
2. Make `yarn` as a proxy user, in core-site.xml
<property>
            <name>hadoop.proxyuser.yarn.hosts</name>
            <value>*</value>
        </property>
        <property>
            <name>hadoop.proxyuser.yarn.groups</name>
            <value>*</value>
        </property>

写入 HDFS   »

以上内容是否对您有帮助:
在线笔记
App下载
App下载

扫描二维码

下载编程狮App

公众号
微信公众号

编程狮公众号