学习篇-Hadoop-HDFS-API-open读取文件

一、HDFS-API-open读取文件
1. 准备数据和代码实现

基于阿里云搭建的hadoop环境,先查看文件路径,命令:hadoop fs -ls /
在这里插入图片描述
读取根目录下的README.txt

Java代码:通过fileSystem对象open方法打开hdfs的文件

// 打开阿里云hadoop服务根目录的README.txt文件
FSDataInputStream open = fileSystem.open(new Path("/README.txt"));
// 将文件内容打印到控制台
IOUtils.copyBytes(open, System.out, 2048);
2. 出现的问题
  • 运行报错:Could not obtain block: BP-657694722-172.31.215.197-1587788443531:blk_1073741825_1001 file=/README.txt,但是创建文件和文件夹确实正常的。

    原因:

    • 文件夹是放在NameNode上的,在etc/hadoop/core-site.xml中的fs.defaultFS已经配置了任意ip可以访问。所以创建文件夹和文件名都不会有问题,但是当去读取数据的时候,NameNode和DataNode需要通信,而它们当时注册的时候,根据上面的报错信息,我们就知道肯定是内网【172.31.215.197】,当然通过断点调试,我们也可以证明这点。读数据的时候先访问NameNode,NameNode返回一个内网地址给我,那我本地肯定是访问不了的。
      在这里插入图片描述
    • 阿里云安全策略未打开50010端口,DataNode的数据传输端口

    解决方案:

    • 创建configuration之后设置dfs.client.use.datanode.hostname为true

      configuration.set("dfs.client.use.datanode.hostname", "true");
      
    • 查看阿里云内网ip,命令ifconfig
      在这里插入图片描述

    • 查看阿里云内网映射,命令:vim /etc/hosts
      在这里插入图片描述

    • 配置本地host:阿里云公网ip 和阿里云的内网ip对应的映射
      在这里插入图片描述

    • 阿里云安全组开放50010端口

    • 效果
      在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值