【填坑】pyhton在Docker中访问HDFS: Name or service not known

场景

目标使用pyhton+jupyter_notebook + hdfs 访问HDFS存取文件

应用部署于Docker(18.09.0-3.el7)环境

代码

importpandas as pd

from hdfs import  InsecureClient,Client,HdfsError

host ='http://node0:50070;http://node1:50070'

fileDir ='/data/nlp/uploads/'

fileName ='20190418170826_test01.xlsx'

client =Client(host)print(client.list(fileDir))

['20190418170826_test01.xlsx']

try:

     withclient.read(fileDir+fileName) as  hdfs_in_fs: 

           predictDF = pd.read_csv(hdfs_in_fs, names=predict_cols,                               index_col='Number')except  HdfsErrorase: 

print(e)

报错:

NewConnectionError(': Failed to establish a new connection: [Errno -2] Name or service not known',))

原因分析

报错的重点在于,Max retries exceeded with url 和 Name or service not known达到最大尝试次数后,提示未知的地址或服务,说明客户端并没有与数据节点建立连接。

数据流向

根据hdfs读流程的数据流向可以看到,当主节点确认hdfs中存在被请求的数据时,客户端时直接与子节点建立连接的,而在某个特定情况下,子节点和客户端可能不在同一网段,或者客户端/etc/host中没有记录子节点地址与机器名的映射,而导致连接失败。

解决办法

docker中没有vi、vim编辑器,所以可以使用如下命令往hosts中添加

/bin/sh -c"echo <ip地址> node152 >> /etc/hosts"

亲测试有效,洗完有帮助。

坑无涯,勤作舟。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1.简介 Hadoop是一款开源的大数据通用处理平台,其提供了分布式存储和分布式离线计算,适合大规模数据、流式数据...
    哦00阅读 918评论 0 0
  • HDFS文件系统 HDFS是一个分布式文件系统,采用分而治之的设计思想,将大文件、大批量文件,分布式存放在大量服务...
    spilledyear阅读 1,412评论 0 0
  • 各版本hadoop文档地址 Hadoop的框架最核心的设计就是:HDFS(Hadoop Distributed F...
    MicoCube阅读 1,082评论 0 2
  • Hadoop HA集群搭建文档.............................................
    钟敏_1788阅读 1,498评论 0 0
  • 心中有个小太阳,云雾重重又怎样,我一样把你通通扒开,暖暖的
    响响屁阅读 285评论 0 0