我正在尝试使用此处提供的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
在我的情况下效果很好。非常感谢您的帮助。
答案 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'])]