Samza YARN安全

2018-08-22 18:20 更新

您可以安全的在 YARN 群集上運(yùn)行 Samza 作業(yè)。YARN 使用 Kerberos 作為其認(rèn)證和授權(quán)機(jī)制。有關(guān) Hadoop 安全模式的詳細(xì)信息,請(qǐng)參閱此文章

授權(quán) token 管理策略

在安全的 YARN 群集上運(yùn)行長期應(yīng)用程序的挑戰(zhàn)之一是其 token 更新策略。Samza 采取以下方法來管理 token 創(chuàng)建和更新。

  1. 運(yùn)行 Samza 應(yīng)用程序的客戶需要使用 kinit 的憑據(jù)激活到 KDC,并在提交應(yīng)用程序之前將 HDFS 代理 token 添加到啟動(dòng)器上下文。
  2. 接下來,客戶端為應(yīng)用程序準(zhǔn)備本地資源,如下所示:(1)首先,它在 HDFS 上創(chuàng)建一個(gè)暫存目錄。該目錄只能由正在運(yùn)行的用戶訪問,用于存儲(chǔ)應(yīng)用程序主(AM)和容器所需的資源。(2)然后客戶端將該 keytab 作為本地資源添加到 AM 的容器啟動(dòng)器上下文中。(3)最后,它將相應(yīng)的主體和路徑發(fā)送到臨時(shí)目錄中的 keytab 文件到協(xié)調(diào)器流。Samza 目前使用登臺(tái)目錄來存儲(chǔ) keytab 和刷新的 token ,因?yàn)橥ㄟ^ Kerberos 保護(hù)對(duì)目錄的訪問。
  3. 一旦資源被分配給應(yīng)用程序主服務(wù)器,節(jié)點(diǎn)管理器將使用啟動(dòng)器上下文中的 HDFS 委托 token 將 HDFS 中的應(yīng)用程序資源本地化。同樣的規(guī)則也適用于集裝箱本地化。
  4. 當(dāng)應(yīng)用程序主機(jī)啟動(dòng)時(shí),它將 keytab 文件本地化到其工作目錄中,并從協(xié)調(diào)器流中讀取主體。
  5. 應(yīng)用程序主程序會(huì)定期對(duì)給定的主鍵和 keytab 進(jìn)行身份驗(yàn)證。在每次迭代中,它創(chuàng)建新的委托 token ,并將它們存儲(chǔ)在 HDFS 上的給定作業(yè)特定登臺(tái)目錄中。
  6. 每個(gè)正在運(yùn)行的容器將在 HDFS 的憑據(jù)文件中獲得新的授權(quán) token ,然后才能到期。
  7. 應(yīng)用程序主容器和容器不會(huì)相互通信。每個(gè)方面通過在 HDFS 上閱讀或?qū)懭?token 來獨(dú)立進(jìn)行。

默認(rèn)情況下,任何 HDFS 委托 token 的最長使用期限為7天(由 dfs.namenode.delegation.token.max-lifetimehdfs-site.xml 配置), token 通常每24小時(shí)更新一次(由dfs.namenode.delegation.token.renew-intervalhdfs-site.xml 配置)。如果應(yīng)用程序主機(jī)死機(jī),需要在7天后重啟?存儲(chǔ)在啟動(dòng)器上下文中的原始 HDFS 委托 token 無論如何都是無效的。幸運(yùn)的是,Samza 可以依靠 Resource Manager 來處理這種情況。有關(guān)詳細(xì)信息,請(qǐng)參閱以下配置部分:

組件

安全管理器

當(dāng) ApplicationMaster 啟動(dòng)時(shí),它產(chǎn)生 SamzaAppMasterSecurityManager,它在其單獨(dú)的線程上運(yùn)行。該 SamzaAppMasterSecurityManager 負(fù)責(zé)通過給定的 Kerberos 密鑰表定期登錄和定期再生 HDFS 委托 token 。每次運(yùn)行后,它會(huì)在 HDFS 上的預(yù)定義的作業(yè)特定目錄上寫入新的 token 。該過程的頻率由下式確定 yarn.token.renewal.interval.seconds。

每個(gè)容器,一開始就運(yùn)行一個(gè) SamzaContainerSecurityManager。它從 HDFS 上的憑據(jù)文件讀取,并以相同的間隔刷新其授權(quán) token 。

組態(tài)

  1. 對(duì)于 Samza 作業(yè),在啟用安全性的 YARN 群集上需要以下作業(yè)配置:#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 集群以使資源管理器能夠代表應(yīng)用程序用戶重新創(chuàng)建和更新委托 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   ?

以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)