概述
使用java api操作hdfs
1. eclipse中创建maven项目
1.1 apache-maven-3.3.9环境配置
-
新建一个目录存放maven
-
配置maven环境变量
-
系统变量:MAVAN_HOME=C:Applicationapache-maven-3.3.9 //地址是存放maven的目录
-
系统变量:PATH=%MAVEN_HOME%sbin
-
打开cmd,输入:mvn -version回车
C:Users23011>mvn -version Apache Maven 3.3.9 (bb52d8502b132ec0a5a3f4c09453c07478323dc5; 2015-11-11T00:41:47+08:00) Maven home: C:Applicationapache-maven-3.3.9bin.. Java version: 1.8.0_251, vendor: Oracle Corporation Java home: C:Program FilesJavajdk1.8.0_251jre Default locale: zh_CN, platform encoding: GBK OS name: "windows 10", version: "10.0", arch: "amd64", family: "dos"
-
我的maven版本是3.3.9,如果能打印以上信息,说明maven已经在你的电脑上安装完成。
1.2 eclipse配置maven:
- 修改maven默认本地仓库**(repository)**的路径
- 运行maven的时候,maven所需要的任何构件都是直接从本地仓库获取的。如果本地仓库没有,它会首先尝试从远程仓库下载构件至本地仓库,然后再使用本地仓库的构件。
- 点击apache-maven-3.3.9文件夹–>conf–>setting.xml,修改maven存储库的位置
- [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nonfJ9Vt-1600674564854)(C:Users23011Desktop1600660706(1)].png)
- 点击windows–>perferences–>maven–>user settings,点击Global Settings–>Browse,选择我们刚才修改的setting.xml文件,点击User Settings–>Browse,选择我们刚才修改的setting.xml文件,点击Update Settings–>Apply–>OK.
1.3 新建maven project:
-
点击***File***–>New–>Other–>Maven Project–>Next
引入依赖***pom.xml***文件内容:
-
<groupId>cn.dh</groupId> <artifactId>hadoopDemo</artifactId> <version>0.0.1-SNAPSHOT</version> <dependencies> <dependency> <groupId>org.apache.hadoop</groupId> <artifactId>hadoop-common</artifactId> <version>2.7.4</version> </dependency> <dependency> <groupId>org.apache.hadoop</groupId> <artifactId>hadoop-hdfs</artifactId> <version>2.7.4</version> </dependency> <dependency> <groupId>org.apache.hadoop</groupId> <artifactId>hadoop-client</artifactId> <version>2.7.4</version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>RELEASE</version> </dependency> </dependencies>
-
1.4 新建java class实现使用java api操作hdfs
-
package cn.dh.hdfs.demo; import java.io.IOException; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.FileSystem; import org.apache.hadoop.fs.Path; import org.junit.Before; import org.junit.Test; public class HDFS_CRUD { FileSystem fs = null; @Before // 此注解可以保证init方法在程序中最先执行 public void init() throws Exception{ // 构造一个配置参数对象,设置一个参数:要访问的hdfs的uri Configuration conf = new Configuration(); // 这里指定使用的是hdfs conf.set("fs.defaultFS", "hdfs://hadoop01:9000");// 此处使用主机名需要配置windows的host文件 // 通过如下的方式进行客户端身份的设置 System.setProperty("HADOOP_USER_NAME", "root"); // 通过FileSystem的静态方法获取文件系统客户端对象 fs = FileSystem.get(conf); } // 上传文件到hdfs @Test public void testAddFileToHdfs() throws IOException { // 要上传的文件所在的路径 Path src = new Path("D:\test.txt"); // 要上传到hdfs的目标路径 Path dst = new Path("/testFile"); // 一定注意此处的testFile就是上传到hdfs的文件的名字而不是文件夹 // 上传 fs.copyFromLocalFile(src, dst); //关闭资源 fs.close(); } // 从hdfs 中复制文件到本地文件系统 @Test public void testDownloadFileToLocal() throws IOException { // 下载文件 Path src = new Path("/testFile"); Path dst = new Path("D:/"); fs.copyToLocalFile(false,src, dst,true); // 关闭资源 fs.close(); } // 创建,删除,重命名文件 @Test public void testMkdirAndDeleteAndRename() throws Exception { // 创建目录 fs.mkdirs(new Path("/a/b/c")); fs.mkdirs(new Path("/a2/b2/c2")); // 重命名文件或文件夹 // fs.rename(new Path("/a"), new Path("/a3")); // 删除文件夹,如果是非空文件夹,参数2必须给值为true // fs.delete(new Path("/a2"),true); } // 查看目录中的文件信息 @Test // 查看目录中的文件信息 @Test public void testListFiles() throws FileNotFoundException, IllegalArgumentException, IOException { // 获取迭代器对象 RemoteIterator<LocatedFileStatus> listFiles = fs.listFiles(new Path("/"), true); while(listFiles.hasNext()) { LocatedFileStatus fileStatus = listFiles.next(); // 打印当前文件名称 System.out.println(fileStatus.getPath().getName()); // 打印当前文件块大小 System.out.println(fileStatus.getBlockSize()); // 打印当前文件权限 System.out.println(fileStatus.getPermission()); // 打印当前文件内容长度 System.out.println(fileStatus.getLen()); // 获取该文件块信息(包括长度,数据块,datanode的信息) BlockLocation[] blockLocations = fileStatus.getBlockLocations(); for (BlockLocation blockLocation : blockLocations) { System.out.println("block-length:"+blockLocation.getLength()+" -- "+"block-offset:"+blockLocation.getOffset()); String[] hosts = blockLocation.getHosts(); for (String host : hosts) { System.out.println(host); } } System.out.println("--------------分割线---------"); } } }
最后
以上就是贪玩耳机为你收集整理的使用java api 实现操作 hdfs使用java api操作hdfs的全部内容,希望文章能够帮你解决使用java api 实现操作 hdfs使用java api操作hdfs所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复