HDFS Java API
一、 简介
想要使用 HDFS API,需要导入依赖 hadoop-client
。如果是 CDH 版本的 Hadoop,还需要额外指明其仓库地址:
1 | <?xml version="1.0" encoding="UTF-8"?> |
二、API的使用
2.1 FileSystem
FileSystem 是所有 HDFS 操作的主入口。由于之后的每个单元测试都需要用到它,这里使用 @Before
注解进行标注。
1 | private static final String HDFS_PATH = "hdfs://192.168.0.106:8020"; |
2.2 创建目录
支持递归创建目录:
1 |
|
2.3 创建指定权限的目录
FsPermission(FsAction u, FsAction g, FsAction o)
的三个参数分别对应:创建者权限,同组其他用户权限,其他用户权限,权限值定义在 FsAction
枚举类中。
1 |
|
2.4 创建文件,并写入内容
1 |
|
2.5 判断文件是否存在
1 |
|
2.6 查看文件内容
查看小文本文件的内容,直接转换成字符串后输出:
1 |
|
inputStreamToString
是一个自定义方法,代码如下:
1 | /** |
2.7 文件重命名
1 |
|
2.8 删除目录或文件
1 | public void delete() throws Exception { |
2.9 上传文件到HDFS
1 |
|
2.10 上传大文件并显示上传进度
1 |
|
2.11 从HDFS上下载文件
1 |
|
2.12 查看指定目录下所有文件的信息
1 | public void listFiles() throws Exception { |
FileStatus
中包含了文件的基本信息,比如文件路径,是否是文件夹,修改时间,访问时间,所有者,所属组,文件权限,是否是符号链接等,输出内容示例如下:
1 | FileStatus{ |
2.13 递归查看指定目录下所有文件的信息
1 |
|
和上面输出类似,只是多了文本大小,副本系数,块大小信息。
1 | LocatedFileStatus{ |
2.14 查看文件的块信息
1 |
|
块输出信息有三个值,分别是文件的起始偏移量 (offset),文件大小 (length),块所在的主机名 (hosts)。
1 | 0,57028557,hadoop001 |
这里我上传的文件只有 57M(小于 128M),且程序中设置了副本系数为 1,所有只有一个块信息。
以上所有测试用例下载地址:HDFS Java API