hadoop day3-java实现hdfs
如何用javaApi的方式来操作hdfs
新建maven项目,然后建立一个子工程
在父工程中引入依赖(maven中hadoop hdfs,hadoop common和hadoop client)
<!-- https://mvnrepository.com/artifact/org.apache.hadoop/hadoop-client --> <dependency> <groupId>org.apache.hadoop</groupId> <artifactId>hadoop-client</artifactId> <version>2.7.6</version> <scope>provided</scope> </dependency>
<!-- https://mvnrepository.com/artifact/org.apache.hadoop/hadoop-common --> <dependency> <groupId>org.apache.hadoop</groupId> <artifactId>hadoop-common</artifactId> <version>2.7.6</version> </dependency>
<!-- https://mvnrepository.com/artifact/org.apache.hadoop/hadoop-hdfs --> <dependency> <groupId>org.apache.hadoop</groupId> <artifactId>hadoop-hdfs</artifactId> <version>2.7.6</version> <scope>test</scope> </dependency>
父工程引入后不会产生依赖,需要在子工程中引入
代码
package com.shujia.xiaoyu.hdfs; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.*; import org.apache.hadoop.fs.permission.FsPermission; import java.io.IOException; import java.text.SimpleDateFormat; import java.util.Arrays; import java.util.Date; import java.util.logging.SimpleFormatter; /* 使用java操作HDFS 创建文件夹,上传文件,下载文件,列出目录,查看block的信息 */ public class TestHdfsApi { public static void main(String[] args) throws IOException { Configuration conf = new Configuration(); //客户端发请求主要是对主节点发送请求,配置主节点信息 conf.set("fs.defaultFS","hdfs://master:9000"); //通过hadoop提供的FileSystem抽象类中的get方法,可以根据我们自己提供的配置获取操作hdfs的对象 //抽象类可以写具体方法,接口不可以 FileSystem fs = FileSystem.get(conf); // //在hdfs上创建文件夹 // boolean b=fs.mkdirs(new Path("/shujia/bigdata19")); // System.out.println(b); // //需要把pom文件中的作用范围删了 // // //上传文件的操作(使用绝对路径(带盘符的路径)) // fs.copyFromLocalFile(new Path("D:\\soft\\projects\\bigdata19-project\\bigdata19-hadoop\\data\\students.txt"),new Path("/shujia/bigdata19/students.txt")); // // //下载文件的操作 // fs.copyToLocalFile(new Path("/shujia/bigdata19/students.txt"),new Path("E:/students.txt")); //列出当前文件夹所有文件 //使用到java中的迭代器,集合,增强for循环 RemoteIterator<LocatedFileStatus> listFiles = fs.listFiles(new Path("/shujia/bigdata19/"), true); while(listFiles.hasNext()){ LocatedFileStatus fileStatus = listFiles.next(); BlockLocation[] blockLocations = fileStatus.getBlockLocations(); for (BlockLocation location : blockLocations) { String[] names = location.getNames(); String s = Arrays.toString(names); System.out.println(s); } //获取文件所属用户 String owner = fileStatus.getOwner(); System.out.println(owner); //获取文件名 String name = fileStatus.getPath().getName(); System.out.println(name); //获取文件权限 FsPermission permission = fileStatus.getPermission(); String s = permission.toString(); System.out.println(s); //获取文件最后修改的时间 long time=fileStatus.getModificationTime(); System.out.println(time);//毫秒级别 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); Date date=new Date(time); String s1 = sdf.format(date); System.out.println(s1); System.out.println("==========="); }
//使用文件流的方式进行文件上传和下载
//输入流
BufferedReader br = new BufferedReader(new FileReader("D:\\soft\\projects\\bigdata19-project\\bigdata19-hadoop\\data\\students.txt"));
//输出流
FSDataOutputStream fsDataOutputStream = fs.create(new Path("/shujia/bigdata19/a.txt"));
//使用hadoop提供的工具类进行流与流读和写
//对流复制
IOUtils.copy(br,fsDataOutputStream);
//释放资源
IOUtils.closeQuietly(fsDataOutputStream);
IOUtils.closeQuietly(br);
//释放资源 fs.close(); } }