文章目录

  • 前言
  • Hadoop ViewFs的问题痛点
  • Hadoop ViewFs的重载hdfs schema方式
  • ViewFs的mount point中心化管理问题
  • 引用

前言


在大数据时代,随着业务的迅速扩张,很多大公司往往内部会有多cluster模式来支撑其内部的数据体量。在这期间就会涉及到一个多集群管理协调的问题,比如典型的HDFS的多集群管理。社区在早期实现的ViewFs以及后来的Router-based的功能在一定程度上能优化这块的管理。但是上述2个方案还不能完全cover住HDFS的多cluster管理的痛点问题,比如在一些用户写死在code中的地址,如何能做到纹丝不动的适配到viewfs多集群模式?本文我们来谈论谈论这个话题以及目前社区对此的解决方案。

Hadoop ViewFs的问题痛点


Hadoop ViewFs功能实现的时间可以说是非常早的了,当时最初解决的问题是在client端构建一个视图逻辑上统一的文件系统,ViewFs下不同的路径实际指向的具体的物理cluster地址。简单来说,就是我们在client端添加了一个类似mount point的映射表mapping关系。

因为是基于client side的改动,因此这会导致一个很容易出现的问题,ViewFs的重新部署更新会变得极为的麻烦,在这里面至少会涉及到如下相关服务的变更:

  • 集群内部DataNode上的mount point配置更新
  • 外部Hadoop client的mount point更新
  • 写死在用户应用程序中或者一些hive metastore内部的地址得更新

针对上面的第一,第二点,社区通过实现了server-side的解决方案即HDFS RBF,已经基本可以解决这个问题了。但是对于上述第三点,RBF看似也还是不能很完美地解决。

另外随着当前外部cloud存储的兴起,存储形式已经绝不仅仅依赖于HDFS一种,它可以是S3或者是Ozone类似别的存储系统。Hadoop内部通过构造Hadoop兼容性文件系统(Hadoop Compatible FileSystem,简称HCFS)的方式,能把数据写到这个第三方的cloud storage里去。令人高兴的一点是,目前ViewFs mount point是能够支持这种第三方HCFS的数据写出。不过RBF的实现目前还只能是HDFS内部单一集群的映射,这又是RBF实现的一个不足。

综上所述,我们列举一下上面提到的目前来看所有潜在的问题点:

  • ViewFs mount point文件的client端维护管理问题
  • 如果使用RBF功能解决client端配置维护问题,如何做到HCFS的访问,达到访问HDFS和non-HDFS系统的透明度和无缝契合。
  • 用户Job程序和一些hard-coded在metastore serivce内的地址还是不好去更新

Hadoop ViewFs的重载hdfs schema方式


社区在JIRAHDFS-15289: Allow viewfs mounts with hdfs scheme and centralized mount table里提到了一种支持重载hdfs schema的方式来改进上面提到的uri地址hard-coded的问题。

既然我们改用户hard-coded或者metadata service里的hdfs uri地址代价这么高的话,那么我们就直接让这些地址进行重新映射,映射关系类似于ViewFs里的那种映射关系不就可以了。

下面通过一个例子来具体看下这个重载schema的模式。

比如在原有系统中,系统和应用程序是通过设置fs.DefautlFS的方式来直接标明其所要访问的目标cluster地址,

// Existing configuration with single HDFS
fs.defaultFS=hdfs://clusterA

然后这个时候我们打算引入多集群的方案,但是又不想改上面这个defaultFS的话,在新的支持重载schema的模式下,我们可以做到如下的mount point mapping:

fs.viewfs.mountable.clusterA.link./User/data → hdfs://clusterB/User/data
fs.viewfs.mountable.clusterA.link./data → s3a://bucketData/data
fs.viewfs.mountable.clusterA.linkfallback → hdfs://clusterA/

对应的语义如下:

当用户通过clusterA地址访问/User/data目录时,它实际请求的是clusterB集群的对应目录数据。
当用户通过clusterA地址访问/data目录时,它实际请求的是s3a外部Hadoop兼容性文件系统对应的目录数据,这个还是支持的,因为重载schema是在ViewFs下做的扩展。
当用户通过clusterA地址访问剩余目录时,则访问的是hdfs://clusterA/自身的集群地址。

这样来看,ViewFs的支持hdfs scheam重载功能可以大大减轻外部相关服务的hdfs uri地址的更新调整所带来的麻烦。

ViewFs的mount point中心化管理问题


在HDFS-15289里,它还提到了关于ViewFs下的mount point中心化管理的问题。Server-side方案RBF无法做到ViewFs下的兼容各种HCFS访问的功能,但ViewFs目前又不具备RBF这种具有中心化管理mount point mapping这样的功能属性。

于是社区也提到了对ViewFs这块的改进之处,有以下几个设想方案:

方案一,将mount point配置文件放在远程server 上,然后通过xml xinclude的方式,以http的请求path去拿到这个配置信息,样例如下:

<configuration xmlns:xi="http://www.w3.org/2001/XInclude"><xi:include href="http://localhost:9870/webhdfs/v1/mountTable/mount-table.xml?op=Open"/>
</configuration>

此方案的缺点在于远程server的单点问题,无法保证远程server的high availability,一旦这个配置不可得,对于外部访问HDFS的应用影响巨大。

方案二,利用现有HDFS,将mount point放在HDFS上,通过改进Hadoop Configuration的解析,使其能够支持xml带hdfs地址的数据解析访问。

