Использование Kerberized webhdfs/hdfs с JAVA API

У меня есть кластер Hadoop с включенным Kerberos. Я хочу поместить файлы в HDFS, используя компьютер с Windows/Linux за пределами кластера.

Команда администраторов Hadoop предоставила мне имя пользователя для доступа к файлу hadoop и keytab, как мне использовать их в моем коде Java?

Я просмотрел множество ресурсов в Интернете, но ни один из них не дает никакого руководства по доступу к керберизованному хаупу из-за пределов кластера.

Кроме того, необходимо ли запускать код с помощью hadoop jar? если да, то как я буду запускать его из-за пределов кластера

Ссылка

http://blog.rajeevsharma.in/2009/06/using-hdfs-in-java-0200.html
http://princetonits.com/technology/using-filesystem-api-to-read-and-write-data-to-hdfs/

У меня работает Kerberos, теперь я могу генерировать билеты

Но завиток не работает (окна)

curl -i  --negotiate u:qjdht93 "http://server:50070/webhdfs/v1/user/qjdht93/?op=LISTSTATUS"

Выдает ошибку как

HTTP/1.1 401 Authentication required
Cache-Control: must-revalidate,no-cache,no-store
Date: Mon, 01 Jun 2015 15:26:37 GMT
Pragma: no-cache
Date: Mon, 01 Jun 2015 15:26:37 GMT
Pragma: no-cache
Content-Type: text/html; charset=iso-8859-1
WWW-Authenticate: Negotiate
Set-Cookie: hadoop.auth=; Version=1; Path=/; Expires=Thu, 01-Jan-1970 00:00:00 G
MT; HttpOnly


Content-Length: 1416
Server: Jetty(6.1.26)

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
<title>Error 401 Authentication required</title>
</head>
<body><h2>HTTP ERROR 401</h2>
<p>Problem accessing /webhdfs/v1/user/qjdht93. Reason:
<pre>    Authentication required</pre></p><hr /><i><small>Powered by Jetty://</s
mall></i><br/>
<br/>
<br/>

Пожалуйста, предложите


person chhaya vishwakarma    schedule 26.05.2015    source источник
comment
Судя по другим комментариям, у вас есть ответ, но я хотел добавить кое-что для будущих читателей. Если вам нужно использовать Kerberos для доступа к чужому кластеру, вам 1) нужно убедиться, что у вас есть запись в /etc/krb5.conf, которая сообщает вашему программному обеспечению, где найти KDC для области, и 2) используйте kinit -kt ‹ keytab› ‹principal›, чтобы убедиться, что ваши учетные данные Kerberos действительны. Сделайте это в первую очередь, и вы избавите себя от множества проблем, пытаясь понять, почему что-то не работает, поскольку сообщения об ошибках часто неясны.   -  person bgiles    schedule 05.10.2018


Ответы (1)


Этого можно добиться с помощью команды hdfs. Все, что вам нужно, это файлы дистрибутива и конфигурации Hadoop, которые присутствуют на namenode.

  1. Скопируйте дистрибутив Hadoop на клиентский узел. Это означает, что вам нужно скопировать полный пакет hadoop на клиентский компьютер. См. это
  2. Получите билет пользователя из keytab, используя kinit, которая является инструментом командной строки для java.
    а. Установите jdk на свой клиентский компьютер.
    б. Установите JAVA_HOME, см. здесь
    c. Создайте файл krb5.ini в папке C:\windows\krb5.ini. Этот файл должен содержать следующую информацию,
    [libdefaults]
        default_realm = REALM
    [realms]
        REALM = {
            kdc = kdcvalue    
            admin_server = kdcvalue 
            default_domain = kdcvalue 
        }
    [domain_realm]
        .kdcvalue = REALM
        kdcvalue = REALM

REALM — имя области сервера
kdcvalue — имя хоста сервера или IP-адрес

д. Убедитесь, что путь к корзине Java установлен в переменной PATH на компьютере с Windows. Откройте командную строку. Введите приведенную ниже команду, чтобы получить билет пользователя.

kinit -k -t keytabfile username
  1. Теперь вы можете поместить файл в HDFS с помощью «hadoop fs -put src dest» или с помощью java.
