我使用下面的python代码从本地系统上传一个文件到远程hdfs pyhdfs
```
from pyhdfs import HdfsClient
client = HdfsClient(hosts='1.1.1.1',user_name='root')
client.mkdirs('/jarvis')
client.copy_from_local('/my/local/file,'/hdfs/path')
使用python3.5/。hadoop正在默认端口中运行:50070 1.1.1.1是我的远程hadoop url
创建dir“jarvis”工作正常,但复制文件不起作用。我得到以下错误
回溯(最近一次呼叫):
文件“test\hdfs\u upload.py”,第14行,在client.copy\u from\u local('/tmp/data.json','/test.json')中
文件“/library/frameworks/python.framework/versions/3.6/lib/python3.6/site packages/pyhdfs.py”,第753行,从本地self.create复制(dest,f,**kwargs)
文件“/library/frameworks/python.framework/versions/3.6/lib/python3.6/site packages/pyhdfs.py”,第426行,在create metadata\u response.headers['location'],data=data,**self.\u requests\u kwargs)
file“/library/frameworks/python.framework/versions/3.6/lib/python3.6/site packages/requests/api.py”,第99行,输入返回请求('put',url,data=data,**kwargs)
文件“/library/frameworks/python.framework/versions/3.6/lib/python3.6/site packages/requests/api.py”,第44行,请求返回session.request(method=method,url=url,**kwargs)
file“/library/frameworks/python.framework/versions/3.6/lib/python3.6/site packages/requests/sessions.py”,第383行,请求resp=self.send(prep,**send\u kwargs)
文件“/library/frameworks/python.framework/versions/3.6/lib/python3.6/site packages/requests/sessions.py”,第486行,在send r=adapter.send(request,**kwargs)中
file“/library/frameworks/python.framework/versions/3.6/lib/python3.6/site packages/requests/adapters.py”,第378行,在send-raise-connectionerror(e)requests.exceptions.connectionerror:httpconnectionpool(host='ip-1-1-1-1',port=50075):url:/webhdfs/v1/test.json?op=create&user.name=root&namenoderpcaddress=ip-1-1-1:9000&overwrite=false超出了最大重试次数(原因:[errno 8]提供了节点名或服务名,或未知)
1条答案
按热度按时间2ul0zpep1#
首先,检查
webhdfs
已为hdfs群集启用。pyhdfs库使用webhdfs,因此需要在hdfs配置中启用webhdfs。要启用webhdfs,请修改hdfs-site.xml
具体如下:还有,当
copy_from_local()
api调用来自pyhdfs库,hdfs节点管理器从hdfs集群随机挑选和分配一个节点,当它这样做时,它可能只返回一个与该节点关联的域名。然后尝试与该域建立http连接以执行操作。这是因为您的主机无法理解(无法解析)该域名而失败。要解析域,您需要在
/etc/hosts
文件。例如,如果您有一个hdfs集群,其中有一个namenode和两个datanode,具有以下ip地址和主机名:
192.168.0.1(名称节点1)
192.168.0.2(数据节点1)
192.168.0.3(数据节点2)
您需要更新您的
/etc/hosts
文件如下:这将启用从主机到hdfs集群的域名解析,并且您可以通过pyhdfs进行webhdfsapi调用。