通过HDFS API 进行HDFS操作
HDFS Java API 的一般用法如下
(1)实例化Configuration类
Configuration类封装了客户端或服务器的配置,Configuration实例会自动加载HDFS的配置文件core-site.xml,从中获取Hadoop集群的配置信息。
Configuration conf = new Configuration();
(2)实例化FileSystem类
FileSystem类是客户端访问文件系统的入口,是一个抽象的文件系统类。
DistributedFileSystem类是FileSystem类的一个具体实现。
FileSystem fs = FileSystem.get(uri,conf,"username");
//uri是URI类的实例,username表示用户名
(3)设置目标对象的路径
HDFS Java API 提供了Path类封装HDFS文件路径。Path类位于org.apache.hadoop.fs 包中。
Path path = new Path("/test");
(4)执行文件或目录操作
1、上传文件
上传方式:
①FileSystem类自带的copyFromLocalFile接口
/**
* 采用FileSystem类自带的copyFromLocalFile接口上传文件。
* 将本地D:\test.txt文件上传之HDFS的 /mydir 下
*/
package org.example;
import java.io.FileInputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.URI;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.hdfs.DFSClient;
import org.apache.hadoop.io.IOUtils;
import org.apache.log4j.BasicConfigurator;
//HDFS Upload
public class Upload1 {
public static void main(String[] args) throws Exception{
BasicConfigurator.configure();
Configuration conf = new Configuration();
URI uri = new URI("hdfs://192.168.245.128:8020");
FileSystem fs = FileSystem.get(uri,conf,"bigdata");
//Local file
Path src = new Path("d:\\test.txt");
//HDFS file
Path dst = new Path("/mydir/test.txt");
fs.copyFromLocalFile(src,dst);
fs.close();
System.out.println("Upload Successfully");
}
}
②通过流拷贝的方式
import java.io.FileInputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.URI;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.hdfs.DFSClient;
import org.apache.hadoop.io.IOUtils;
import org.apache