Kerberos

設置安全 Hadoop 集群 - Kerberos 安全性

  • February 20, 2015

我成功設置了一個 HDP 2.2 集群(1 個 NM、3 個 DN 和 1 個客戶端)。訪問 HDP 集群的使用者帳戶在客戶端中創建,並檢查這些使用者可以通過 SSH 送出作業到客戶端節點並執行範例作業。

在下一步中,我啟用了 Kerberos 身份驗證並創建了與客戶端中的使用者相對應的使用者主體。一切都如預期的那樣順利。然後我以使用者身份通過 SSH 連接到客戶端 PC,生成 Kerberos 票證 kinit,然後我嘗試執行範例作業,但作業送出失敗並顯示:user <user name> not found消息。

為了在 Secure HDP 集群中以使用者身份執行作業,我是否必須在集群中的所有節點中創建一個使用者?

簡而言之:

是的,當使用 Kerberos 執行 Hadoop 時,經過身份驗證的使用者必須存在於執行 TaskTracker (MRv1) 或 YARN 節點管理器的每個節點上的 passwd 文件(或等效的使用者目錄,例如 LDAP)中。

對於 MRv1,TaskTracker 在每個任務開始之前啟動一個稱為任務控制器的程序。任務控制器是一個 setuid 根工具,它允許映射使用者更改任務的執行時使用者。把它想像成 TaskTracker 做的等價物

sudo -u youruser /usr/bin/java yourtask

如果在 passwd 文件中找不到使用者,則任務控制器無法完成切換到該使用者,從而導致失敗。

YARN 也有類似的機制。

在沒有安全集群的情況下,TaskTracker 不會使用它。相反,該任務實際上作為每個節點上的映射使用者執行,但 JobTracker 將其報告為送出使用者。

此時您的選擇是:

  1. 通過 adduser 之類的東西將使用者放在 /etc/passwd(和 /etc/shadow)中,每個節點上將啟動任務。
  2. 或者將每個節點配置為通過 LDAP 伺服器進行 passwd 映射查找,該伺服器通過LDAP posixAccount 標準儲存帳戶資訊。

你沒有提到你正在使用哪個發行版,所以很難比這更進一步。

引用自:https://serverfault.com/questions/666990