Java操作hdfs
Posted 不知名老王
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java操作hdfs相关的知识,希望对你有一定的参考价值。
1、创建文件夹,使用mkdirs创建,也可以使用createFile创建
@Test
public void testMkdir() throws Exception {
FileSystem fs = null;
try{
Configuration conf = new Configuration();
conf.set("fs.defaultFS", "hdfs://hadoop01:9000/");
conf.set("dfs.client.use.datanode.hostname", "true");
System.setProperty("HADOOP_USER_NAME", "root");
fs = FileSystem.get(conf);
fs.mkdirs(new Path("/hdfs/test")); //不带权限
//fs.createFile(new Path("/hdfs/test"));
//fs.mkdirs(new Path("/hdfs/test"),new FsPermission(FsAction.ALL,FsAction.ALL,FsAction.ALL)); //带权限
}finally {
fs.close();
}
}
2、删除文件或文件夹
@Test
public void testDel() throws Exception {
FileSystem fs = null;
try{
Configuration conf = new Configuration();
conf.set("fs.defaultFS", "hdfs://hadoop01:9000/");
conf.set("dfs.client.use.datanode.hostname", "true");
System.setProperty("HADOOP_USER_NAME", "root");
fs = FileSystem.get(conf);
fs.delete(new Path("/hdfs/test"),true);
}finally {
fs.close();
}
}
3、使用copyFromLocalFile上传文件
//fs为FileSystem,配置同上
fs.copyFromLocalFile(
new Path("D:/bigdata/input/a.txt"),
new Path("/hdfs/a.txt")
);
4、使用IOUtils上传文件
FileInputStream fis = new FileInputStream("D:/bigdata/input/b.txt");//获取输入流
Path path = new Path("/hdfs/b.txt");
FSDataOutputStream fos = fs.create(path);//获取输出流
IOUtils.copy(fis, fos);
5、使用copyToLocalFile下载文件
Path in = new Path("/hdfs/a.txt");
Path out = new Path("d:/bigdata/hadoop_hdfs/a.txt");
fs.copyToLocalFile(in,out);
6、使用IOUtils下载文件
Path path = new Path("/hdfs/b.txt");
FSDataInputStream is = fs.open(path);
FileOutputStream os = new FileOutputStream("d:/bigdata/hadoop_hdfs/b.txt");
IOUtils.copy(is,os);
7、获取hdfs上的文件信息
RemoteIterator<LocatedFileStatus> files
= fs.listFiles(new Path("/"), true);
while (files.hasNext()){
LocatedFileStatus file = files.next();
file.getPath().getName();//获取文件名
file.getPermission();//获取权限
file.getOwner();//获取用户
file.getGroup();//获取组别
file.getLen();//获取大小
BlockLocation[] blocks = file.getBlockLocations();//获取存储块的信息
for (BlockLocation block : blocks) {
block.getHosts();//该块所在的主机
block.getLength();//该块存储的大小
}
}
8、其他api的使用
fs.create(new Path("/aaa.txt"));//创建文件
fs.rename(path1,path2);//重命名
fs.exists(path);//判断文件是否存在
fs.setReplication(path,short);//设置分区数
fs.setPermission(new Path(""),new FsPermission(""));//设置权限
.......
以上是关于Java操作hdfs的主要内容,如果未能解决你的问题,请参考以下文章