Hadoop文件系统接口

Hadoop有一个抽象文件系统的概念,hdfs只是其中的一个实现,Java抽象类org.apache.hadoop.fs.FileSystem定义了hadoop中的一个文件系统接口,hdfs是实现了这个接口的一个文件系统,还有其它的文件系统实现,例如使用了本地磁盘文件系统的Local文件系统和RawLocalFilesystem等。

一:hdfs命令行接口

类似于传统的文件系统,hdfs提供命令行接口来操作文件系统。Hdfs的命令形式一般为:%hadoop fs -ls /temp。其中hadoop表示调用hadoop命令,fs表示hadoop中的文件系统,-ls是hdfs中的一个命令,都需要一个”-”在文件系统命令前面,再后面为命令的参数。示例命令的含义为查看hdfs中/temp目录下的所有文件信息。

二:Java接口

编写java程序访问hdfs文件系统有两种方式,一种是通过URL读取数据,另一种是通过Hadoop的Filesystem API来访问文件系统。

  1. 从Hadoop URL读取数据

一种最简单的从HDFS读取数据的方式是通过java.net.URL类来打开一个输入流,通过读取流来读取数据。要使java程序识别hadoop的URL方案,需要特殊的设置。Hadoop的解决方案是调用java.net.URL的setURLStreamHandlerFactory方法,设置一个FsUrlStreamHandlerFactory来识别hdfs的文件URL方案。另外,Hadoop提供了一个IOUtils类来处理流等。在一个java虚拟机中,setURLStreamHandlerFactory方法只允许调用一次,因此如果同一个虚拟机中的第三方组件使用了同一个方法,这个就不能使用了。

  1. 通过API访问数据

当无法使用setURLStreamHandlerFactory方法时,只有使用hadoop提供的FileSystem API来访问hdfs。FileSystem提供get方法来获取一个文件系统的实例,具体获取的文件系统由一个配置类configuration的对象来决定,这个对象的内容是有配置文件中的内容决定的,具体来说就是core-site.xml决定的。同时get方法还可以有两个参数,URI与user,前者代表URI方案,也可以指定文件系统实例,后者代表用户。获取文件系统实例后,可以打开文件获取FSDataInputStream,这个流继承了java.io.DataInputStream,同时实现了两个接口,使其可以读取文件的特定位置的内容,获取现在所在位置想对于文件起点的偏移量等随机读取功能。

Hdfs写入文件可以使用create或者append获取一个FSDataOutputStream对象,这个对象可以用来在文件末尾追加数据。Hadoop不支持随机的文件写操作。同时API提供了新建文件夹的操作。Filestatus用来保存文件信息,同时FileSystemAPI 提供listStatus方法来列出一个目录下所有的文件的信息。提供delete方法来删除文件或者目录。

  1. 通配符与PathFilter

处理一系列文件是非常常见的需求,有时候需要从一系列文件中选择符合特定条件的文件作为输入,此时可以使用通配符来实现只处理一部分文件的功能。但是通配符不一定满足需求,此时可以利用PathFilter来进一步优化实现更复杂的过滤需求。

时间: 2024-10-31 11:25:16

Hadoop文件系统接口的相关文章

hadoop2.5.2学习及实践笔记(六)—— Hadoop文件系统及其java接口

文件系统概述 org.apache.hadoop.fs.FileSystem是hadoop的抽象文件系统,为不同的数据访问提供了统一的接口,并提供了大量具体文件系统的实现,满足hadoop上各种数据访问需求,如以下几个具体实现(原表格见<hadoop权威指南>): 文件系统 URI方案 Java实现 (org.apache.hadoop) 定义 Local file fs.LocalFileSystem 支持有客户端校验和本地文件系统.带有校验和的本地系统文件在fs.RawLocalFileS

hadoop文件系统浅析

