Maven构建java工程操作hdfs实例

举报
wuweibang 发表于 2019/07/27 18:33:35 2019/07/27
【摘要】 腾科教育以为理论+实操为主的教学,带你进入大数据开发基础。每一步都带着你,让你一步一步实现自已的大数据开发梦想。构建maven工程 导入maven类包 <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.11</vers...


腾科教育以为理论+实操为主的教学,带你进入大数据开发基础。每一步都带着你,让你一步一步实现自已的大数据开发梦想。

构建maven工程

QQ截图20190727183205.png 

导入maven类包

 <dependencies>

    <dependency>

      <groupId>junit</groupId>

      <artifactId>junit</artifactId>

      <version>4.11</version>

      <scope>test</scope>

    </dependency>

    <dependency>

      <groupId>org.apache.hadoop</groupId>

      <artifactId>hadoop-client</artifactId>

      <version>2.8.1</version>

    </dependency>

  </dependencies>

编写Junit单元测试类

package net.togogo.hdfsproject;

 

import org.apache.hadoop.conf.Configuration;

import org.apache.hadoop.fs.*;

import org.junit.Before;

import org.junit.Test;

 

import java.io.FileNotFoundException;

import java.io.IOException;

import java.net.URI;

 

public class HdfsClientTest {

    FileSystem fs = null;

 

    @Before

    public void init() throws Exception {

 

        // 构造一个配置参数对象,设置一个参数:我们要访问的hdfsURI

        // 从而FileSystem.get()方法就知道应该是去构造一个访问hdfs文件系统的客户端,以及hdfs的访问地址

        // new Configuration();的时候,它就会去加载jar包中的hdfs-default.xml

        // 然后再加载classpath下的hdfs-site.xml

        Configuration conf = new Configuration();

        conf.set("fs.defaultFS", "hdfs://192.168.75.129:9000");

        /**

         * 参数优先级: 1、客户端代码中设置的值 2classpath下的用户自定义配置文件 3、然后是服务器的默认配置

         */

        conf.set("dfs.replication", "3");

 

        // 获取一个hdfs的访问客户端,根据参数,这个实例应该是DistributedFileSystem的实例

        // fs = FileSystem.get(conf);

 

        // 如果这样去获取,那conf里面就可以不要配"fs.defaultFS"参数,而且,这个客户端的身份标识已经是hadoop用户

        fs = FileSystem.get(new URI("hdfs://192.168.75.129:9000"), conf, "hadoop");

 

    }

 

    @Test

    public void testAddFileToHdfs(){

        // 要上传的文件所在的本地路径

        Path src = new Path("D:\\stone\\HCNA-AI\\images\\idcard.jpg");

        // 要上传到hdfs的目标路径

        Path dst = new Path("/togogo/idcard.jpg");

        try {

            fs.copyFromLocalFile(src,dst);

            System.out.println("文件上传成功...");

        } catch (IOException e) {

            e.printStackTrace();

        }

    }

 

    @Test

    public void testDelFileFromHdfs(){

        // 要上传到hdfs的目标路径

        Path dst = new Path("/togogo/work");

        try {

           fs.delete(dst,true);

            System.out.println("文件删除成功...");

        } catch (IOException e) {

            e.printStackTrace();

        }

    }

 

    /**

     * 查看目录信息,只显示文件

     *

     * @throws IOException

     * @throws IllegalArgumentException

     * @throws FileNotFoundException

     */

    @Test

    public void testListFiles() throws FileNotFoundException, IllegalArgumentException, IOException {

 

        // 思考:为什么返回迭代器,而不是List之类的容器

        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());

            BlockLocation[] blockLocations = fileStatus.getBlockLocations();

            for (BlockLocation bl : blockLocations) {

                System.out.println("block-length:" + bl.getLength() + "--" + "block-offset:" + bl.getOffset());

                String[] hosts = bl.getHosts();

                for (String host : hosts) {

                    System.out.println(host);

                }

            }

            System.out.println("--------------angelababy打印的分割线--------------");

        }

    }

 

    /**

     * 查看文件及文件夹信息

     *

     * @throws IOException

     * @throws IllegalArgumentException

     * @throws FileNotFoundException

     */

    @Test

    public void testListAll() throws FileNotFoundException, IllegalArgumentException, IOException {

 

        FileStatus[] listStatus = fs.listStatus(new Path("/"));

 

        String flag = "d--             ";

        for (FileStatus fstatus : listStatus) {

            if (fstatus.isFile())  flag = "f--         ";

            System.out.println(flag + fstatus.getPath().getName());

        }

    }

}

 


【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。