ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

HDFS 在本地使用java API上传文件到阿里云ECS报错 org.apache.hadoop.hdfs.BlockMissingException: Could not obtain bloc

2022-06-28 18:32:03  阅读:204  来源: 互联网

标签:minReplication datanode hadoop obtain 报错 本地 apache org


HDFS 在本地使用java API上传文件到阿里云ECS报错

org.apache.hadoop.hdfs.BlockMissingException: Could not obtain block

org.apache.hadoop.ipc.RemoteException(java.io.IOException): could only be replicated to 0 nodes instead of minReplication (=1)

问题描述

在本地使用Java API操作HDFS文件系统上传和下载文件时获取不到数据,连接DataNode异常,按照常规思路百度报错检查后没有问题,意识到可能是集群搭载在阿里云ECS上的缘故。

文件下载时报错

org.apache.hadoop.hdfs.BlockMissingException: Could not obtain block: BP-691697918-172.27.90.118-1656255122515:blk_1073742087_1263 file=/dir1/score.txt

image

文件上传时候报错

org.apache.hadoop.ipc.RemoteException(java.io.IOException): File /big3.txt could only be replicated to 0 nodes instead of minReplication (=1).  There are 3 datanode(s) running and 3 node(s) are excluded in this operation

image

问题原因

文件夹和文件名都是存放在 NameNode 上的,本地可以通过公网访问 NameNode,所以创建文件夹和文件都可以,但是读写数据的时候,NameNode 和DataNode 是通过内网通信的,NameNode 会返回给本地 DataNode 的内网 IP,本地就访问不了了。

解决办法

在代码中添加配置设置Hadoop的dfs客户端使用hostname访问datanode

//创建Configuration对象
Configuration conf = new Configuration();
//设置Hadoop的dfs客户端使用hostname访问datanode
conf.set("dfs.client.use.datanode.hostname", "true");

注意

在本地电脑hosts文件中需要配置主机名与DataNode服务器公网ip的映射

参考链接

https://blog.csdn.net/qq_44249833/article/details/106533826

标签:minReplication,datanode,hadoop,obtain,报错,本地,apache,org
来源: https://www.cnblogs.com/yy-yang/p/16420646.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有