kerberosを使用してhadoopを設定しましたが、すべて正常に動作し、hdfsをブラウズしたり、ジョブを送信したりできます。Kerberosを使用したHadoop Web認証
HTTPSNEGOをサポートするcdh3u2でhadoop-0.20.2を使用します。次のようにコア-site.xml内
HTTP認証関連の設定は、次のとおりです。
<!-- HTTP web-consoles Authentication -->
<property>
<name>hadoop.http.filter.initializers</name>
<value>org.apache.hadoop.security.AuthenticationFilterInitializer</value>
</property>
<property>
<name>hadoop.http.authentication.type</name>
<value>kerberos</value>
</property>
<property>
<name>hadoop.http.authentication.token.validity</name>
<value>36000</value>
</property>
<property>
<name>hadoop.http.authentication.signature.secret.file</name>
<value>/home/hadoop/hadoop/conf/http-secret-file</value>
</property>
<property>
<name>hadoop.http.authentication.cookie.domain</name>
<value></value>
</property>
<property>
<name>hadoop.http.authentication.simple.anonymous.allowed</name>
<value>false</value>
</property>
<property>
<name>hadoop.http.authentication.kerberos.principal</name>
<value>HTTP/[email protected]</value>
</property>
<property>
<name>hadoop.http.authentication.kerberos.keytab</name>
<value>/home/hadoop/hadoop/conf/http.keytab</value>
</property>
</configuration>
起動時に、HTTP認証が成功しました。
2011-11-15 15:43:59,106 INFO org.apache.hadoop.security.authentication.server.KerberosAuthenticationHandler: Initialized, principal [HTTP/[email protected]] from keytab [/home/hadoop/hadoop/conf/http.keytab]
は、コードに見た後、私はAuthenticationFilterはのdoFilter中にヌルのトークンを取得することが分かった、そう、認証が開始されます(以下のコード)が、HttpServletRequestの中の承認がnullであるので、私は私のページをリロードするたびに、1ログが表示されます。
2011-11-15 15:47:52,190 WARN org.apache.hadoop.security.authentication.server.KerberosAuthenticationHandler: SPNEGO starting
// org.apache.hadoop.security.authentication.server.KerberosAuthenticationHandler
public AuthenticationToken authenticate(HttpServletRequest request, final HttpServletResponse response)
throws IOException, AuthenticationException {
AuthenticationToken token = null;
String authorization = request.getHeader(KerberosAuthenticator.AUTHORIZATION);
if (authorization == null || !authorization.startsWith(KerberosAuthenticator.NEGOTIATE)) {
response.setHeader(KerberosAuthenticator.WWW_AUTHENTICATE, KerberosAuthenticator.NEGOTIATE);
response.setStatus(HttpServletResponse.SC_UNAUTHORIZED);
if (authorization == null) {
LOG.warn("SPNEGO starting");
} else {
LOG.warn("'" + KerberosAuthenticator.AUTHORIZATION + "' does not start with '" +
KerberosAuthenticator.NEGOTIATE + "' : {}", authorization);
}
構成エラーがあるか、単に私のブラウザがSPNEGOをサポートしていません。私はUbuntu 11.04でChrome v16を使用しています。
誰かが私がそれを理解するのに役立つ手がかりを持っていますか?
ありがとうございました。
Chromeの場合、私は--auth-server-whitelistでやっていましたが、うまくいきませんでした。最終的に、カールを使用するあなたの助言のために、私は承認を参照してください。ありがとう。 –
@エリックあなたが本当に助けてくれて、私は--auth-server-whitelistにurlを追加しましたが、namenodeにアクセスするためにip:portを使用しました。私がhadoopの外でブラウザに焦点を当てて考えるようにしてくれてありがとう。 –