HDFS的java客户端编写
下载
以下载为例,HDFS的文件下载的java客户端编写,可以分为以下几个步骤
- 引入依赖包,hdfs与commons
- 通过FileSystem抽象类的静态方法get,获取到相应的fs对象(默认是本地文件系统,除非在conf中配置或者将hadoop的配置文件copy到classpath中)
- 通过fs获取hdfs实例的一个输入流,先确定好Path类型的路径,在调用open方法,返回FSDataInputStream类型的实例
- 获取本地输出流,java io
- 通过IOUtils的copy方法,将输入流copy到输出流中
代码如下:1
2
3
4
5
6
7
8
9
10
11Configuration 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下的用户去访问,可以通过以下两种方式解决:
- 设置VM参数-DHADOOP_USER_NAME=hadoop
- 在获取fs实例的时候,设置User(推荐)
使用高度封装的API
由于Hadoop封装的已经很好了,所以其实下载、上传、创建目录、列出目录、重命名等,只需要在获取到fs对象后,调用相应的方法即可。
例如下载,可以直接调用fs.copyToLocalFile()方法。