我正在尝试使用这里提供的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
在我的情况下工作得很好。任何帮助都是非常感谢的。
发布于 2019-09-25 18:24:19
我会保留默认的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'])]
https://stackoverflow.com/questions/57859305
复制相似问题