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(); } }
分类:
hadoop模块
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· 写一个简单的SQL生成工具