<property><name>fs.viewfs.mounttable.path</name><value>hdfs://localhost:9000/mountTable/mount-table.xml</value>
</property>

不过上述两种方案存在部分共同问题:

  • 每次job启动都会进行一次额外的mount point信息的请求解析,这是否会给server端造成一定的压力?同时这部分会增加少许的latency,如果用户job频繁做这样的解析的话。
  • 如果在job运行过程中更改server端的mapping关系,job的task可能会看到不一样的mount point关系,会造成后续的问题影响。

上述2点问题在实际场景可能问题没有那么的大,但是也是需要去注意和考虑的点。不过总的来看,ViewFs的支持hdfs schema方案在用户端调整这块还是能够带来很多改进之处的。

引用


[1].https://issues.apache.org/jira/browse/HDFS-15289
[2].https://drive.google.com/file/d/1HGODu5KF6Djn0fup1WAl1U4rbcgQpcvQ/view

Hadoop ViewFs允许hdfs schema的重载相关推荐

  1. Hadoop核心架构HDFS+MapReduce+Hbase+Hive内部机理详解

    编者按:HDFS和MapReduce是Hadoop的两大核心,除此之外Hbase.Hive这两个核心工具也随着Hadoop发展变得越来越重要.本文作者张震的博文<Thinking in BigD ...

  2. hadoop java操作hdfs

    hfds 是一种文件系统,用于存储hadoop将要处理的数据.适用于大规模分布式数据处理,是一个可扩展行的文件分布式系统: 优点 1.如果出现节点宕机,hdfs,可以持续监视,错误检查,容错处理,文档 ...

  3. Hadoop 分布式文件系统 - HDFS

    当数据集超过一个单独的物理计算机的存储能力时,便有必要将它分不到多个独立的计算机上.管理着跨计算机网络存储的文件系统称为分布式文件系统.Hadoop 的分布式文件系统称为 HDFS,它 是为 以流式数 ...

  4. 何时使用hadoop fs、hadoop dfs与hdfs dfs命令

    hadoop fs:使用面最广,可以操作任何文件系统. hadoop dfs与hdfs dfs:只能操作HDFS文件系统相关(包括与Local FS间的操作),前者已经Deprecated,一般使用后 ...

  5. Hadoop分布式文件系统--HDFS结构分析

    前言 在Hadoop内部,详细实现了很多类的文件系统,当然最最被我们用到的就是他的分布式文件系统HDFS了. 可是本篇文章不会讲HDFS的主从架构等东西,由于这些东西网上和资料书中都讲得非常多了. 所 ...

  6. Hadoop分布式文件系统hdfs的shell操作命令大全

    hadoop fs -操作命令 -参数 -ls #显示目录信息 -->hadoop fs -ls hdfs://hadoop-server-00:9000/ 这些参数中,所有的hdfs路径都可以 ...

  7. Hadoop学习之HDFS

    Hadoop学习之HDFS 1 HDFS相关概念 1.1 设计思路 分散存储,冗余备份. 分散存储:大文件被切割成小文件,使用分而治之的思想让多个服务器对同一个文件进行联合管理: 冗余备份:每个小文件 ...

  8. Centos7.x Hadoop 3.x HDFS 写入文件

    操作目的 1.在Linux环境下 编写HDFS写文件程序的java文件 2.编译并打包HDFS的写程序 3.执行HDFS的写程序 环境.工具说明 1.先搭建一个 Hadoop 的基础集群环境 参考:H ...

  9. Hadoop分布式文件系统HDFS的工作原理详述

    Hadoop分布式文件系统(HDFS)是一种被设计成适合运行在通用硬件上的分布式文件系统.HDFS是一个高度容错性的系统,适合部署在廉价的机器上.它能提供高吞吐量的数据访问,非常适合大规模数据集上的应 ...

最新文章

  1. “偷鸡”不成的马斯克,终于丢掉了自己的“王位”
  2. iPhone浏览器性能测试
  3. android四中启动模式
  4. Codeforces Round #721 (Div. 2)
  5. 信息学奥赛课课通VS中学生计算机,数学奥赛VS信息学奥赛 孩子们该如何选择
  6. node.js stream
  7. 我的记事本(VB6)
  8. 阿里矢量图标及其引入方式
  9. 一文读懂李洪元被捕251天:先后涉及三项罪名 录音成关键证据
  10. matlab图像噪声处理,基于matlab图像处理的去噪处理.doc
  11. 数字图像处理第三章-----空间域滤波
  12. phyton方面相关书籍
  13. CSS3解决连续英文字符或数字不能自动换行的问题
  14. LightProxy 无线端代理iOS,安装验证证书后仍不生效
  15. HTML 网页相关概念
  16. Android蓝牙开发(一)之打开蓝牙和设备搜索
  17. 硬盘分区删除后的恢复!
  18. java心得!--很好的java学习历程(转自张国宝)
  19. 模拟输入H.264流,输出封装格式文件
  20. 教师是唯一无法被人工智能取代的职业

热门文章

  1. Linux 系统相关知识记录
  2. elasticsearch 深入 —— 近似匹配
  3. vue处理一千张图片进行分页加载
  4. eMule系统托盘图标
  5. Mavic2、T系列植保无人机
  6. 服务器物理内存过高,服务器还没运行内存就很高
  7. 美法官建议部分禁止进口iPhone 高通两项申诉获一项支持
  8. eclipse Turn off automatic updates
  9. c对文件的一些基本操作
  10. Web报表系统葡萄城报表:Web 报表