HDFS的常用的JavaAPI操作
2018-12-10 20:01
751 查看
1.获取到hdfs文件系统对象
有四种方式可以获取到
package com.legendlee.hdfs; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.FileStatus; import org.apache.hadoop.fs.FileSystem; import org.apache.hadoop.fs.Path; import org.testng.annotations.Test; import java.io.File; import java.io.IOException; import java.net.URI; import java.net.URISyntaxException; public class HdfsOperatorStudy { @Test public void test(){ System.out.println("Hello World"); } /** * 通过FileSystem获取分布式文件系统的几种方式 */ @Test public void getFileSystem1() throws IOException { Configuration configuration = new Configuration(); //get方法需要Configuration类型的对象作为参数 //如果不做设置,访问的是本地的文件系统 configuration.set("fs.defaultFS","hdfs://192.168.109.100:8020/"); //获得HDFS文件系统的对象 FileSystem fileSystem = FileSystem.get(configuration); System.out.println(fileSystem.toString()); } /** * 获取HDFS的第二种方式,传两个参数 */ @Test public void getHdfs() throws URISyntaxException, IOException { FileSystem fileSystem = FileSystem.get(new URI("hdfs://192.168.109.100:8020/"), new Configuration()); System.out.println(fileSystem.toString() ); } /** * 获取HDFS的第三种方式,通过调用newInstance传入一个参数 */ @Test public void getHdfs3() throws IOException { Configuration configuration = new Configuration(); configuration.set("fs.defaultFS","hdfs://192.168.109.100:8020"); FileSystem fileSystem = FileSystem.newInstance(configuration); System.out.println(fileSystem); } /** * 第四种方式:newInstance传入两个参数 */ @Test public void getHdfs4() throws Exception { FileSystem fileSystem = FileSystem.newInstance(new URI("hdfs://192.168.109.110:8020/"), new Configuration()); System.out.println(fileSystem); }
2.遍历HDFS所有文件的路径
第一种方式:通过listStatus API获取文件路径
/** * 递归遍历HDFS所有文件的路径 */ @Test public void getAllHdhsPath() throws Exception { //获得fileSystem FileSystem fileSystem = FileSystem.get(new URI("hdfs://192.168.109.100:8020/"), new Configuration()); //指定HDFS的路径 Path path = new Path("/"); //获取所有的文件 FileStatus[] fileStatuses = fileSystem.listStatus(path); //如果获取到的是一个文件夹,则继续递归获取到文件 for (FileStatus fileStatus : fileStatuses) { if(fileStatus.isDirectory()){ getDirectoryFile(fileSystem, fileStatus); }else { Path path1 = fileStatus.getPath(); System.out.println(path1.toString()); } } } private void getDirectoryFile(FileSystem fileSystem, FileStatus fileStatus) throws Exception { //获取到fileStatus文件夹的路径 Path path = fileStatus.getPath(); //通过路径继续往里面遍历 FileStatus[] fileStatuses = fileSystem.listStatus(path); for (FileStatus status : fileStatuses) { if(status.isDirectory()){ //如果还是文件夹 则递归调用 getDirectoryFile(fileSystem,status); }else { System.out.println(status.getPath().toString()); } } fileSystem.close(); } }
第二种方式,通过listFiles获取文件
/** * 通过listFiles获取文件路径,遍历HDFS上所有文件 */ @Test public void getHdfsFiles() throws Exception { //第一步:获取FileSystem对象 FileSystem fileSystem = FileSystem.get(new URI("hdfs://192.168.109.100:8020"), new Configuration()); Path path = new Path("/"); //listFilesAPI列出所有的文件,返回的是一个迭代器对象 RemoteIterator<LocatedFileStatus> locatedFileStatusRemoteIterator = fileSystem.listFiles(path,true); //遍历迭代器,获取迭代器里面的元素 while (locatedFileStatusRemoteIterator.hasNext()){ //获得迭代器里面的每一个元素 LocatedFileStatus next = locatedFileStatusRemoteIterator.next(); Path path1 = next.getPath(); System.out.println(path1.toString()); } }
3.从HDFS上下载文件到本地
第一种方式:通过流的方式。
/** * 下载HDFS文件到本地 IOUtils */ @Test public void copyHdfsToLocal() throws Exception { //获取到FileSystem对象 FileSystem fileSystem = FileSystem.get(new URI("hdfs://192.168.109.100:8020"), new Configuration()); //HDFS上文件的路径 Path path = new Path("/user/root/aaa/bbb/ccc/legendlee.txt"); //获取到HDFS的文件资源 //创建流通道下载文件到本地 FSDataInputStream inputStream = fileSystem.open(path); //输出流 //本地路径 FileOutputStream fileOutputStream = new FileOutputStream(new File("D:\\legendlee.txt")); IOUtils.copy(inputStream,fileOutputStream); IOUtils.closeQuietly(inputStream); IOUtils.closeQuietly(fileOutputStream); }
第二种方式:copyToLocalFile
4.在HDFS上创建文件夹
/** * 在HDFS上创建文件夹 */ @Test public void createHdfsDirs() throws Exception { //获取fileSystem对象 FileSystem fileSystem = FileSystem.get(new URI("hdfs://192.168.109.100:8020"), new Configuration()); fileSystem.mkdirs(new Path("/ss/legendlee")); fileSystem.close(); }
相关文章推荐
- 第二篇:Hadoop HDFS常用JAVA api操作程序
- JAVA操作HDFS API(hadoop)
- HDFS常用的文件API操作
- JAVA操作HDFS API(hadoop)
- hadoop系列之五JavaAPI操作HDFS文本系统
- HDFS的JavaAPI操作
- Java 封装 HDFS API 操作
- 4000 hadoop入门(三)之 javaAPI操作Hdfs,进行文件操作
- HDFS上的常用文件操作java code实现
- HDFS的Java API操作本地环境搭建
- JAVA操作HDFS API(hadoop) HDFS API详解
- Java API操作HDFS
- HDFS java操作(一)FileSystem 常用操作
- Java常用API----字符串操作
- HDFS常用的Java Api详解
- springboot上传下载文件(3)--java api 操作HDFS集群+集群配置
- Hadoop Java API 操作 hdfs--1
- hadoop实战之HDFS常用JavaAPI
- hadoop hdfs 常用操作java代码
- java的api操作HDFS实现递归打印目录并实现在Linux下的显示效果