首页 理论教育 云计算原理:HDFS接口(API)使用指南

云计算原理:HDFS接口(API)使用指南

时间:2023-10-29 理论教育 版权反馈
【摘要】:Hadoop还提供了一整套FileSystem操作API接口,为HDFS中内容操作提供服务。HDFS则需要使用自带的类库建立相关路径。FileSystem提供了一套加载当前环境并建立读写路径的API,代码如下:通过方法名可知,此代码为重载的方法,使用传入的环境变量获取对应的HDFS。使用FileSystem API写入数据。

云计算原理:HDFS接口(API)使用指南

HDFS是构建在Java体系上的分布式计算框架,可以使用Java提供的API程序对文件进行读写操作,为Java其他服务提供链接与支持,例如,使用JSP搭建B/S服务系统进行“云存储”以及运行相应的“云计算”,HDFS的文件解释与执行器是运行良好的Java应用,对Java代码进行编译,生成可执行字节码的文件。根据Java字节码执行原理,可以使用其他语言对HDFS进行操作,只需要能够在底层生成相应的字节码文件即可。

可以使用FileSystem API操作HDFS中的内容,读取和写入数据。

1.操作HDFS中的内容

HDFS提供了大量命令,操作HDFS中的数据,如基本数据的读取,常用的增删、修改、查询命令等。Hadoop还提供了一整套FileSystem操作API接口,为HDFS中内容操作提供服务。

FileSystem在Hadoop框架源代码org.apache.hadoop.fs包中,是关于Hadoop文件系统使用Java代码实现的相关操作类,主要包括文件系统的建立、文件定义、文件的基本操作等。获取指定对象的文件系统代码如下:

FileSystem提供了相应的方法对文件进行操作,代码如下:

上面这些方法是文件系统应该具备的基本操作,程序设计人员可以根据不同的设计搭建应用程序框架。在这个文件系统中,某些操作的实现细节可能因为文件系统的特点而不同,可以灵活设计所需要的文件系统。

2.读取数据

学习Java的I/O过程中,使用File类库为文件的读写建立路径。HDFS则需要使用自带的类库建立相关路径。通常使用Path类定义需要的路径,具体代码如下:

【例8-1】使用FileSystem API从指定的HDFS中读取数据。

读取数据的具体代码如下:

将程序上传到集群后使用如下代码:

文件系统是与当前环境变量紧密联系的,对于当前HDFS来说,在创建当前文件系统实例之前,有必要获得当前的环境变量。代码如下:

Configuration类为用户提供当前环境变量的实例,其中封装了当前搭载环境的配置,由core-site.xml设置,一般返回默认的本地系统文件。

FileSystem提供了一套加载当前环境并建立读写路径的API,代码如下:

通过方法名可知,此代码为重载的方法,使用传入的环境变量获取对应的HDFS。第一个方法使用默认的URI地址获取当前对象中环境变量加载的文件系统,第二个方法使用传入的URI获取路径指定的文件系统。

使用fs.open(Path path)方法打开数据的读入open方法的代码如下:

open方法根据path路径和获取的环境变量,读取设置的缓冲区大小,如果未设定则以默认的4 096设定,然后返回数据流FSDataInputStream实例。在对FSDataInputStream进行分析之前,将第六行代码替换如下:(www.xing528.com)

程序依旧可以正常运行。InputStream是一个标准的I/O类,提供标准输入流。通过替换代码可以得到,FSDataInputStream继承自DataInputStream,又实现了两个接口,为HDFS提供使用输入流的接口。

PositionedReadable接口通过实现read方法及多个重载的readFully方法为文件从指定偏移处读取数据至内存中。

对方法中的定义说明如下:

·position是使用long定义的数据偏移量,用于指定读取的开始位置。

·buffer是设定的缓存byte数组,用以存放读取的数据,默认为4096,offset是从指定缓存数组开始计算的偏移量。

·length是每次读取的长度

由此可知,read方法从所需要读取文件指定的position处读取长度为length字节的数据至指定的buffer数组中。

seekable接口提供了seek(long desired)方法来实现对数据的重定位,seek可以移动到文件的任何一个绝对位置,如使用seek(0)移动到文件的开始位置。

3.写入数据

FileSystem API设置了对文件的写功能。

【例8-2】使用FileSystem API写入数据。

create(Path f)依次打开创建文件输出流的通道。

FSDataOutputStream的方法具有多个重载版本,通过依次调用,对是否复写已有文件、文件的缓存、保存时复制的副本数量、文件块大小等有了明确的规定,若没有指定则以默认值取代。

create方法的返回值是一个FSDataOutputStream对象,FSDataOutputStream也是继承OutoutStream的一个子类,为FileSystem提供文件的输出流。可以使用OutoutStream中的write方法对字节数组进行写操作。

Progressable接口中只有一个progress方法,每次在64 K的文件写入既定的输入流后,调用一次progress方法。

注意:

FSDataOutputStream与FSDataInputStream类似,也有getPos方法,返回文件内读取的长度。但是FSDataOutputStream不能使用seek方法对文件重新定位。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