Hadoop3-HDFS的java客户端编写

时间:2021-06-28 08:31:10


以下载为例,HDFS的java客户端编写主要分为下面4个步骤

1. 通过抽象类FileSystem的get静态方法获取文件系统hdfs的实例

2. 使用fs的open方法,打开hdfs文件系统的输入流

3. 打开本地输出流

4. 使用IOUtils的copy方法将hdfs的输入流拷贝到本地文件系统的输出流


在开始写之前,需要先引入HDFS的依赖包,包括hdfs和commons,可以通过maven去引入。

需要注意的是,若不做配置,默认拿到的是本地文件系统的实例,可以通过如下两种方法配置

1. conf.set(name,value)

2. 将hadoop的配置文件拷贝到项目的classpath下

具体代码如下;

Confguration conf = new Confguration();
FileSystem fs = FileSystem.get(conf);

Path src = new Path("hdfs://hostname:9000/filename")
FSDataInputStream is = fs.open(src);

FileOutputStream os = new FileOutputStream("/path-to-save");

IOUtils.copy(is,os);

当然,也可以不用这样写,因为HDFS的API已经封装的很好了,可以直接调用:

 fs.copyToLocalFile(src, dst);


如果是在windows下编写的话,可能会遇到权限问题,原因是当前用户无权限操作,可以这样解决:

1. 添加虚拟机运行参数 -DHADOOP_USER_NAME=hadoop

2. 在获取fs实例时,选择重载的get(URI,conf,User)方法