2013-09-25 4 views
0

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

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

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

Hadoop -examples-1.1.2.jar пи 10 100

Теперь я использую клиент питона для обработки 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) 

Traceback (самый последний вызов последний):
файл «», линия 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
raise errors.PyWebHdfsException (msg = сообщение)
pywebhdfs.errors.PyWebHdfsException: {"RemoteException": {"exception": "AccessControlException", "javaClassName": "org.apache.hadoop.security.AccessControlException", "message": "Permission denied: user = webuser, access = WRITE, inode = \ "user \": mlmiller: supergroup: rwxr-xr-x "}}

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

ответ

1

Выбрал этот вариант после того, как отступил и прочитал еще несколько документов. 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) 
2

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

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

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

Спасибо

Смежные вопросы