第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
如上图所示,Java API页面分为了三部分,左上角是包(Packages)窗口,左下角是所有类(All Classes是)窗口,右侧是详情窗口。
这里推荐使用“先左下角索引,然后查看右侧详情”的方法,好似查英文词典一样。而左上角的包窗口,使用较少。
左下角窗口列出了所有的Java接口和类,可以直接拖动滑动条查找需要的接口或类。如图所示,比如查找到FileSystem,单击该类,右侧窗口将显示该类的详细信息,包括属性方法等。
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()方法有多个重载版本,允许我们指定是否强制覆盖已有的文件、文件备份数量、写入文件缓冲区大小、文件块大小以及文件权限。