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

时间:2019-09-09 18:21:23

标签: docker hadoop hdfs

我正在尝试使用此处提供的docker运行hadoop:

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

我使用以下命令:

docker-compose up -d

使用以下命令可以启动服务并能够访问它并浏览文件系统:localhost:9870。每当我尝试使用pyhdfs将文件放在HDFS上时,问题都会出现。这是我的示例代码:

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部分时,它将引发以下异常:

pyhdfs.HdfsIOException: Failed to find datanode, suggest to check cluster health. excludeDatanodes=null

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

CORE_CONF_fs_defaultFS=hdfs://namenode:9000

CORE_CONF_fs_defaultFS=hdfs://localhost:9000

我在sof上看到了其他post,并尝试了以下命令:

hdfs dfs -mkdir hdfs:///demofolder

在我的情况下效果很好。非常感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

我将保留默认的CORE_CONF_fs_defaultFS=hdfs://namenode:9000设置。 在路径上添加正斜杠后,对我来说效果很好

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'])]