首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >pyhdfs.HdfsIOException:找不到数据节点,建议检查群集运行状况。excludeDatanodes=null

pyhdfs.HdfsIOException:找不到数据节点,建议检查群集运行状况。excludeDatanodes=null
EN

Stack Overflow用户
提问于 2019-09-10 02:21:23
回答 1查看 141关注 0票数 0

我正在尝试使用这里提供的docker运行hadoop:

https://github.com/big-data-europe/docker-hadoop

我使用以下命令:

代码语言:javascript
运行
复制
docker-compose up -d

来启动服务,并且能够使用:localhost:9870访问和浏览文件系统。每当我尝试使用pyhdfs将文件放到HDFS上时,问题就出现了。下面是我的示例代码:

代码语言:javascript
运行
复制
hdfs_client = HdfsClient(hosts = 'localhost:9870')

# Determine the output_hdfs_path
output_hdfs_path = 'path/to/test/dir'

# Does the output path exist? If not then create it
if not hdfs_client.exists(output_hdfs_path):
      hdfs_client.mkdirs(output_hdfs_path)

hdfs_client.create(output_hdfs_path + 'data.json', data = 'This is test.', overwrite = True)

如果测试目录在HDFS上不存在,代码可以成功地创建它,但是当它到达.create部件时,它会抛出以下异常:

代码语言:javascript
运行
复制
pyhdfs.HdfsIOException: Failed to find datanode, suggest to check cluster health. excludeDatanodes=null

令我惊讶的是,我的代码能够创建空目录,但无法将文件放到HDFS上。我的docker-compose.yml文件与github资源库中提供的文件完全相同。我所做的唯一更改是在我更改的hadoop.env文件中:

代码语言:javascript
运行
复制
CORE_CONF_fs_defaultFS=hdfs://namenode:9000

代码语言:javascript
运行
复制
CORE_CONF_fs_defaultFS=hdfs://localhost:9000

我在sof上看到了另一个post,并尝试了以下命令:

代码语言:javascript
运行
复制
hdfs dfs -mkdir hdfs:///demofolder

在我的情况下工作得很好。任何帮助都是非常感谢的。

EN

回答 1

Stack Overflow用户

发布于 2019-09-25 18:24:19

我会保留默认的CORE_CONF_fs_defaultFS=hdfs://namenode:9000设置。在将正斜杠添加到路径后,我可以很好地工作

代码语言:javascript
运行
复制
import pyhdfs

fs = pyhdfs.HdfsClient(hosts="namenode")
output_hdfs_path = '/path/to/test/dir'

if not fs.exists(output_hdfs_path):
       fs.mkdirs(output_hdfs_path)

fs.create(output_hdfs_path + '/data.json', data = 'This is test.')

# check that it's present

list(fs.walk(output_hdfs_path))
[('/path/to/test/dir', [], ['data.json'])]
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57859305

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档