HDFS每日一练1 API读取文件

2023-05-16

HDFS每日一练1 API读取文件

更多整理都在我的github上:Auraros欢迎大家。

题目

在右侧代码编辑区中编写代码实现如下功能:

  • 使用FSDataInputStream获取HDFS/user/hadoop/目录下的task.txt的文件内容,并输出,其中urihdfs://localhost:9000/user/hadoop/task.txt

测试说明:

点击评测,平台会通过脚本创建/user/hadoop/task.txt文件并添加相应内容,无需你自己创建,开启hadoop,编写代码点击评测即可。因为Hadoop环境非常消耗资源,所以你如果一段时间不在线,后台会销毁你的镜像,之前的数据会丢失(你的代码不会丢失),这个时候需要你重新启动Hadoop

预期输出: WARN [main] - Unable to load native-hadoop library for your platform... using builtin-java classes where applicable 怕什么真理无穷,进一寸有一寸的欢喜。

教程

在本关和之后的关卡中,我们要深入探索HadoopFileSystem类,它是与Hadoop的某一文件系统进行交互的API

在这里插入图片描述

为了完成本关任务,你需要学习并掌握:1.FileSystem对象的使用,2.FSDataInputSteam对象的使用。

FileSyetem对象

背景:要从Hadoop文件系统中读取文件,最简单的办法是使用java.net.URL对象打开数据流,从中获取数据。不过这种方法一般要使用FsUrlStreamHandlerFactory实例调用setURLStreamHandlerFactory()方法。不过每个Java虚拟机只能调用一次这个方法,所以如果其他第三方程序声明了这个对象,那我们将无法使用了。 因为有时候我们不能在程序中设置URLStreamHandlerFactory实例,这个时候咱们就可以使用FileSystem API来打开一个输入流,进而对HDFS进行操作。

FileSystem是一个通用的文件系统APIFileSystem实例有下列几个静态工厂方法用来构造对象。

public static FileSystem get(Configuration conf)throws IOException
public static FileSystem get(URI uri,Configuration conf)throws IOException
public static FileSystem get(URI uri,Configuration conf,String user)throws IOException

Configuration对象封装了客户端或服务器的配置,通过设置配置文件读取类路径来实现(如:/etc/hadoop/core-site.xml)。

  • 第一个方法返回的默认文件系统是在core-site.xml中指定的,如果没有指定,就使用默认的文件系统。
  • 第二个方法使用给定的URI方案和权限来确定要使用的文件系统,如果给定URI中没有指定方案,则返回默认文件系统,
  • 第三个方法作为给定用户来返回文件系统,这个在安全方面来说非常重要

FSDataInputStream对象

实际上,FileSystem对象中的open()方法返回的就是FSDataInputStream对象,而不是标准的java.io类对象。这个类是继承了java.io.DataInputStream的一个特殊类,并支持随机访问,由此可以从流的任意位置读取数据。

在有了FileSystem实例之后,我们调用open()函数来获取文件的输入流。

public FSDataInputStream open(Path p)throws IOException
public abst\fract FSDataInputStream open(Path f,int bufferSize)throws IOException

第一个方法使用默认的缓冲区大小为4KB

了解了这些,就可以看看实例。

实例

接下来我们通过一个实例来学习它的用法。

首先我们在本地创建一个文件,然后上传到HDFS以供测试。

# touch test.txt
# vim test.txt
读作池塘如虎踞,绿荫属下养精神
春来我不先开口,哪个虫儿敢作声

# hadoop fs -put test.txt /user/tmp

接下来,我们使用FileSystem,查看咱们刚刚上传的文件。 代码如下:

public sattic void main(String[] args){
    URI uri = URI.create("hdfs://localhost:9000/user/tmp/test.txt");
    Configuration config = new Configuration();
    FileSystem fs = FileSystem.get(uri, config);
    InputStream in = null;
    try {
        in = fs.open(new Path(uri));
        IOUtils.copyBytes(in, System.out, 2048, false);
    } catch (Exception e) {
        IOUtils.closeStream(in);
    }
}

答案

package step2;

import java.io.IOException;
import java.io.InputStream;
import java.net.URI;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IOUtils;


public class FileSystemCat {
	
	public static void main(String[] args) throws IOException {
		//请在Begin-End之间添加你的代码,完成任务要求。
        /********* Begin *********/
		URI uri = URI.create("hdfs://localhost:9000/user/hadoop/task.txt");
        Configuration conf = new Configuration();
        FileSystem fs = FileSystem.get(uri, conf);
        InputStream in = null;
        try{
            in = fs.open(new Path(uri));
            IOUtils.copyBytes(in, System.out, 2048, false);
        }catch(Exception e){
            IOUtils.closeStream(in);
        }
		
		
		
		/********* End *********/
	}
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

HDFS每日一练1 API读取文件 的相关文章

随机推荐

  • Dell 服务器 用板载网口访问iDrac 并设置风扇静音

    最近需要在办公区域放一台DELL R230 进行测试 xff0c 由于加装了 C2000 pro NVME SSD作为数据盘 xff0c 导致风扇开机后就直奔15000 43 转 xff1b 官方的解释是 xff1a 由于PCIE通道上使用
  • sina 股票接口 2022.1.21 更新

    常年以来 xff0c 作为数据挖掘的一部分 xff0c 作为模拟交易的接口 xff0c 一直使用 sina 的股票接口 http hq sinajs cn 白嫖 xff1b 2022年1月21日 xff0c 这次新浪接口更新后增加了 htt
  • 使用nginx 反向代理 wordpress

