Python无法读取hdfs,requests.exceptions.ConnectionError: HTTPConnectionPool(host='big08', port=50075): Ma

一,问题描述:

在用python的hdfs库操作HDFS时,可以正常的获取到hdfs的文件

from hdfs.client import Client


#读取hdfs文件内容,将每行存入数组返回
def read_hdfs_file(client,filename):
    #with client.read('samples.csv', encoding='utf-8', delimiter='\n') as reader:
    #  for line in reader:
    #pass
    lines = []
    with client.read(filename, encoding='utf-8', delimiter='\n') as reader:
        for line in reader:
            #pass
            #print line.strip()
            lines.append(line.strip())
            print(lines)
    return lines


client = Client("http://192.168.129.14:50070", root='/')
print('连接没问题')
data = read_hdfs_file(client,'/input/python/data1')

报错信息:

requests.exceptions.ConnectionError: HTTPConnectionPool(host='big08', port=50075): Max retries exceeded with url: /webhdfs/v1/input/python/data1?op=OPEN&namenoderpcaddress=ns&offset=0 (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x7f1557e064a8>: Failed to establish a new connection: [Errno 111] Connection refused',))

二,解决办办法

(1)因为没有指定根路径(root path),需要在调用Client方法连接hdfs时指定root path


client = Client("http://10.0.30.9:50070", root='/')

(2)在运行python程序的主机的hosts文件中没有加上访问集群的主机名和ip的映射

解析:博主这里配置了6台虚拟机服务器的集群,在第7台虚拟机服务器上访问集群,按理说上面已经制定了入口ip地址,映射文件的作用就是解析主机名去找ip,但是这里直接指定ip反而不行,具体内部机制未知,从报错信息猜测:虽然指定了active的namenode节点ip,但是这个节点应该是又去找其他节点,会用到这个hosts文件。

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值