2016-12-01 40 views
2

這裏的情況是:我們有一個安全(Kerberos的)HBase的集羣。 我有一個對象,在啓動時創建一個HTable實例並掛上它。它調用:HBase的使用Kerberos - 保持HTable實例中打開超過10個小時

UserGroupInformation.setConfiguration(configuration); 
UserGroupInformation.loginUserFromKeytab(user, keytab); 

登錄到Kerberized集羣。 這個對象然後掛起很多小時未使用。超過10個小時(從我們的Kerberos集羣票超時)後,下一次調用掃描該表的結果:

16/12/01 18:16:24 WARN security.UserGroupInformation: PriviledgedActionException as:[email protected] (auth:KERBEROS) cause:javax.security.sasl.SaslException: GSS initiate failed [Caused by GSSException: No valid credentials provided (Mechanism level: Failed to find any Kerberos tgt)] 
16/12/01 18:16:24 WARN ipc.RpcClient: Exception encountered while connecting to the server : javax.security.sasl.SaslException: GSS initiate failed [Caused by GSSException: No valid credentials provided (Mechanism level: Failed to find any Kerberos tgt)] 
16/12/01 18:16:24 FATAL ipc.RpcClient: SASL authentication failed. The most likely cause is missing or invalid credentials. Consider 'kinit'. 
- javax.security.sasl.SaslException: GSS initiate failed [Caused by GSSException: No valid credentials provided (Mechanism level: Failed to find any Kerberos tgt)] 
- at com.sun.security.sasl.gsskerb.GssKrb5Client.evaluateChallenge(GssKrb5Client.java:211) 
- etc. 

我如何才能讓Kerberos身份驗證還活着嗎?

+0

如果我們回答了您的問題,請正確標記;否則讓我們知道如果有的話。 –

回答

1

我正好做在這個論壇早些時候一些研究。這個問題在這裏的講話,其中Kerberos身份驗證10小時後死亡,幾乎是相同的,這個線程的:

Renewing a connection to Apache Phoenix (using Kerberos) fails after exactly 10 hours

我其實只是編輯的線程今天早些時候,放在「10點」到主題行。這個線程包含了一些關於在這裏做什麼的偉大建議。我要繼續前進,借用參孫Scharfrichter提供了良好的智慧,誰在它說:「該標準的解決方案是產生一個後臺線程調用checkTGTAndReloginFromKeytab()定期 - 見Should I call ugi.checkTGTAndReloginFromKeytab() before every action on hadoop?由一個HortonWorks大師一個非常複雜的解釋(一個寫這篇關於Hadoop的GitBook的人的同事)「

我希望這能夠提供你的方向。

+0

我嘗試設置一個計時器,每5分鐘調用一次ugi.checkTGTAndReloginFromKeytab(),但我遇到了同樣的問題。奇怪的是,我還有其他一些可以長期打開HTable實例的進程,但他們更頻繁地訪問表,並且不需要重新登錄。接下來我將嘗試的是實際從計時器表中讀取數據。 –

+0

我認爲我的問題是,同一個進程試圖在同一個會話中訪問一個不安全的和安全的集羣。我們添加了代碼以確保在任何操作之前完成正確的登錄。如果沒有這種情況,我相信在每個操作之前checkTGTAndReloginFromKeytab()是解決方案。 –