我正在使用Hadoop的HDFS的REST接口作为通过网络存储文件的方便方法。为了测试,我按照以下说明在我的mac (10.8.5)上安装了hadoop:
http://importantfish.com/how-to-install-hadoop-on-mac-os-x/
这非常有效,我可以启动hadoop并运行基本测试:
hadoop-示例-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中
raise errors.PyWebHdfsException(msg=message)message:{"RemoteException":{"exception":"AccessControlException","javaClassName":"org.apache.hadoop.security.AccessControlException",“pywebhdfs.errors.PyWebHdfsException”:“权限被拒绝: user=webuser,access=WRITE,pywebhdfs.errors.PyWebHdfsException
我还尝试将用户指定为'hdfs‘,而不是指定python库的默认值为'webhdfs’,但得到了相同的结果。读了30分钟后,我放弃了,并意识到我不明白hdfs用户、hadoop安全性(我在安装指令后启用了它)和我的unix用户和权限之间的相互作用。
发布于 2013-09-27 13:56:39
您需要使PyWebHdfsClient user_name与对您尝试写入的目录具有权限的unix用户相匹配。缺省情况下,启动namenode服务的用户是“超级用户”
我编写了您正在使用的pywebhdfs客户端,以响应工作需要。如果你有任何问题或者想要在客户端上请求特性,请在github上留下一个问题,我可以解决它。
https://github.com/ProjectMeniscus/pywebhdfs/issues
谢谢
发布于 2013-09-26 07:44:14
在离开并阅读了更多的文档后,我明白了这一点。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) https://stackoverflow.com/questions/19012798
复制相似问题