BigData3-HDFS的基本操作â€â

HDFS的java客户端编写

下载

以下载为例,HDFS的文件下载的java客户端编写,可以分为以下几个步骤

  1. 引入依赖包,hdfs与commons
  2. 通过FileSystem抽象类的静态方法get,获取到相应的fs对象(默认是本地文件系统,除非在conf中配置或者将hadoop的配置文件copy到classpath中)
  3. 通过fs获取hdfs实例的一个输入流,先确定好Path类型的路径,在调用open方法,返回FSDataInputStream类型的实例
  4. 获取本地输出流,java io
  5. 通过IOUtils的copy方法,将输入流copy到输出流中

代码如下:

1
2
3
4
5
6
7
8
9
10
11
Configuration conf = new Configuration();

FileSystem fs = FileSystem.get(conf)

Path src = new Path("hdfs://hostname:9000/filename")

FSDataInputStream is = fs.open(src);

FileOutputStream os = new FileOutputStream("c:/filename");

IOUtils.copy(is,os);

上传

上传的步骤大体同上,但是有一点需要注意的是,如果实在Windows下编程,可能会出现权限问题,原因是使用win下的用户去访问,可以通过以下两种方式解决:

  1. 设置VM参数-DHADOOP_USER_NAME=hadoop
  2. 在获取fs实例的时候,设置User(推荐)

使用高度封装的API

由于Hadoop封装的已经很好了,所以其实下载、上传、创建目录、列出目录、重命名等,只需要在获取到fs对象后,调用相应的方法即可。
例如下载,可以直接调用fs.copyToLocalFile()方法。

HDFSUtil的实现