hadoop java api操作实战:
公共方法:
static final String PATH = "hdfs://icity0:9000/";
private static FileSystem getFileSystem() throws IOException, URISyntaxException {
FileSystem fileSystem = FileSystem.get(new URI(PATH), new Configuration());
return fileSystem;
}
创建目录:
FileSystem fileSystem = getFileSystem();
fileSystem.mkdirs(new Path("/wangmm1"));
将本地文件上传到hdfs中:
fileSystem.copyFromLocalFile(new Path("src/t.txt"), new Path("hdfs://icity0:9000/wangmm1/"));
将hdfs中的文件读取到本地控制台:
FSDataInputStream open = fileSystem.open(new Path("hdfs://icity0:9000/wangmm1/t.txt"));
IOUtils.copyBytes(open, System.out, 1024, true);
FileStatus[] listStatus = fileSystem.listStatus(new Path(PATH));
for (int i = 0; i < listStatus.length; i++) {
FileStatus fileStatus = listStatus[i];
boolean dir = fileStatus.isDir();
if(dir) {
System.out.println("文件夹"+fileStatus.getPath().toUri().getPath());
}else{
System.out.println("文件"+fileStatus.getPath().toUri().getPath());
}
}
打印结果:
文件/hello
文件夹/home
文件夹/wangmm1
删除目录或者文件:
fileSystem.delete(new Path("/wangmm1"), true);
如果wangmm1是目录,且目录下面存在文件,第二个参数设置为false,那么执行此方法会抛异常。
设置为true时,直接删除目录及其下面的所有文件。
如果删除文件:
[hadoop@icity0 ~]$ hadoop fs -lsr /wangmm1
Warning: $HADOOP_HOME is deprecated.
-rw-r--r-- 3 wangmuming supergroup 18 2014-04-15 20:47 /wangmm1/t.txt
则直接删除,
fileSystem.delete(new Path("/wangmm1/t.txt"), true);
第二个参数是true或者false都可以。
关于hadoop的java api操作还有许多方法,这里只讲解了基础的结果操作,具体的可以参考hadoop java api。