`
cocoIT
  • 浏览: 51079 次
  • 性别: Icon_minigender_1
  • 来自: 福建
文章分类
社区版块
存档分类
最新评论

java操作hdfs常用方法封装

 
阅读更多

最近一段时间又开始做hadoop相关开发,包括hdfs、mr、hbase、hive等,又有了更进一步的了解,下边就简单写些封装好的java操作hdfs的工具类中的方法。

1、从HDFS上指定的文件中读取子目录


public static List<String> getSubDirs(String rootDir) {
        // 存放最后返回的文件夹列表
        List<String> fileList = new ArrayList<String>();
        try {
            FileSystem fs = FileSystem.get(URI.create(rootDir),
                    ConfigurationUtil.conf);
            Path rootPath = new Path(rootDir);
 
            FileStatus fileStatus = fs.getFileStatus(rootPath);
            // 如果传入的是个文件则不再遍历之
            if (!fileStatus.isDir()) {
                fileList.add(fileStatus.getPath().toString());
            } else {
                FileStatus[] fileStatusArray = fs.listStatus(rootPath);
                for (FileStatus fileState : fileStatusArray) {
                    fileList.add(fileState.getPath().toString());
                }
            }
//          fs.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return fileList;
    }

2、从HDFS上读取文件,并存储到本地


public static void readFromHdfs(String fromFile,String outputFile) throws Exception {
        Configuration conf = new Configuration();
        FileSystem fs = FileSystem.get(URI.create(fromFile), conf);
        FSDataInputStream hdfsInStream = fs.open(new Path(fromFile));
 
        OutputStream out = new FileOutputStream(outputFile);
        byte[] ioBuffer = new byte[1024];
        int readLen = hdfsInStream.read(ioBuffer);
        while (-1 != readLen) {
            out.write(ioBuffer, 0, readLen);
            System.out.println(new String(ioBuffer, "utf-8"));
            readLen = hdfsInStream.read(ioBuffer);
        }
        out.close();
        hdfsInStream.close();
//      fs.close();
    }

3、将指定的文件路径从hdfs读取并转换为byte array


public static byte[] readFromFileToByteArray(String srcFile)
            throws Exception {
        if (StringOperatorUtil.isBlank(srcFile)) {
            throw new Exception("所要读取的源文件" + srcFile + ",不存在,请检查!");
        }
        FileSystem fs = FileSystem.get(ConfigurationUtil.conf);
        FSDataInputStream hdfsInStream = fs.open(new Path(srcFile));
 
        byte[] byteArray = new byte[65536];
 
        // 存放最后的所有字节数组
        ByteArrayOutputStream bos = new ByteArrayOutputStream();
 
        // 实际读过来多少
        int readLen = 0;
        while ((readLen = hdfsInStream.read(byteArray)) > 0) {
            bos.write(byteArray);
            byteArray = new byte[65536];
        }
 
        // logger.info("srcFile---"+srcFile+"读到的字节数为---"+readLen);
//      System.out.println("srcFile---" + srcFile + "读到的字节数为---" +);
        hdfsInStream.close();
//      fs.close();
 
        return bos.toByteArray();
    }

4、将一个本地文件或文件夹上传到hdfs上 isCheckExist是否检查输出目录的存在性,若检查,则存在时不予执行复盖操作

public static boolean copyLocalFileToHdfs(String fromFile, String toFile,
            Boolean isCheckExist) throws Exception {
        try {
            FileSystem fs = FileSystem.get(ConfigurationUtil.conf);
 
            Path srcPath = new Path(fromFile); // 原路径
            Path dstPath = new Path(toFile); // 目标路径
 
            // 首先判断源路径是否存在,和输出路轻是否存在,则存在抛出异常,防止被误覆盖掉
            if (!new File(fromFile).exists()) {
                throw new Exception("要拷贝源文件" + fromFile + ",不存在,请检查!");
            }
            if (isCheckExist) {
                if (fs.exists(dstPath)) {
                    // throw new Exception("要拷贝到的输出目录或文件已存在" + dstPath +
                    // ",请检查!");
                    logger.info("要粘贴到的目录" + toFile + ",已存在,不再重新粘贴!");
                    return true;
                }
            }
            // 调用文件系统的文件复制函数,前面参数是指是否删除原文件,true为删除,默认为false
            fs.copyFromLocalFile(false, srcPath, dstPath);
//          fs.close();
 
            return true;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return false;
    }


分享到:
评论

相关推荐

    4、HDFS-java操作类HDFSUtil及junit测试(HDFS的常见操作以及HA环境的配置)

    HDFSUtil类是Java中用于与HDFS进行交互的工具类,它封装了HDFS API的基本操作。这些操作包括但不限于: - 构造`Configuration`对象:这是HDFS客户端与HDFS集群通信的关键,用于存储HDFS的相关配置信息。 - 设置...

    hadoop Java接口 文件操作类

    本篇将深入探讨如何利用Hadoop的Java接口进行文件操作,实现对Hadoop服务的增、删、改、查等功能。 首先,我们要了解Hadoop的核心组件:HDFS(Hadoop Distributed File System)和MapReduce。HDFS是Hadoop的数据...

    Java及大数据相关的一些代码

    ArrayList、LinkedList、HashSet、HashMap等都是常用的数据结构,它们提供了高效存储和操作数据的方式。此外,Java 8引入了流(Stream)和Lambda表达式,这些新特性极大地简化了对集合的处理,提高了代码的可读性和...

    从Java基础、JavaWeb基础到常用的框架再到面试题、微服务、分布式、大数据都有完整的教程

    首先,Java基础部分通常包括Java语法、面向对象编程概念(如封装、继承和多态)、异常处理、集合框架(如ArrayList、LinkedList、HashMap等)以及输入/输出流。这些基本概念是每个Java开发者必须掌握的,它们构成了...

    架构脑图.pdf

    - **封装**:将数据和操作数据的方法绑定在一起,隐藏内部实现细节。 - **继承**:子类继承父类的特性,实现代码复用。 - **多态**:同一操作作用于不同的对象可以有不同的解释,并产生不同的执行结果。 - **变量**...

    JAVA面试题及知识点整理

    3. **基本数据类型与封装类**:Java中的基本数据类型如int、float等与对应的封装类如Integer、Float等有明显的区别,封装类提供了更多的方法和功能,但会占用更多内存。 4. **类型转换**:浮点型常量默认为double...

    Java个人简历模板33.doc

    3. **面向对象编程**:面向对象编程(OOP)是Java的基础,强调封装、继承和多态性。简历中提到的常用设计模式如单例、装饰、策略、模板、工厂、观察者等都是OOP设计原则的体现。 4. **JavaWeb技术**:涵盖了JSP、...

    【Java面试资料】-(机构内训资料)广州-唯品会-Java大数据开发工程师

    1. **Java基础**:Java语言是大数据处理的基础,掌握其基本语法、面向对象编程概念(封装、继承、多态)、异常处理、集合框架(List、Set、Map)以及并发编程(线程、锁机制)是基础中的基础。 2. **Java高级特性**...

    开发常用jar5

    Java Archive (JAR) 文件是Java编程语言中用于封装多个类、资源和其他文件的容器,其目的是便于分发和管理这些组件。JAR文件本质上是一个采用ZIP压缩格式的归档文件,可以包含类文件、图像、声音、文本以及其他类型...

    Java面试知识总结

    以上内容涵盖了Java面试中常见的知识点,包括Java基础、集合框架、高并发编程、JVM内存管理、Java 8新特性、网络协议、数据库操作、MVC框架以及Linux常用命令等方面,希望对准备面试的开发者有所帮助。

    JAVA集群部署

    主数据库负责写操作,从数据库负责读操作。 - **复制方式**:包括异步复制和半同步复制。异步复制延迟较高但性能好;半同步复制延迟较低但可能会影响写入性能。 ##### 4. 动静态分离 - **Nginx配置**:通过Nginx将...

    大数据课程体系.pdf

    **Linux操作系统**:Linux是大数据平台的常用操作系统,课程介绍了Linux的基本概念、安装方法,以及VMware Workstation虚拟机的使用。在Ubuntu上,学习了常用命令,如进程管理、权限管理,以及网络配置等,这些都是...

    jsp实现的多媒体博客网站

    本项目采用经典的“jsp+javabean+servlet”模式进行开发,这是一种在Java Web开发中常用的技术栈,具有良好的可维护性和扩展性。 1. **JSP(JavaServer Pages)**:JSP是Java EE平台的一部分,用于创建动态网页。...

    人工智能相关课程介绍 (2).docx

    数据结构与算法(Java)部分,主要内容包括常用数据结构(线性表、栈、队列、树、图等)的特点、存储表示、排序算法、查找算法等,旨在培养学生的数据结构和算法知识,并掌握度量算法效率的基本方法。 应用统计学与...

    人工智能相关课程介绍.docx

    这一课程旨在让学生掌握计算机基本操作,包括硬件知识、操作系统安装、Windows系统操作、办公软件使用、DOS操作与网络基础,以及常用工具软件的熟练使用。教学方式以线上学习为主,辅以教师指导,考核则结合在线打字...

    Java开发者或者大数据开发者面试知识点整理.zip

    1. **Java基础**:Java语言的基础部分是面试中的常见话题,包括变量、数据类型、运算符、控制结构(if/else, for, while, switch)、类与对象、封装、继承、多态、接口、异常处理等。 2. **集合框架**:深入理解...

    基于分布式数据库的图像检索系统

    DIRS: Distributed Image Retrieval System === 本项目实现了基于分布式数据库的图像检索系统。其中,TF-IDF作为相似度依据,MapReduce...imtools.py 封装了常用的操作,例如生成路径列表 HBaseConfigure.py HBase配置

    大数据课程体系.docx

    - **HDFS Java API**:提供利用Java API访问HDFS的示例代码。 - **InputSplit和OutputSplit**:解释MapReduce任务中的输入分割和输出分割机制。 - **Block Size配置**:探讨HDFS块大小的配置选项及其对性能的影响。 ...

    大数据课程体系 (2).pdf

    - **Java开发基础知识**:包括Eclipse开发环境的使用,Java语言的基本语法,如类、对象、封装、继承、多态等面向对象特性。 - **多线程技术**:Java中如何创建和管理线程,线程同步机制,如synchronized关键字、...

    jobs_hbase_mirrorm5y_BulkLoadjava_

    这个类可能封装了一些常用操作,如HFile的生成、移动以及与HBase的交互。具体实现可能包括: - 提供方便的方法来配置和启动MapReduce作业。 - 自动计算和设置目标Region的信息。 - 实现HFile的移动和清理逻辑。 - ...

Global site tag (gtag.js) - Google Analytics