WebHDFS не работает в защищенном кластере Hadoop

Я пытаюсь защитить свой кластер HDP2 Hadoop с помощью Kerberos.

На данный момент браузеры Hdfs, Hive, Hbase, Hue Beeswax и Hue Job/task работают нормально; однако файловый браузер Hue не работает, он отвечает:

WebHdfsException at /filebrowser/
AccessControlException: SIMPLE authentication is not enabled.  Available:[TOKEN, KERBEROS] (error 500)
Request Method: GET
Request URL:    http://bt1svlmy:8000/filebrowser/
Django Version: 1.2.3
Exception Type: WebHdfsException
Exception Value:    
AccessControlException: SIMPLE authentication is not enabled.  Available:[TOKEN, KERBEROS] (error 500)
Exception Location: /usr/lib/hue/desktop/libs/hadoop/src/hadoop/fs/webhdfs.py in _stats, line 208
Python Executable:  /usr/bin/python2.6
Python Version: 2.6.6
(...)

Мой файл hue.ini настроен со всеми параметрами security_enabled=true и другими связанными параметрами.


Думаю, проблема в WebHDFS.

Я попробовал команды curl, приведенные на странице http://hadoop.apache.org/docs/r1.0.4/webhdfs.html#Authentication

curl -i --negotiate -L -u : "http://172.19.115.50:14000/webhdfs/v1/filetoread?op=OPEN"

ответы:

HTTP/1.1 403 Forbidden
Server: Apache-Coyote/1.1
Set-Cookie: hadoop.auth=; Path=/; Expires=Thu, 01-Jan-1970 00:00:00 GMT; HttpOnly
Content-Type: text/html;charset=utf-8
Content-Length: 1027
Date: Wed, 08 Oct 2014 06:55:51 GMT

<html><head><title>Apache Tomcat/6.0.37 - Error report</title><style><!--H1 {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;font-size:22px;} H2 {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;font-size:16px;} H3 {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;font-size:14px;} BODY {font-family:Tahoma,Arial,sans-serif;color:black;background-color:white;} B {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;} P {font-family:Tahoma,Arial,sans-serif;background:white;color:black;font-size:12px;}A {color : black;}A.name {color : black;}HR {color : #525D76;}--></style> </head><body><h1>HTTP Status 403 - Anonymous requests are disallowed</h1><HR size="1" noshade="noshade"><p><b>type</b> Status report</p><p><b>message</b> <u>Anonymous requests are disallowed</u></p><p><b>description</b> <u>Access to the specified resource has been forbidden.</u></p><HR size="1" noshade="noshade"><h3>Apache Tomcat/6.0.37</h3></body></html>

И я мог бы воспроизвести сообщение об ошибке Hue, добавив пользователя со следующим запросом curl:

curl --negotiate -i -L -u: "http://172.19.115.50:14000/webhdfs/v1/filetoread?op=OPEN&user.name=theuser"

оно отвечает:

HTTP/1.1 500 Internal Server Error
Server: Apache-Coyote/1.1
Set-Cookie: hadoop.auth=u=theuser&p=theuser&t=simple&e=1412735529027&s=rQAfgMdExsQjx6N8cQ10JKWb2kM=; Path=/; Expires=Wed, 08-Oct-2014 02:32:09 GMT; HttpOnly
Content-Type: application/json
Transfer-Encoding: chunked
Date: Tue, 07 Oct 2014 16:32:09 GMT
Connection: close

{"RemoteException":{"message":"SIMPLE authentication is not enabled.  Available:[TOKEN, KERBEROS]","exception":"AccessControlException","javaClassName":"org.apache.hadoop.security.AccessControlException"}}

Похоже, что между WebHDFS и curl нет согласования Kerberos.

Я ожидал что-то вроде:

HTTP/1.1 401 UnauthorizedContent-Type: text/html; charset=utf-8
WWW-Authenticate: Negotiate
Content-Length: 0
Server: Jetty(6.1.26)
HTTP/1.1 307 TEMPORARY_REDIRECT
Content-Type: application/octet-stream
Expires: Thu, 01-Jan-1970 00:00:00 GMT
Set-Cookie: hadoop.auth="u=exampleuser&[email protected]&t=kerberos&e=1375144834763&s=iY52iRvjuuoZ5iYG8G5g12O2Vwo=";Path=/
Location: http://hadoopnamenode.mycompany.com:1006/webhdfs/v1/user/release/docexample/test.txt?op=OPEN&delegation=JAAHcmVsZWFzZQdyZWxlYXNlAIoBQCrfpdGKAUBO7CnRju3TbBSlID_osB658jfGfRpEt8-u9WHymRJXRUJIREZTIGRlbGVnYXRpb24SMTAuMjAuMTAwLjkxOjUwMDcw&offset=0
Content-Length: 0
Server: Jetty(6.1.26)
HTTP/1.1 200 OK
Content-Type: application/octet-stream
Content-Length: 16
Server: Jetty(6.1.26)
A|1|2|3
B|4|5|6

Любая идея, что могло пойти не так?

У меня есть в моем hdfs-site.xml на каждом узле:

<property>
  <name>dfs.webhdfs.enabled</name>
  <value>true</value>
</property>

<property>
  <name>dfs.web.authentication.kerberos.principal</name>
  <value>HTTP/[email protected]</value>
</property>

<property>
  <name>dfs.web.authentication.kerberos.keytab</name>
  <value>/etc/hadoop/conf/HTTP.keytab</value> <!-- path to the HTTP keytab -->
</property>

person Arnaud    schedule 07.10.2014    source источник
comment
Привет Арно, это круто; Я пытаюсь защитить среду Hadoop с помощью Kerberos. Не могли бы вы подробно рассказать мне о процессе / способе, который вы выбрали?   -  person Dinesh Kumar P    schedule 24.11.2014
comment
Ну, это был бы длинный ответ, слишком длинный для этого форума. Короче говоря, вам нужно где-то установить KDC, создать суперпользователей и учетные данные системы Hadoop и подумать о взаимосвязи вашего KDC с вашей устаревшей корпоративной системой LDAP для идентификации пользователей. Я использовал Ambari + несколько самодельных сценариев оболочки для фактической настройки кластера hadoop; ambari.apache.org/current/installing- hadoop-using-ambari/ даст вам подробную информацию.   -  person Arnaud    schedule 25.11.2014
comment
Хорошо, Арно, позволь мне взглянуть; Я собираюсь создать работающий кластер Hadoop на двух машинах с Ubuntu и начать с установки Ambari.   -  person Dinesh Kumar P    schedule 26.11.2014


Ответы (1)


Похоже, вы не получаете доступ к WebHDFS (порт по умолчанию = 50070), а к HttpFS (порт по умолчанию = 14000), который является «простым» веб-приложением, которое не защищено таким же образом.

URL-адрес WebHDFS часто имеет вид http://namenode:50070/webhdfs/v1 ; попробуйте изменить hue.ini с этим параметром (рекомендуется WebHDFS, а не HttpFS)

person BillLoot    schedule 08.10.2014
comment
Однако у меня есть активная/резервная конфигурация, и я не могу точно определить, какой из них является namenode... Как с этим справиться? - person Arnaud; 08.10.2014
comment
Из документа Cloudera: и WebHDFS, и HttpFS используют HTTP REST API, поэтому они полностью совместимы, но Hue необходимо настроить для использования одного или другого. Для развертываний высокой доступности HDFS необходимо использовать HttpFS. (cloudera .com/content/cloudera/en/documentation/cdh4/v4-2-0/) - person Arnaud; 08.10.2014