HDFS客户端API

手动导入需要用的jars,也可以使用maven。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
/**
* HDFS的客户端api功能无非就是操作HDFS上的文件或文件夹
*
* @author Administrator
*
*/
public class HdfsClientDemo {
FileSystem hdfsClient;

@Before
public void init() throws Exception {
Configuration conf = new Configuration();
conf.addResource("myconf.xml");
conf.set("dfs.replication", "2");
conf.set("dfs.blocksize", "32m");

// 创建一个HDFS客户端对象
hdfsClient = FileSystem.get(new URI("hdfs://hdp-nn-01:9000/"), conf, "root");

/**
* 上传一个文件
*/
@Test
public void testPutFile() throws Exception {
hdfsClient.copyFromLocalFile(new Path("d:/jdk-8u191-linux-x64.tar.gz"), new Path("/jdk8.gz"));
hdfsClient.close();
}

/**
* 测试取文件
*
* @throws Exception
*/
@Test
public void testGetFile() throws Exception {
hdfsClient.copyToLocalFile(false, new Path("/jdk8.gz"), new Path("d:/"), true);
hdfsClient.close();
}

注意:HDFS客户端从HDFS上读取数据写入本地磁盘时,可以使用Hadoop自己开发的本地库操作,也可以使用java 的原生库来操作本地文件。 参数就是useRawLocalFileSystem,如果为true,则使用java原生库;false则使用Hadoop自己的本地库。如果要使用Hadoop的本地库来操作本地文件,要配置Hadoop在本地的环境。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
	/**
* 文件夹创建
*
* @throws Exception
*/
@Test
public void testMkdir() throws Exception {
// 如果创建文件夹时,指定权限信息,但创建的结果并不会跟指定的信息完全一致,因为想指定的信息还会经过一个参数值的掩码运算
hdfsClient.mkdirs(new Path("/xxx/yyy"), new FsPermission((short) 777));
hdfsClient.close();
}

/**
* 文件夹删除
*
* @throws Exception
*/
@Test
public void testDeldir() throws Exception {

hdfsClient.delete(new Path("/xxx"), true);
hdfsClient.close();
}

/**
* 文件夹重命名
*
* @throws Exception
*/
@Test
public void testRenamedir() throws Exception {

hdfsClient.rename(new Path("/xxx"), new Path("/ooo"));
hdfsClient.close();
}
}