person Kumar    schedule 26.05.2015
comment
1. Скопируйте дистрибутив хаупа на клиентский узел --- что именно я должен скопировать? 2. Не могли бы вы объяснить, как получить билет с помощью keytab в java, это будет полезно? так как я не эксперт по java - person chhaya vishwakarma; 26.05.2015
comment
Проверьте ответ сейчас. - person Kumar; 26.05.2015
comment
эй, спасибо, это действительно полезно ... клиентская машина не станет такой же хорошей, как пограничный узел? ... webhdfs также можно вызывать с помощью веб-браузера, верно? ... если я использую webhdfs в своем Java-коде, тогда мне также нужно пакет hadoop скопирован? - person chhaya vishwakarma; 26.05.2015
comment
Если вы используете webhdfs, вам не нужно иметь пакет hadoop на клиентской машине. См. API REST WebHDFS . - person Kumar; 27.05.2015
comment
Похожий проект вы можете найти здесь. Загрузите исходный код, получите представление и попробуйте свой собственный. webhdfs-java-client - person Kumar; 27.05.2015
comment
Да, конечно. Но для написания и отладки кода используйте Java IDE, такую ​​как eclipse, Netbeans и т. д. IDE более удобна для пользователя, чем командная строка. - person Kumar; 28.05.2015
comment
kinit — это Java-инструмент. Вы должны установить Java на свой компьютер, чтобы запустить команду kinit. - person Kumar; 28.05.2015
comment
Я установил свойства в krb5.ini, как вы предложили, но получаю следующую ошибку kinit: файл конфигурации не указывает область по умолчанию при разборе имени ‹servername› - person chhaya vishwakarma; 28.05.2015
comment
Назовите ОБЛАСТЬ заглавными буквами. Убедитесь, что вы установили правильное имя области и kdc вашего сервера. - person Kumar; 28.05.2015
comment
Kerberos работает. Пожалуйста, проверьте мои правки и дайте несколько советов, я не могу ничего получить об ошибке. Будет здорово, если вы поможете. - person chhaya vishwakarma; 01.06.2015
comment
Для использования webhdfs необходимо пройти аутентификацию. Попробуйте получить билет с помощью команды kinit, а затем попробуйте curl. - person Kumar; 02.06.2015
comment
Я успешно использовал kinit ‹username›, затем дал пароль, а затем также выдал ошибку аутентификации ... после kinit я сделал klist - не показывал ни одного предоставленного билета - person chhaya vishwakarma; 02.06.2015
comment
Для klist вы можете изменить каталог на %JAVA_HOME%\bin, а затем выполнить команду klist. Вы получите подробности. Для WebHDtFS см. эту - person Kumar; 02.06.2015
comment
Я установил клиент MIT kerberos 4.0.1. Я просмотрел ссылку, та же команда curl работает в Linux, но не работает в Windows... есть ли какая-либо другая команда, которую мне нужно использовать для Windows? - person chhaya vishwakarma; 02.06.2015
comment
Сначала проверьте, можете ли вы получить доступ к веб-интерфейсу namenode из браузера Windows. Там вы можете открыть webhdfs для просмотра каталогов. Если вы можете просматривать в браузере, вы также можете сделать это из завитка. - person Kumar; 02.06.2015
comment
ниже приведена ошибка, которую я получаю в пользовательском интерфейсе и в cmd.... Отказано в доступе при попытке открыть /webhdfs/v1/?op=LISTSTATUS: GSSException: обнаружен дефектный токен (уровень механизма: GSSHeader не нашел правильный тег) .... Я могу сгенерировать билет kerberos, тогда почему мне отказывают в доступе? - person chhaya vishwakarma; 02.06.2015
comment
Вы должны добавить kdc с помощью ksetup. Выполните приведенную ниже команду в командной строке с правами администратора. ‹br/› ksetup /addkdc REALM HOST ‹br/› замените REALM и HOST правильным значением. - person Kumar; 02.06.2015
comment
Этот шаг требуется только на компьютере с Windows, где вы хотите получить доступ к webhdfs. - person Kumar; 02.06.2015
comment
Нет доступной ссылки. Я реализовал безопасность Hadoop в Windows. Так что сопроводим вас своим опытом. - person Kumar; 02.06.2015
comment
Привет, Кумар, спасибо за помощь ... Я добавил kdc, как вы предложили, но все равно получаю ошибку аутентификации :( мне нужно также изменить домен? .. у меня есть сервер Windows 2012 - person chhaya vishwakarma; 08.06.2015
comment
Вы используете MS Windows Kerberos или не Windows Kerberos? - person chhaya vishwakarma; 08.06.2015
comment
Я использую Windows Server 2012 Active Directory. С какой проблемой вы сейчас столкнулись? - person Kumar; 08.06.2015
comment
Я могу получить билет, используя kinit и klist, которые также работают. так как я могу получить билет kerberos. Я также вставил команду curl, которую использую в своем вопросе - person chhaya vishwakarma; 08.06.2015
comment
В Windows есть собственный Kerberos, из-за него проблема? - person chhaya vishwakarma; 11.06.2015
comment
Это может быть причиной проблемы. Но я понятия не имею о команде curl. Я не пробовал это раньше. Если вы можете получить доступ к webhdfs из браузера, то, безусловно, вы можете получить доступ и из curl. - person Kumar; 12.06.2015
comment
@chhayavishwakarma, вы нашли рабочее решение? - person Dinesh Kumar P; 15.06.2015
comment
еще нет :(.... пытаюсь, но безуспешно... Я использую другой идентификатор (311122) для входа в Windows и другой идентификатор (qjth34) для аутентификации в kerberos, может ли это быть проблемой? - person chhaya vishwakarma; 15.06.2015
comment
@chhayavishwakarma вы используете IP-адрес или имя хоста в URL-адресе, можете ли вы попробовать этот curl -i --negotiate -u: http://‹hostname›:50070/webhdfs/v1/?op=LISTSTATUS - person Sachin Janani; 04.04.2016