当前位置: 首页 > 后端技术 > Java

mac系统hdfsjavaapi的简单使用

时间:2023-04-01 20:55:26 Java

1.背景在上一节中,我们简单学习了如何在命令行上操作hdfsshellapi。这里我们使用java程序来操作它。2、环境准备需要在本地环境变量中配置HADOOP_HOME或者在程序启动时通过命令行指定hadoop.home.dir的值,该值为HADOOP的家目录地址。可以通过org.apache.hadoop.util.Shell#checkHadoopHome方法验证。最好在本地系统重新编译我们的HADOOP,否则运行一些javaapi可能会出问题。3、环境搭建3.1引入jar包org.junitjunit-bom5.7.1pom导入org.apache.hadoophadoop-client3.3.4org.junit.jupiterjunit-jupiter测试org.apache.logging.log4jlog4j-api</artifactId>2.14.1org.apache.logging.log4jlog4j-core2.14.13.2引入log4j.properties配置文件log4j.appender.console=org.apache.log4j.ConsoleAppenderlog4j.appender.console.Target=System.outlog4j.appender.console。layout=org.apache.log4j.PatternLayoutlog4j.appender.console.layout.ConversionPattern=[%-5p]%d{HH:mm:ss,SSS}[%t]:%m%nlog4j.rootLogger=调试,控制台导入这个配置是为了在hadoop报错的时候更好的排除故障3.3InitializeHadoopApi@TestInstance(TestInstance.Lifecycle.PER_CLASS)classHdfsApiTest{privateFileSystemfileSystem;privatestaticfinalLoggerlog=LoggerFactory.getLogger(HdfsApiTest.class);@BeforeAllpublicvoidsetUp()throwsIOException,InterruptedException{//1.设置HADOOP_HOME为环境变量配置configuration=newConfiguration();//2.这里的地址是NameNode的地址URIuri=URI.create("hdfs://192.168.121.140:8020");//3.设置用户Stringuser="hadoopdeploy";//如果这里不设置第三个参数,是指客户端的身份,默认获取当前用户,但是当前用户不一定有权限,需要指定有权限的用户fileSystem=FileSystem.get(uri,配置,用户);}@AfterAllpublicvoidtearDown()throwsIOException{if(null!=fileSystem){fileSystem.close();}}}这里需要注意的是我们需要设置客户端操作的用户,默认是获取当前登录用户,否则可能会出现以下错误解决方法:1.修改目录的访问权限2、修改客户端的用户,例如改为hadoopdeploy4,javaapi操作4.1创建目录@Test@DisplayName("创建hdfs目录")publicvoidtestMkdir()throwsIOException{Pathpath=newPath("/大数据/hadoop/hdfs");if(fileSystem.exists(path)){log.info("目录/bigdata/hadoop/hdfs已经存在,不会创建");返回;}布尔成功=fileSystem.mkdirs(path);日志。info("Createdirectory/bigdata/hadoop/hdfssuccess:[{}?]",success);}4.2上传文件@Test@DisplayName("Uploadfile")voiduploadFile()throwsIOException{/***delSrc:文件上传后,是否删除源文件true:删除false:不删除*overwrite:如果目标文件存在,是否重写true:rewritefalse:不重写*第三个参数:要上传的文件*第四个参数:目标文件*/fileSystem.copyFromLocalFile(false,true,newPath("/Users/huan/code/IdeaProjects/me/spring-cloud-parent/hadoop/hdfs-api/src/test/java/com/huan/hadoop/HdfsApiTest.java"),newPath("/bigdata/hadoop/hdfs"));}4.3列出目录下的文件@Test@DisplayName("列出目录那里有什么文件?”)voidtestListFile()throwsIOException{RemoteIteratoriterator=fileSystem.listFiles(newPath("/bigdata"),true);while(iterator.hasNext()){LocatedFileStatuslocatedFileStatus=iterator.next();Pathpath=locatedFileStatus.getPath();if(locatedFileStatus.isFile()){log.info("获取文件:{}",path.getName());}}}4.4下载文件@Test@DisplayName("下载文件")voidtestDownloadFile()throwsIOException{fileSystem.copyToLocalFile(false,newPath("/bigdata/hadoop/hdfs/HdfsApiTest.java"),newPath("/Users/huan/HdfsApiTest.java"),true);}4.5删除文件@Test@DisplayName("删除文件")publicvoidtestDeleteFile()throwsIOException{fileSystem.delete(newPath("/bigdata/hadoop/hdfs/HdfsApiTest.java"),false);}4.6检查文件是否存在@Test@DisplayName("检查文件是否存在")publicvoidtestFileExists()throwsIOException{Pathpath=newPath("/bigdata/hadoop/hdfs/HdfsApiTest.java");布尔值存在=fileSystem.exists(路径);log.info("/bigdata/hadoop/hdfs/HdfsApiTest.java存在:[{}]",存在);}5、完整代码https://gitee.com/huan1993/spring-cloud-parent/blob/master/hadoop/hdfs-api/src/test/java/com/huan/hadoop/HdfsApiTest.java