第4章 HDFS的Java API

4.5 Java API介绍

在4.4节我们已经知道了HDFS Java API的Configuration、FileSystem、Path等类,本节将详细介绍HDFS Java API,一下节再演示更多应用。

4.5.1 Java API 官网

Hadoop 2.7.3 Java API官方地址

http://hadoop.apache.org/docs/r2.7.3/api/index.html

HDFS Java API 操作 hdfs java api怎么创建_hadoop

如上图所示,Java API页面分为了三部分,左上角是包(Packages)窗口,左下角是所有类(All Classes是)窗口,右侧是详情窗口。

这里推荐使用“先左下角索引,然后查看右侧详情”的方法,好似查英文词典一样。而左上角的包窗口,使用较少。

左下角窗口列出了所有的Java接口和类,可以直接拖动滑动条查找需要的接口或类。如图所示,比如查找到FileSystem,单击该类,右侧窗口将显示该类的详细信息,包括属性方法等。

HDFS Java API 操作 hdfs java api怎么创建_HDFS Java API 操作_02

4.5.2 Configuration类

方法

说明

void set(String name, String value)

设置属性,name是属性名,value是属性值

void addResource(String name)

添加一个配置资源

比如

// 1.创建配置器 
Configuration conf = new Configuration();
conf.set("fs.default.name", "hdfs://192.168.80.131:9000");
conf.set("mapred.jop.tracker", "192.168.80.131:9001");
Configuration conf = new Configuration();  
conf.addResource("core-default.xml");  
conf.addResource("core-site.xml");

4.5.3 URL与Path

URI:统一资源标志符(Uniform Resource Identifier)
URL:统一资源定位符(uniform resource location)
URI与URL都是定位资源位置的,就是表示这个资源的位置信息,就像经纬度一样可以表示你在世界的哪个角落。URI是一种宽泛的含义更广的定义,而URL则是URI的一个子集,就是说URL是URI的一部分。

URL位于java.net包中
Path类往往与URL类结合使用,Path类位于org.apache.hadoop.fs包下,命名文件系统中的文件或目录。 路径字符串使用斜杠作为目录分隔符。 如果以斜线开始,路径字符串是绝对的。

方法

说明

Path(String pathString)

通过构造器可以把一个字符串构造成一个路径

4.5.4 FileSystem类

Hadoop是由Java语言编写的,其中Hadoop 2.7系列是JDK1.7编写,我们可以通过Java API调用HDFS的所有交互操作接口。其中最常用的类是FileSystem类,包含了hdfs dfs相关操作的实现。

如上图可以看到FileSystem类的声明,

public abstract class FileSystem
extends Configured
implements Closeable

由此可知:

  • FileSystem类位于org.apache.hadoop.fs包中,是一个抽象类,其次父类是Configured,实现了 Closeable接口。
  • Closeable接口是可以关闭的数据源或目标。需要实现close 方法,可释放对象保存的资源(如打开文件)。
  • 父类Configured有两个方法:
  • void setConf(Configuration conf):设置Configuration
  • Configuration getConf():获取Configuration

除了上面三个方法,FileSystem类常用方法如下表(省略了public)

方法

说明

static FileSystem get(Configuration conf)

静态方法,获取FileSystem实例

static FileSystem get(URI uri, Configuration conf)

静态方法,获取FileSystem实例

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

静态方法,获取FileSystem实例,多个用户参数

FSDataInputStream open(Path f)

在Path位置打开一个文件输入流

void copyFromLocalFile(Path src, Path dst)

将本地文件拷贝到文件系统

void copyToLocalFile(Path src, Path dst)

将文件系统上的src文件复制到本地dst

boolean exists(Path f)

检查文件或目录是否存在

boolean mkdirs(Path f)

新建所有目录(包括父目录), f是完整的目录路径

abstract boolean mkdirs(Path f, FsPermission permission)

在文件系统上创建指定f文件,包括上级目录。

FSOutputStream create(Path f)

创建指定path对象的一个文件,返回一个用于写入数据的输出流

boolean delete(Path f, Boolean recursive)

永久性删除指定的文件或目录,如果f是一个空目录或者文件,那么recursive的值就会被忽略。只有recursive=true时,一个非空目录及其内容才会被删除。

其中,create()方法有多个重载版本,允许我们指定是否强制覆盖已有的文件、文件备份数量、写入文件缓冲区大小、文件块大小以及文件权限。