我正在使用REST接口来使用Hadoop的HDFS作为通过网络存储文件的便捷方式。为了测试我按照这些说明在我的mac(10.8.5)上安装了hadoop:
http://importantfish.com/how-to-install-hadoop-on-mac-os-x/
这就像一个魅力,我可以启动hadoop并进行基本测试:
hadoop-examples-1.1.2.jar pi 10 100
现在,我正在使用python客户端来处理来自/来自webhdfs的HTTP请求:
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中
引发errors.PyWebHdfsException(msg = message)
pywebhdfs.errors.PyWebHdfsException:{“RemoteException”:{“exception”:“AccessControlException”,“javaClassName”:“org.apache.hadoop.security.AccessControlException”,“message”:“权限被拒绝:user = webuser,access = WRITE,inode = \“user \”:mlmiller:supergroup:rwxr-xr-x“}}
我也尝试将用户指定为'hdfs'而不是python lib对'webhdfs'的攻击,但得到相同的结果。阅读30分钟后,我放弃了,并意识到我不明白hdfs用户,hadoop安全性(我在安装isntructions后启用)和我的unix用户和权限之间的相互作用。
答案 0 :(得分:2)
您需要让PyWebHdfsClient user_name与对您尝试写入的目录具有权限的unix用户匹配。启动namenode服务的用户默认为“超级用户”
我写了你正在使用的pywebhdfs客户端,以满足工作需要。如果您有任何问题或想在客户端上询问功能,请在github上留下问题,我可以解决。
https://github.com/ProjectMeniscus/pywebhdfs/issues
谢谢
答案 1 :(得分:1)
在走开并阅读更多文档之后想出这个。 webdhfs希望您指定一个用户值,该值与从shell启动hdfs的unix用户相匹配。所以正确的python是:
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)