`
langyu
  • 浏览: 888208 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

HDFS:解决HDFS跨版本兼容问题

    博客分类:
  • hdfs
阅读更多

    HDFS提供用户客户端服务,在协助用户操作集群数据的同时,内部也包含大量的控制逻辑。这样我们就可以把HDFS客户端理解为两部分:一部分提供客户调用,另外一部分属于HDFS内部,作为集群的入口,与NameNode与DataNode通信,并且不同的HDFS版本有不同的通信接口。下面是一张HDFS的客户端模型,可以让大家对它的客户端有清晰的认识。



    这里我们把整个HDFS变透明,只知道客户端与它的交互是通过RPC(与DataNode的数据传输是通过二进制流,一些相应的方法调用也是通过RPC,简化起见,我们说客户端与整个HDFS的交互都是RPC)。RPC的请求是需要验证版本号的,因为不同版本的server或client可能有接口差异、实现逻辑区别,就连某些存储结构的布局都可能不甚相同。所以在RPC交互中一定得保证客户端与服务端(NameNode/DataNode)有相同的版本号。

    正常情况下,每个HDFS的release会被指定RPC版本号,它属于HDFS的一部分,对用户不可见。如果每个集群都有相同的HDFS RPC版本,自然不用担心。但事实上,我们可能拥有不同版本的HDFS集群,且集群间的数据传输也不可避免。如果强行使用某个版本的HDFS集群访问其它版本的服务端,就会碰到VersionMismatch异常信息,表明客户端与服务端版本不一致,无法进行数据交互。

    HDFS的开发人员也意识到这种问题的存在,他们推出了HDFS proxy方案。这种方案利用了Servlet容器(Tomcat/Jetty等)来管理不同RPC版本的HDFS客户端,因为处于容器的管理之下,不同版本的客户端自然被不同的classloader管理着,利用HTTP/HPPTS forward功能完成用户请求的转发。随之而来的问题是,当前HDFS只响应HTTPS请求(HDFS的HSFTP协议),且不能灵活的操纵数据。可能最让我头痛的是一大堆与HTTPS权限相关的配置及jar文件部署,相当地折腾。

    Cloudera也在此HDFS proxy基础上作了一些改进,换名为Hoop,但实现细节与HDFS proxy无二般区别。

    在此两种方案的基础上可以考虑下,HDFS为了解决多版本兼容问题而引入Servlet容器,就是想利用容器的多classloader机制,分别管理不同版本的客户端,然后将请求forward到正确的客户端。明白这个初衷后,我们实现了自己的多classloader方案,完全摈弃Servlet的引入及令人头痛的各种配置。它的基本结构如下图



    平时我们对HDFS的操作就是这些基本的如open, create, append, status等,完全可以将这些基本操作抽象成特定的接口,就是图中黄色标识的HDFS Abstract Interface,不管是哪个版本,都得实现这个特定接口的每个操作。与这个接口相关的业务逻辑处理都可以归结为一层,这层由system classloader加载,与HDFS无任何关系,用户只是看到这个接口,然后调用相应的逻辑。这层的控制逻辑主要是这样:把哪些数据从哪个集群迁移到哪个集群,并且处理各种异常情况。

    每个版本的HDFS由不同的classloader加载并管理,同时也包含着HDFS Abstract Interface的不同实现,每个选定版本都创建独立的FileSystem,并调用与之处于同一classloader的HDFS客户端,这些客户端的配置(core-site.xml)指向相同版本的HDFS集群。可以说,像图中的v1-impl,v2-impl都是一层真实版本的代理,让真正的调用者(由system classloader管理)不用顾忌版本之间的区别。

    依这种实现方式的话,我们需要做的事情是:1. 为每个版本的HDFS jar添加配置文件core-site.xml,指向相应版本的HDFS集群;2. 实现system classloader管理的这层的业务逻辑,制订统一接口;3. 对于各个HDFS版本,创建自己的接口实现类。这样就用简洁的方式替代了Servlet容器的引入及配置,可以用独立进程或嵌入其它组件的方式运行此系统。

    当然它解决的不限于跨版本问题,跨集群,跨DC也同样适用。在此之上可以开发独立控制组件来完善相应的功能。
  • 大小: 53.6 KB
  • 大小: 23.3 KB
1
0
分享到:
评论

相关推荐

    window客户端连接hadoop hdfs,完美解决障碍

    在Windows客户端连接Hadoop HDFS时,可能会遇到各种问题,如网络不通、配置不正确、驱动不兼容等。本文将详细介绍如何在Windows环境下完美解决这些问题,实现顺利连接Hadoop分布式文件系统(HDFS)。 首先,理解...

    HDFS管理工具HDFS Explorer下载地址、使用方法.docx

    - 由于官方已停止更新,可能会存在兼容性问题,特别是对于新版本的Hadoop发行版。建议检查社区的第三方维护版本或寻找替代工具。 总的来说,HDFS Explorer是一个方便的工具,用于在Windows环境中进行HDFS的日常管理...

    hdfs开启高可用+hive报错

    ### HDFS高可用机制与Hive兼容性问题详解 #### 一、背景介绍 Hadoop分布式文件系统(HDFS)是...综上所述,通过合理的配置调整和技术优化,可以有效解决HDFS HA与Hive之间的兼容性问题,保障大数据平台的稳定运行。

    idea hadoop-hdfs插件

    3. 兼容性:确保插件版本与IDEA版本以及Hadoop版本兼容,避免出现兼容性问题。 4. 故障排查:如果遇到无法连接或操作异常的情况,检查网络连接、HDFS服务状态以及插件配置是否正确。 通过本文的介绍,我们对"Idea ...

    hdfs-over-ftp安装包及说明

    由于Hadoop的不同版本之间可能存在接口或配置差异,因此提供两个不同的包以确保兼容性。 综上所述,这个资源包旨在帮助用户在Hadoop集群上安装和配置一个FTP接口,使得用户可以通过FTP协议访问HDFS,这对于那些习惯...

    HDFS与HBASE程序关键点个性化开发.doc

    1. 环境配置:确保所有软件版本兼容,避免因版本不匹配导致的问题。 2. 错误处理:在编程时要处理可能出现的异常,保证程序健壮性。 3. 日志记录:在开发过程中,记录操作日志和错误信息,方便排查问题。 4. 测试...

    Flume-HDFS-驱动-jar包

    总之,Flume-HDFS驱动JAR包是确保Flume能成功与HDFS集成的关键组件,通过手动添加这些依赖,可以解决Flume在上传数据到HDFS时可能出现的问题。理解这一过程对于在大数据环境中有效地使用Flume进行日志收集和处理至关...

    HDFS-Explore

    7. **兼容性**:HDFS-Explore应当兼容不同的Hadoop版本,确保用户在不同环境下都能正常使用。 总之,HDFS-Explore作为一个高效且易用的HDFS管理工具,它降低了HDFS操作的门槛,提高了用户与HDFS交互的效率,是...

    访问hdfs用到的客户端jar包

    在分布式存储领域,Hadoop HDFS(Hadoop ...在实际开发中,还需要确保与HDFS集群的版本兼容,避免因版本差异导致的问题。同时,理解和掌握HDFS的原理,如副本策略、数据块分布等,也有助于优化应用程序的性能。

    hadoop,hbase,hive版本整合兼容性最全,最详细说明【适用于任何版本】 -

    在版本兼容性问题上,需要注意以下几点: 1. 了解每个组件的官方文档,其中通常会列出支持的版本范围。 2. 在升级或部署时,遵循“最小化改动”的原则,优先选择与现有组件兼容的新版本。 3. 测试环境中的全面测试是...

    HDFS构架设计和读写流程.docx

    HDFS(Hadoop Distributed File System),即Hadoop分布式文件系统,旨在解决大规模数据集的存储问题,它通过将数据分散存储在由多台低成本商用服务器组成的集群上,实现了高可靠性和高吞吐量的服务。相较于传统的...

    HDFS的透明压缩存储.pdf

    然而,随着数据量的不断膨胀,如何在不牺牲性能的前提下节省存储空间,成为了HDFS亟待解决的关键问题之一。本文将深入探讨HDFS的透明压缩存储技术,旨在通过详细的解析,揭示其背后的原理、实现机制以及潜在的风险与...

    hdfsFile.zip, windows下调试hadoop,.hdfs的2个文件hadoop.dll,winutils.exe

    在Windows环境下调试Hadoop,尤其是涉及HDFS(Hadoop Distributed File System)的操作时,经常会遇到需要配置和使用`winutils.exe...在遇到问题时,检查这两个文件的版本和配置是否正确,通常能解决大部分的运行时错误。

    基于HDFS的区域医学影像分布式存储架构设计.pdf

    文章提出了一种基于HDFS的S-DICOM文件格式,以适应分布式存储环境,解决DICOM在HDFS环境中的存储和检索问题。 5. 集中式存储(FCSAN)与分布式存储(HDFS集群)的结合: 设计中采用了FCSAN(Fibre Channel Storage ...

    华为FusionStorage HDFS大数据存储Data Sheet.pdf

    华为FusionStorage HDFS大数据存储是基于分布式架构的存储系统,旨在解决传统大数据平台的缺陷,例如资源浪费、数据孤岛效应等问题。该系统采用全分布式架构,将HDD、SSD等硬件存储介质通过分布式技术组织成大规模...

    HDFS CSI插件加速大数据集群中的Kubernetes.pptx

    最后,将传统的HDFS(Hadoop分布式文件系统)与Kubernetes集成,需要解决数据持久化和资源隔离的问题。 【CSI简介】 容器存储接口(Container Storage Interface, CSI)是一种标准化的接口,用于让容器编排系统(如...

    flime安装+配置+测试+案例(采集日志至HDFS)

    在配置文件完成后,我们需要解决潜在的兼容性问题。例如,Hadoop 和 Flume 可能会使用不同版本的 Guava 库。为了解决这个问题,我们需要找到高版本的 Guava JAR 文件,并复制到低版本的目录下,重命名低版本以禁用它...

    hadoop,hbase,hive版本整合兼容性最全,最详细说明【适用于任何版本】

    在大数据领域中,Hadoop、HBase和Hive是重要的组件,...若遇到特定版本的兼容问题,可以借助社区的力量,向其他用户或开发者寻求帮助。随着版本更新,用户也需要持续关注官方的最新动态,确保整合的组件能够顺畅运行。

    Python库 | hdfs3-0.1.4-py2.py3-none-any.whl

    3. **兼容性**:`hdfs3`不仅支持Python 2.7,也支持Python 3.x版本,这得益于`-py2.py3-none-any`标记,意味着该库可以在两种Python版本上运行。 4. **高级功能**:除了基本的文件操作,`hdfs3`还提供了如文件追加...

Global site tag (gtag.js) - Google Analytics