• 售前

  • 售后

热门帖子
入门百科

【Hadoop】——JavaAPI操作

[复制链接]
叶小琛小m 显示全部楼层 发表于 2022-1-15 08:58:15 |阅读模式 打印 上一主题 下一主题
一、windows客户端准备

双击安装hadoop依赖

放在非中文路径下,双击winutils.exe进行安装


如果安装错误,先安装微软运行库

新建Java Maven 工程

maven坐标

  1. <dependencies>
  2.     <dependency>
  3.         <groupId>org.apache.hadoop</groupId>
  4.         <artifactId>hadoop-client</artifactId>
  5.         <version>3.1.3</version>
  6.     </dependency>
  7.     <dependency>
  8.         <groupId>junit</groupId>
  9.         <artifactId>junit</artifactId>
  10.         <version>4.12</version>
  11.     </dependency>
  12.     <dependency>
  13.         <groupId>org.slf4j</groupId>
  14.         <artifactId>slf4j-log4j12</artifactId>
  15.         <version>1.7.30</version>
  16.     </dependency>
  17. </dependencies>
复制代码
在sre/main/resources下新建log4j.properties配置文件

  1. log4j.rootLogger=INFO, stdout  
  2. log4j.appender.stdout=org.apache.log4j.ConsoleAppender  
  3. log4j.appender.stdout.layout=org.apache.log4j.PatternLayout  
  4. log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - %m%n  
  5. log4j.appender.logfile=org.apache.log4j.FileAppender  
  6. log4j.appender.logfile.File=target/spring.log  
  7. log4j.appender.logfile.layout=org.apache.log4j.PatternLayout  
  8. log4j.appender.logfile.layout.ConversionPattern=%d %p [%c] - %m%n
复制代码
新建类 HdfsClient

二、API操作

创建文件夹

  1. package com.demo.hdfs;
  2. import org.apache.hadoop.conf.Configuration;
  3. import org.apache.hadoop.fs.FileSystem;
  4. import org.apache.hadoop.fs.Path;
  5. import org.junit.After;
  6. import org.junit.Before;
  7. import org.junit.Test;
  8. import java.io.IOException;
  9. import java.net.URI;
  10. import java.net.URISyntaxException;
  11. /**
  12. * 客户端代码操作
  13. * 1. 获取一个客户端对象
  14. * 2. 执行相关操作
  15. * 3. 关闭资源
  16. */
  17. public class HdfsClient {
  18.     private FileSystem fs;
  19.     @Before
  20.     public void init() throws URISyntaxException, InterruptedException, IOException {
  21.         //连接集群nn地址
  22.         URI uri = new URI("hdfs://hadoop102:8020");
  23.         //创建一个配置文件
  24.         Configuration configuration = new Configuration();
  25.         //用户
  26.         String user = "root";
  27.         //获取客户端对象
  28.         fs = FileSystem.get(uri, configuration, user);
  29.     }
  30.     @After
  31.     public void close() throws IOException {
  32.         //关闭资源
  33.         fs.close();
  34.     }
  35.     @Test
  36.     public void testMkdir() throws IOException {
  37.         //创建一个文件夹
  38.         fs.mkdirs(new Path("/apipath1"));
  39.     }
  40. }
复制代码
上传

  1. //上传
  2. @Test
  3. public void testPut() throws IOException {
  4.     //参数1 :是否删除元数据
  5.     //参数2: 是否允许覆盖
  6.     //参数3: 目的路径
  7.     fs.copyFromLocalFile(false, true, new Path("E:\\study\\BigData\\Hadoop\\脚本\\myhadoop.sh"), new Path("hdfs://hadoop102/code"));
  8. }
