我正在尝试使用此处提供的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
在我的情况下效果很好。任何帮助深表感谢。
最佳答案
我会保留默认的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'])]
关于docker - pyhdfs.HdfsIOException:找不到数据节点,建议检查集群运行状况。 excludeDatanodes =空,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57859305/