1.什么是分布式文件系统? 管理网络中跨多台计算机存储的文件系统称为分布式文件系统. 2.为什么需要分布式文件系统了? 原因很简单,当数据集的大小超过一台独立物理计算机的存储能力时候,就有必要对它进行分区(partition)并存储到若干台单独计算机上. 3.分布式系统比传统的文件的系统更加复杂 因为分布式文件系统架构在网络之上,因此分布式系统引入了网络编程的复杂性,所以分布式文件系统比普通文件系统更加复杂. 4.Hadoop的文件系统 很多童鞋会把hdfs等价于hadoop的文件系统,其实ha

hadoop学习笔记:hadoop文件系统浅析

1.什么是分布式文件系统? 管理网络中跨多台计算机存储的文件系统称为分布式文件系统. 2.为什么需要分布式文件系统了? 原因很简单,当数据集的大小超过一台独立物理计算机的存储能力时候,就有必要对它进行分区(partition)并存储到若干台单独计算机上. 3.分布式系统比传统的文件的系统更加复杂 因为分布式文件系统架构在网络之上,因此分布式系统引入了网络编程的复杂性,所以分布式文件系统比普通文件系统更加复杂. 4.Hadoop的文件系统 很多童鞋会把hdfs等价于hadoop的文件系统,其实ha

hadoop文件系统简介

Hadoop文件系统简介 Hadoop家族中,最重要的两部分内容就是MapReduce和HDFS,其中MapReduce是一种编程范型,这种范型比较适合用来在分布式环境下进行批处理计算.另一部分就是HDFS,即hadoop分布式文件系统.Hadoop环境下可以兼容多种文件系统,包括本地文件系统,体现在文件系统API层面上就是有一个文件系统接口,这个接口可以有多种实现,包括本地文件系统或者分布式文件系统等. 一:HDFS的设计目标 HDFS是用来将数据存储到多台计算机上(计算机集群)为主要设计目标

hadoop文件系统详解--(1)

Hadoop有一个抽象的文件系统概念,HDFS只是其中的一个实现.Java抽象类 org.apache.hadoop.fs.FileSystem展示了Hadoop的一个文件系统,而且有几个具体实现,如表 3-1所示. 文件系统 URI 方案 Java实 现(全部在 org.apache.hadoop) 描述 Local file fs.LocalFileSystem 针对有客户端校验和 的本地连接磁盘使用 的文件系统.针对没 有校验和的本 地文件系统使用 RawLocalFileSystem.

Hadoop文件系统详解-----(一)

Hadoop有一个抽象的文件系统概念,HDFS只是其中的一个实现.Java抽象类 org.apache.hadoop.fs.FileSystem展示了Hadoop的一个文件系统,而且有几个具体实现,如表 3-1所示. 文件系统 URI  方案 Java实 现(全部在  org.apache.hadoop) 描述 Local file fs.LocalFileSystem 针对有客户端校验和 的本地连接磁盘使用 的文件系统.针对没 有校验和的本 地文件系统使用 RawLocalFileSystem

hadoop文件系统与I/O流

本文地址:http://www.cnblogs.com/archimedes/p/hadoop-filesystem-io.html,转载请注明源地址. hadoop借鉴了Linux虚拟文件系统的概念,引入了hadoop抽象文件系统,并在此基础上,提供了大量的具体文件系统的实现,满足构建于hadoop上应用的各种数据访问需求 hadoop文件系统API hadoop提供一个抽象的文件系统,HDFS只是这个抽象文件系统的一个具体的实现.hadoop文件系统的抽象类org.apache.hadoop

Java API实现Hadoop文件系统增删改查

Java API实现Hadoop文件系统增删改查 Hadoop文件系统可以通过shell命令hadoop fs -xx进行操作,同时也提供了Java编程接口 maven配置 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.ap

Hadoop学习笔记(3) Hadoop文件系统二

1 查询文件系统 (1) 文件元数据:FileStatus,该类封装了文件系统中文件和目录的元数据,包括文件长度.块大小.备份.修改时间.所有者以及版权信息.FileSystem的getFileStatus()方法用于获取文件或目录的FileStatus对象. 例:展示文件状态信息 public class ShowFileStatusTest{ private MiniDFSCluster cluster; private FileSystem fs; @Before public void