二、JAVA API实现HDFS

发布时间:2022-06-29 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了二、JAVA API实现HDFS脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。

目录
  • 前文
  • hDFsdemo通过HDFS上传下载文件
  • windows环境下需要使用uITls.exe
  • 为pom.XMl增加依赖
  • 新建java文件HDFS_CRUD
  • GitHub下载地址

前文

  • 一、CentOS7 hadooP3.3.1安装(单机分布式、伪分布式、分布式

hdfsdemo通过HDFS上传下载文件

HDFS_CRUD

windows环境下需要使用uitls.exe

可从github下载,并且要设置环境变量 HADOOP_HOME=Location 【安装解压的位置】 PATH添加:%HADOOP_HOME%bin 和 %HADOOP_HOME%sbin

Hadoop集群是3.3,建议pom.xML的hadoop依赖包也是3.3

为pom.xml增加依赖

<!--    hadoop依赖库-->
        <dePEndency>
            <groupId>org.apache.hadoop</groupId>
            <artifactId>hadoop-common</artifactId>
            <version>3.3.1</version>
        </dependency>
        <dependency>
            <groupId>org.apache.hadoop</groupId>
            <artifactId>hadoop-hdfs</artifactId>
            <version>3.3.1</version>
        </dependency>
        <dependency>
            <groupId>org.apache.hadoop</groupId>
            <artifactId>hadoop-client</artifactId>
            <version>3.3.1</version>
        </dependency>
        <dependency>
            <groupId>org.apache.hadoop</groupId>
            <artifactId>hadoop-mapreduce-client-core</artifactId>
            <version>3.3.1</version>
        </dependency>

新建java文件HDFS_CRUD

/**
 * @author LEHOSO
 * @date 2021/10/18
 * @apinote
 */
public class HDFS_CRUD {

    FileSystem fs = null;

    //初始化客户端对象
    @Before
    public void init() throws Exception {
        //构造一个配置参数对象,设置一个参数:要访问的HDFS的URI
        configuration conf = new Configuration();
        //这里指定使用的是HDFS
        conf.set("fs.defaultFS", "hdfs://192.168.142.10:9000");
        //通过如下的方式进行客户端身份的设置
        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");
        //上传文件方法调用
        fs.copyFromLocalFile(src, dst);
        //关闭资
        fs.close();
    }

    //从HDFS中复制文件到本地系统
    @Test
    public void testDownloadFileToLocal() throws IllegalargumentException, IOException {
        //下载文件
        /**
         * 在windows平台开发HDFS项目时候,不设置Hadoop开发环境,会报错
         * 安装hadoop环境,需要重启IDEA或者重启脑才能生效
         * 需要相关依赖:winuitls.exe、winutis.pdb、hadoop.dll
         */
        fs.copyToLocalFile(false,
                new Path("/testFile"),
                new Path("E:/x.txt"),
                true);
        /**
         * delSrc参数设置为False
         * useRawLocalFileSystem参数设置为true
         * 下载的文件就没有 带.crc的校验文件
         */
        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【recurisive】值必须true
        fs.delete(new Path("/a2"), true);
    }

    //查看目录信息,只显示文件
    @Test
    public void testListFiles() throws FileNotFoundException, IllegalargumentException, IOException {
        //获取迭代器对象
        /**ListFile方法
         * param pathstring:为路径
         * param recursive:为是否为递归查询
         */
        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 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("---------分割线---------");
            //若测试显示信息太多,可以删除或者禁用LOG4j
        }
    }

    // 查看文件及文件夹信息
    @Test
    public void testListAll() throws FileNotFoundException, IllegalArgumentException, IOException {
        // 获取HDFS系统中文件和目录的元数据等信息
        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());
        }
    }
}

GitHub下载地址

(HadoopDemo

脚本宝典总结

以上是脚本宝典为你收集整理的二、JAVA API实现HDFS全部内容,希望文章能够帮你解决二、JAVA API实现HDFS所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。