    最近需要使用WORDPRESS 建立一个知识库 WIKI xff0c nginx 和wordpress的安装教程网上已经有很多了 xff0c 不再赘述 具体配置参照如下 xff0c 达到效果 xff1a 访问 https www abc c
  • linux 查看CPU 核心温度

    以下命令直接查看CPU 核心温度 echo cat sys class thermal thermal zone0 temp 1000
  • 加速github下载

    前言 由于github 的服务器在海外 xff0c 在国内下载github资源很慢 xff0c 或者无法下载 尤其是最近AI 大火 提供一种加速方式 git config global url 34 https g blfrp cn 34
  • 后ARM时代,嵌入式工程师的自我修养

    1 嵌入式学习的一些概念理解误区 很多嵌入式初学者认为 xff0c 学嵌入式 xff0c 就是学习ARM xff0c 就是学习开发板 买一块开发板 xff0c 然后在上面 移植 u boot Linux内核 xff0c 再使用busybox
  • Linux在shell下输出进度条

    无论下载 xff0c 解压缩 xff0c 复制等情况时 xff0c 我们总能看到进度条这种东西 进度条以图片形式的可视化窗口直观的显示出计算机处理当前任务的速度 xff0c 完成度 xff0c 剩余完成的任务量 xff0c 以及需要的时间等
  • linux ls 按文件大小排序

    ls Sl 其是按照由大到小排序 xff0c 如果想要反过来 xff0c 从小到大 xff0c 那么用 ls Slr 再者 xff0c 如果想要输入是按照 便于人类阅读的方式 xff0c 那么就再加一个 h xff0c 表示 34 huma
  • 常用损失函数

    损失函数汇总 1 目标检测类1 1 分类1 1 1 centerloss1 1 2 arcsoftmax 1 1 3 focalloss 1 2 人脸1 2 1GIOU loss1 2 2 DIOU LOSS1 2 3 CIOU LOSS1
  • xrandr命令用法

    目录 1 常用命令 2 获取其他用法 3 参数选择 1 常用命令 xrandr 作用 xff1a 显示当前显示器可以支持的分辨率 xrandr q 也可以使用 q 参数来查看屏幕目前支持的分辨率 root 64 ubuntu home sa
  • VirtualBox中Ubuntu18.04挂载添加虚拟硬盘

    在ubuntu中挂载一个虚拟硬盘存储在主机硬盘 xff0c 目的是为了防止虚拟机系统崩溃导致数据资料丢失 xff0c 在我们创建完成虚拟硬盘后 xff0c 可以将虚拟硬盘作为所有文件的存放区 想要灵活使用这个虚拟硬盘 xff0c 只需将其挂
  • virtualbox中的Ubuntu18.04版本文件映射win10(虚拟机中Ubuntu安装samba)

    samba是什么 xff1f samba是文件共享服务器 xff0c 一般应用在局域网中 xff0c 能控制共享的权限 xff0c 也能够方便的让用户在客户端和服务端都可以修改文件内容并同步提交 配置samba流程 1 进入root权限 s
  • navicat连接mysql报错1251的解决方法

    在环境变量中添加mysql路径 xff1a 找到下载mysql的文件目录 xff0c 复制并添加至环境变量Path eg C Program Files MySQL MySQL Server 8 0 bin 或者 win 43 r gt s
  • mkdir命令、chmod修改权限、利用scp 远程上传下载文件/文件夹

    一 mkdir命令 在工作目录下 xff0c 建立一个名为 AAA 的子目录 mkdir AAA 在工作目录下的 BBB 目录中 xff0c 建立一个名为 Test 的子目录 若 BBB 目录原本不存在 xff0c 则建立一个 xff08
  • 树莓派 vnc Cannot currently show the desktop

    情况一 xff1a 分辨率没有设置好 解决方案 xff1a 设置分辨率 sudo raspi config 情况二 xff1a 树莓派内存空间不够用 解决方案 xff1a 参考链接二 三 sudo apt get clean sudo ap
  • 基于51单片机的红外避障小车

    提示 xff1a 记录2022年4月做的毕设 文章目录 前言一 任务书1 1设计 研究 目标 1 2设计 研究 内容 二 代码思路三 硬件四 部分代码五 联系我们喜欢请点赞哦 xff01 企鹅号 前言 基于51单片机的红外避障小车 xff0
  • Snipaste的安装及快捷键的设置

    Snipaste的安装及快捷键的设置 关于Snipaste xff1a Snipaste 是一个简单但强大的截图工具 xff0c 也可以让你将截图贴回到屏幕上 xff01 可以将剪贴板里的文字或者颜色信息转化为图片窗口 xff0c 并且将它
  • 并发编程之深入了解CAS

    文章目录 一 什么是 CAS 二 CAS应用三 CAS源码分析三 CAS缺陷四 ABA问题及其解决方案4 1 什么是ABA问题4 2 ABA问题的解决方案 一 什么是 CAS CAS xff08 Compare And Swap xff0c
  • HDU1085 —— 生成函数入门题

    1 43 X i 最经典的生成函数 include lt iostream gt include lt cstring gt include lt algorithm gt include lt vector gt using namesp
  • HDFS每日一练1 API读取文件

    HDFS每日一练1 API读取文件 更多整理都在我的github上 xff1a Auraros欢迎大家 题目 在右侧代码编辑区中编写代码实现如下功能 xff1a 使用FSDataInputStream获取HDFS的 user hadoop