Java操作hdfs

Posted 不知名老王

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java操作hdfs相关的知识,希望对你有一定的参考价值。


1、创建文件夹,使用mkdirs创建,也可以使用createFile创建

@Testpublic 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、删除文件或文件夹

@Testpublic 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的主要内容,如果未能解决你的问题,请参考以下文章

Java操作HDFS代码样例

Java代码操作HDFS(在/user/root/下面創建目錄)

HDFS的Java操作方式

Java操作HDFS开发环境搭建以及HDFS的读写流程

[0014] HDFS 常用JAVA 操作实战

利用JAVA API远程进行HDFS的相关操作