使用java api 实现操作 hdfs

使用java api操作hdfs

1. eclipse中创建maven项目

1.1 apache-maven-3.3.9环境配置

  • 新建一个目录存放maven

  • 配置maven环境变量

  • 系统变量:MAVAN_HOME=C:\Application\apache-maven-3.3.9 //地址是存放maven的目录

  • 系统变量:PATH=%MAVEN_HOME%\sbin

  • 打开cmd,输入:mvn -version回车

    C:\Users\23011>mvn -version
    Apache Maven 3.3.9 (bb52d8502b132ec0a5a3f4c09453c07478323dc5; 2015-11-11T00:41:47+08:00)
    Maven home: C:\Application\apache-maven-3.3.9\bin\..
    Java version: 1.8.0_251, vendor: Oracle Corporation
    Java home: C:\Program Files\Java\jdk1.8.0_251\jre
    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:\Users\23011\Desktop\1600660706(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("--------------分割线---------");
    		}
    	}
    }
    
    
  • 3
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值