Ошибка разрешений на webhdfs

Я работаю над использованием интерфейса REST для HDFS Hadoop в качестве удобного способа хранения файлов по сети. Для проверки я установил на свой Mac (10.8.5) hadoop, следуя этим инструкциям:

http://importantfish.com/how-to-install-hadoop-on-mac-os-x/

Это сработало как шарм, и я могу запустить hadoop и запустить базовый тест:

hadoop-examples-1.1.2.jar пи 10 100

Теперь я использую клиент python для обработки HTTP-запросов к/от webhdfs:

http://pythonhosted.org/pywebhdfs/

Но я натыкаюсь на базовую ошибку разрешений, когда пытаюсь создать каталог:

from pywebhdfs.webhdfs import PyWebHdfsClient  
hdfs = PyWebHdfsClient()  
my_dir = 'user/hdfs/data/new_dir'  
hdfs.make_dir(my_dir, permission=755)  

Трассировка (последний последний вызов):
Файл "", строка 1, в
Файл "/Library/Python/2.7/site-packages/pywebhdfs/webhdfs.py", строка 207, в make_dir
_raise_pywebhdfs_exception(response.status_code, response.text)
Файл "/Library/Python/2.7/site-packages/pywebhdfs/webhdfs.py", строка 428, в _raise_pywebhdfs_exception
вызывают ошибки. PyWebHdfsException(msg=message)
pywebhdfs.errors.PyWebHdfsException: {"RemoteException":{"exception":"AccessControlException","javaClassName":"org.apache.hadoop.security.AccessControlException","message":"Отказано в доступе: user=webuser , доступ=ЗАПИСЬ, inode=\"пользователь\":mlmiller:супергруппа:rwxr-xr-x"}}

Я также попытался указать пользователя как «hdfs» вместо значения по умолчанию для библиотеки python «webhdfs», но получил тот же результат. После 30-минутного чтения я сдался и понял, что не понимаю взаимодействия пользователей hdfs, безопасности Hadoop (которую я включил в соответствии с инструкциями по установке), моего пользователя Unix и разрешений.


person Mike Miller    schedule 25.09.2013    source источник


Ответы (2)


Вам нужно, чтобы имя пользователя PyWebHdfsClient соответствовало пользователю unix, у которого есть разрешение на доступ к каталогу, в который вы пытаетесь писать. Пользователь, который запускает службу namenode, по умолчанию является «суперпользователем».

Я написал клиент pywebhdfs, который вы используете, в ответ на потребность на работе. Если у вас есть какие-либо проблемы или вы хотите запросить функции самого клиента, оставьте вопрос на github, и я могу решить его.

https://github.com/ProjectMeniscus/pywebhdfs/issues

Спасибо

person StevenDGonzales    schedule 27.09.2013

Выяснил это после того, как отошел и прочитал еще несколько документов. webdhfs ожидает, что вы укажете значение пользователя, которое соответствует пользователю unix, запустившему hdfs из оболочки. Итак, правильный питон:

from pywebhdfs.webhdfs import PyWebHdfsClient  
user = <specify_linux_user_who_launched_hadoop>
hdfs = PyWebHdfsClient(user_name=user)  
my_dir = '%s/data/new_dir' % user  
hdfs.make_dir(my_dir, permission=755)  
person Mike Miller    schedule 25.09.2013