`
guiyu0856
  • 浏览: 39160 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

自开发跨HDFS版本的拷贝工具

    博客分类:
  • hdfs
阅读更多

        虽然HDFS提供了distcp的远程拷贝工具,在同版本之间拷贝很方便,功能也很强大。但是,在跨版本、跨 运维机制时,它就不可用了。另外,HDFS也专门为跨版本提供了hftp协议,提供只读功能,但是该功能也有个致命缺陷,即需要配置被拷贝集群的所有节点的hosts,因为这个协议走的是HDFS的web管理接口,里面每个数据节点都是以hostname对外提供服务,所以,不配置hosts是不行的。但是在一些大公司,运维制度很苛刻,root的密码是不对非运维人员提供的,甚至普通用户的密码也不对外,更别人让他们去配置那么多的hosts,这是要走申请和授权的,太麻烦。再者,在大公司,hadoop的集群比较多,版本也不一样,总不能每次都去配置成千上万的hosts,不易维护。

        至此,跨版本拷贝HDFS的需求应运而生,但实现该目标有以下四点:

        1、同一进程内实现跨版本数据的读和写;

        2、全内存交换数据,不写磁盘;(一是因为效率低,二是没有这么大的磁盘[数据文件很大,上T的都有])

        3、拷贝目录时的递归拷贝;

        4、拷贝数据的完整性和一致性。

        这就也对应了四点需要解决的问题:

        1、在同一进程内,如何在面对不同集群版本时加载对应的jar,这需要实现自定制的类加载机制;

        2、多线程并发控制,缓存利用,带宽利用,保证高效拷贝;

        3、分清拷贝目录和文件的区别,同时保证在目标集群保存该目录下结构的一致性;

        4、对目录拷贝时,对个别出错文件的处理方案;源端和目的端的压缩机制、文件格式等

 

        为了方便应用和扩展,我个人设计开发了一套跨版本拷贝的JAVA拷贝工具,处于对公司技术保密制度的尊重和落实,这里我就不发布实现的源码了,但是具体思路可以分享一下。

        1、首要解决自定制的类加载器,普通实现是继承URLClassLoader,但是有个问题,单纯通过它去加载指定jar包,然后显示反射需要的类时,是完全没问题的,但是当显示调用的类内部调用别的类时(及内部隐士调用),依然会导致版本错乱(因为不同HDFS版本依赖有些不同版本的第三方jar,默认类加载器在类路径下按照先后顺序加载,当出现重名类时,取第一个jar的),因此,首要解决累加器;

       2、定义上层接口,定义create、open、delete等文件操作方法,以及一些辅助功能如递归目录等;

       3、为工具稳定和维护增加日志、监控和自运维功能设计,如重试等

       4、子类中用到Hadoop的中类时,全反射机制实现,重点关注是子类自己申明的还是继承至父类、处理数组、流关闭等;

       5、双缓冲队列,谨记,该“双缓冲”与常规双缓冲是有区别的,因此这是流式读取,顺序不能乱。

       6、命令行易用参数设计,可配置化设计等

 

       做到上述这些,那么一个结构简单却功能强大、稳定的工具就诞生了。

      

       另外,部署时,记得工具中的hadoop配置文件应该从线上拷贝过来或者从源集群的客户端中拷贝,还有就是要记得在跨用户、用户组时,部署主机的安全配置机制和源集群的安全验证机制要保持一致。

 

       设计、研发和测试该工具,我用了1.5天,现在在线上运行一切正常,符合预期。表扬一下自己和感谢一下现实环境下的“变态”需求催生了自我创新。

 

 

0
4
分享到:
评论

相关推荐

    3、HDFS的使用(读写、上传、下载、遍历、查找文件、整个目录拷贝、只拷贝文件、列出文件夹下文件、删除文件及目录、获取文件及文件

    为了高效地与HDFS交互,Java API 提供了一套丰富的工具和类库,使得开发者能够方便地进行文件的读写、上传、下载、遍历、查找、拷贝以及管理HDFS上的文件和目录。以下将详细讲解如何使用Java API 操作HDFS。 ### 一...

    kettle5.3连接hdfs、hbase、kettle5.2源码编译

    在本文档中,我们将深入探讨如何使用 Kettle 5.3 版本连接到 HDFS 和 HBase,以及如何对 Kettle 5.2 的源码进行编译。 一、Kettle 5.3 连接 Hadoop 2.2.0 连接 Hadoop 2.2.0 需要确保以下步骤已经完成: 1. 安装 ...

    Hadoop-HDFS.docx

    Hadoop提供了shell命令行工具`bin/hadoop fs`或`bin/hdfs dfs`来进行HDFS的文件操作,包括文件的追加、查看、校验、权限管理、拷贝、计数等。例如: - `-appendToFile`:追加本地文件到HDFS文件末尾。 - `-cat`:...

    Day05_HDFS深入及Hadoop HA.pdf

    应用场景包括但不限于创建HDFS连接、删除和创建文件或目录、管理HDFS的回收站、实现跨集群的数据拷贝等。通过API可以更好地管理和操作HDFS系统中的数据,优化数据处理流程。 综上所述,从课程回顾到HDFS和Hadoop HA...

    Hadoop-Eclipse开发环境配置经验

    Eclipse是一个开源的、跨平台的、可扩展的集成开发环境(IDE),主要用于Java语言开发,但同样支持多种编程语言。 一、Hadoop-Eclipse开发环境配置的重要性 在大数据处理领域,Hadoop扮演着至关重要的角色。当我们...

    精品课程推荐 大数据与云计算教程课件 优质大数据课程 04.MapReduce Eclipse开发插件(共20页).pptx

    课程还涉及了Hadoop的其他组件,如HDFS(Hadoop分布式文件系统)、YARN(资源调度器)、Hive(数据仓库工具)、HBase(NoSQL数据库)、Pig(数据流处理语言)、Zookeeper(分布式协调服务)、Sqoop(数据导入导出...

    hadoop-eclipse-plugin-2.8.0.zip 亲测Eclipse2020+Hadoop2.10可用

    Eclipse是Java开发人员常用的集成开发环境,它提供了丰富的功能,如代码编辑、调试、构建和版本控制等。然而,Eclipse原生并不包含对Hadoop的支持。为了在Eclipse中进行Hadoop开发,需要安装特定的插件,即这里的...

    藏经阁-阿里云 JindoFS+OSS 数据上云实战-153.pdf

    DistCp 是一个分布式的文件拷贝工具,而 JindoDistCp 是阿里云 EMR 团队开发的针对 OSS 上数据迁移的拷贝工具,它不仅可以支持 HDFS、OSS 上的数据迁移,还可以支持常见的 S3 和 COS 等数据间的数据迁移。...

    hadoop-fs指令学习

    这会将本地的`localfile`或`localdirectory`拷贝到HDFS的`/hdfs/path`下。 3. **get**: 从HDFS下载文件到本地。例如: ```bash hadoop fs -get /hdfs/path/localfile ``` 这会将HDFS上的`/hdfs/path/localfile...

    如何在ubuntu11.10桌面版下安装jdk和hadoop

    然后,建立 app 目录,并将 JDK 和 Hadoop 安装包拷贝到该目录下。接着,安装 JDK 和 Hadoop,配置 JDK 环境变量,并修改 Hadoop 的配置文件。 在安装 Hadoop 之前,需要配置 Hadoop 的环境变量,包括 JAVA_HOME、...

    hadoop 2.6 win 64位 eclipse

    Eclipse是一款广泛使用的集成开发环境(IDE),它支持多种编程语言,包括Java,而Hadoop主要是用Java编写的,因此Eclipse是Hadoop开发的常用工具。 在描述中提到的资源包括两个文件:`hadoop.dll`和`winutils.exe`...

    阿里云 JindoFS+OSS 数据上云实战.pdf

    5. JindoDistCp 介绍:JindoDistCp 是阿里云 EMR 团队开发的针对 OSS 上数据迁移的拷贝工具,支持 HDFS、OSS、S3 和 COS 等数据源之间的数据迁移。 6. 数据无忧:JindoFS 提供了多种方式来确保数据安全,包括 ...

    spark集群安装部署与初步开发

    ### Spark集群安装部署与初步开发知识点...从环境准备到集群搭建,再到开发工具的选择和配置,每一步都至关重要。对于初学者而言,理解这些基础步骤不仅有助于快速上手Spark开发,还能为进一步深入学习打下坚实的基础。

    面向机器学习的开发环境CodeLab介绍.pdf

    随着LinkedIn在2017年将机器学习工程师和数据科学家列为美国最快增长的职业,以及Google Trends显示“数据科学”搜索量的持续增长,这类工具的重要性不言而喻。 CodeLab作为新一代的数据科学与机器学习开发环境,它...

    拓思爱诺大数据-第二天Hadoop高级编程

    - **-copyToLocal**:从HDFS拷贝到本地。 - 示例:`hdfs dfs -copyToLocal /aaa/jdk.tar.gz` - **-cp**:从HDFS的一个路径拷贝到另一个路径。 - 示例:`hdfs dfs -cp /aaa/jdk.tar.gz /bbb/jdk.tar.gz.2` - **-mv*...

    Hadoop2.x版本完全分布式安装与部署

    因为Hadoop是用Java编写的,所以在安装Hadoop之前需要安装Java开发工具包(JDK)。安装完成后,通过执行javac命令测试JDK是否安装成功。 步骤6:修改Hadoop配置文件。Hadoop的配置文件较多,这里主要修改六个核心的...

    eclipse安装hadoop插件

    Hadoop是一个由Apache基金会开发的开源框架,它允许使用简单的编程模型跨计算机集群分布式处理大量数据。它包括核心的HDFS(Hadoop分布式文件系统)用于存储数据,MapReduce用于处理数据。 根据提供的文件内容,...

    hadoop插件儿winutil.exe和hadoop.dll

    然而,通过社区的努力,现在Windows用户也可以利用这些工具来构建本地Hadoop开发环境。 `winutil.exe` 是一个Windows平台上的实用程序,它实现了Hadoop在Unix系统中的某些功能,如HDFS操作、环境变量设置等。在...

    实验2-在Hadoop平台上部署WordCount程序-孙淼1

    6. **Hadoop框架**:深入学习Hadoop 2.5.2版本的架构和配置,包括HDFS的管理和MapReduce的编程模型。 7. **WordCount程序**:这是Hadoop的入门示例,用于统计文本文件中单词的出现次数。程序包括Mapper和Reducer两...

Global site tag (gtag.js) - Google Analytics