我是靠谱客的博主 贪玩耳机,最近开发中收集的这篇文章主要介绍使用java api 实现操作 hdfs使用java api操作hdfs,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

使用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所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(43)

评论列表共有 0 条评论

立即
投稿
返回
顶部