这是我参与11月更文挑战的第9天,活动详情查看:2021最后一次更文挑战」
使用HDFS只需要引入特定的依赖就行了
-
依赖
<!--hdfs 连接端依赖--> <dependency> <groupId>org.apache.hadoop</groupId> <artifactId>hadoop-client</artifactId> <version>2.6.5</version> </dependency> -
代码(初始化配置 链接)
1.直接将hdfs配置文件夹中的配置copy到工程目录的**resouces**文件夹下 2.直接使用hadoop的Configration set方法 配置参数set(参数名,参数值) //配置类 public Configuration conf = null; //文件系统 public FileSystem fs = null; @Before public void conn() throws Exception { //默认为:true 会加载resouces 下的关于hdfs 的配置文件 例如:hdfs-site.xml conf = new Configuration(true); URI uri = FileSystem.getDefaultUri(conf); //实例化文件系统链接 fs = FileSystem.get(uri, conf); } -
使用API(application programming interface)
/** *创建文件夹 */ @Test public void mkdir() throws Exception { //配置文件夹创建的路径 Path dir = new Path("/jacqueshuang"); //判断文件夹是否存在 if (fs.exists(dir)) { //删除文件夹 **→ 第二参数配置 是否循环递归文件夹下的所有文件 也执行删除** fs.delete(dir, true); } //创建文件夹 同linux shell mkdir fs.mkdirs(dir); } /** * 上传文件 */ @Test public void upload() throws Exception { //上传的文件资源 Resource resource = new Resource("data/data.txt"); //资源文件转为流 InputStream input = ResourceUtils .getResourceAsStream(this, Objects.requireNonNull(resource)); //输出路径配置 Path outfile = new Path("/jacqueshuang/data.txt"); //路径转化为流 FSDataOutputStream output = fs .create(outfile, true, 1048576, (short) 2, 1048576L); //使用io工具进行流的copy IOUtils.copyBytes(input, output, conf, true); } /** *查询块信息 */ @Test public void blocks() throws Exception { Path file = new Path("/jacqueshuang/data.txt"); FileStatus fss = fs.getFileStatus(file); //遍历块信息 BlockLocation[] blks = fs.getFileBlockLocations(fss, 0, fss.getLen()); for (BlockLocation b : blks) { System.out.println(b); //0,1048576,hadoop2,hadoop3 //1048576,840319,hadoop4,hadoop3 //打印出了块信息和块分布 } //计算向数据移动~! //其实用户和程序读取的是文件这个级别~!并不知道有块的概念~! FSDataInputStream in = fs.open(file); //面向文件打开的输入流 无论怎么读都是从文件开始读起~! //先偏移1M位置 in.seek(1048576); /*计算向数据移动后,期望的是分治,只读取自己关心(通过seek实现), 同时,具备距离的概念(优先和本地的DN获取数据--框架的默认机制)*/ System.out.print((char) in.readByte()); System.out.print((char) in.readByte()); System.out.print((char) in.readByte()); System.out.print((char) in.readByte()); System.out.print((char) in.readByte()); System.out.print((char) in.readByte()); System.out.print((char) in.readByte()); System.out.print((char) in.readByte()); System.out.print((char) in.readByte()); System.out.print((char) in.readByte()); System.out.print((char) in.readByte()); System.out.print((char) in.readByte()); System.out.println(); }