复制代码
下载

  1. //下载
  2. @Test
  3. public void testGet() throws IOException {
  4.     //参数1 :是否删除原数据
  5.     //参数2: 目的路径
  6.     //参数3: 原文件路径
  7.     //参数4:是否进行本地校验 ,false 开启,ture 关闭
  8.     fs.copyToLocalFile(false, new Path("hdfs://hadoop102/code/myhadoop.sh"), new Path("E:\"), true);
  9. }
复制代码
.xxx.crc文件是一种校验方法
删除

  1. //删除
  2. @Test
  3. public void testRm() throws IOException {
  4.     //参数1 :目的路径
  5.     //参数2: 是否递归删除
  6.         
  7.     //1. 删除文件
  8.     //fs.delete(new Path("hdfs://hadoop102/code/myhadoop.sh"), true);
  9.     //2. 删除空目录
  10.     //fs.delete( new Path("hdfs://hadoop102/code/code1"), true);
  11.     //3. 删除非空目录,如果不是递归删除,则报错
  12.     fs.delete(new Path("hdfs://hadoop102/code/code2"), true);
  13. }
复制代码
文件更名和移动

  1. //文件更名和移动
  2. @Test
  3. public void testMv() throws IOException {
  4.     //参数1 :原文件路径
  5.     //参数2: 目的文件路径
  6.     //1.文件名称更改
  7.     //fs.rename(new Path("hdfs://hadoop102/code/myhadoop.sh"), new Path("hdfs://hadoop102/code/myhadoop_rename.sh"));
  8.     //2.文件移动并修改
  9.     //fs.rename(new Path("hdfs://hadoop102/code/myhadoop_rename.sh"), new Path("hdfs://hadoop102/myhadoop_remove_and_rename.sh"));
  10.     //3. 目录更名
  11.     fs.rename(new Path("hdfs://hadoop102/code"), new Path("hdfs://hadoop102/code_rename"));
  12.     }
复制代码
文件详细信息查看

查看文件名称、权限、长度、块信息
  1. //文件详细信息查看
  2. @Test
  3. public void testFileDetail() throws IOException {
  4.     //参数1 :路径
  5.     //参数2: 目的文件路径
  6.     //获取所有文件信息
  7.     RemoteIterator<LocatedFileStatus> listFiles = fs.listFiles(new Path("hdfs://hadoop102/"), true);
  8.     //遍历文件信息
  9.     while (listFiles.hasNext()) {
  10.         LocatedFileStatus fileStatus = listFiles.next();
  11.         System.out.println("-----------------------------------------");
  12.         System.out.println(fileStatus.toString());
  13.         System.out.println("-----------------------------------------");
  14.     }
  15. }
复制代码
toString方法
  1. public String toString() {
  2.         StringBuilder sb = new StringBuilder();
  3.         sb.append(this.getClass().getSimpleName());
  4.         sb.append("{");
  5.         sb.append("path=" + this.path);
  6.         sb.append("; isDirectory=" + this.isdir);
  7.         if (!this.isDirectory()) {
  8.             sb.append("; length=" + this.length);
  9.             sb.append("; replication=" + this.block_replication);
  10.             sb.append("; blocksize=" + this.blocksize);
  11.         }
  12.         sb.append("; modification_time=" + this.modification_time);
  13.         sb.append("; access_time=" + this.access_time);
  14.         sb.append("; owner=" + this.owner);
  15.         sb.append("; group=" + this.group);
  16.         sb.append("; permission=" + this.permission);
  17.         sb.append("; isSymlink=" + this.isSymlink());
  18.         if (this.isSymlink()) {
  19.             try {
  20.                 sb.append("; symlink=" + this.getSymlink());
  21.             } catch (IOException var3) {
  22.                 throw new RuntimeException("Unexpected exception", var3);
  23.             }
  24.         }
  25.         sb.append("; hasAcl=" + this.hasAcl());
  26.         sb.append("; isEncrypted=" + this.isEncrypted());
  27.         sb.append("; isErasureCoded=" + this.isErasureCoded());
  28.         sb.append("}");
  29.         return sb.toString();
  30. }
复制代码
文件和文件夹判断

  1. //判断是文件夹还是文件
  2. @Test
  3. public void testFile() throws IOException {
  4.         //获取所有文件信息
  5.         FileStatus[] fileStatuses = fs.listStatus(new Path("hdfs://hadoop102/"));
  6.         //遍历文件信息
  7.         for (FileStatus fileStatus : fileStatuses) {
  8.             if (fileStatus.isFile()) {
  9.                 System.out.println("this is file--" + fileStatus.toString());
  10.                 System.out.println("-----------------------------------------");
  11.             } else {
  12.                 System.out.println("this is path--" + fileStatus.toString());
  13.                 System.out.println("-----------------------------------------");
  14.             }
  15.         }
  16. }
复制代码
来源:https://blog.caogenba.net/qq_42000631/article/details/122483873
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x

帖子地址: 

回复

使用道具 举报

分享
推广
火星云矿 | 预约S19Pro,享500抵1000!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

草根技术分享(草根吧)是全球知名中文IT技术交流平台,创建于2021年,包含原创博客、精品问答、职业培训、技术社区、资源下载等产品服务,提供原创、优质、完整内容的专业IT技术开发社区。
  • 官方手机版

  • 微信公众号

  • 商务合作