Hadoop ViewFs允许hdfs schema的重载
文章目录
- 前言
- 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的重载相关推荐
- Hadoop核心架构HDFS+MapReduce+Hbase+Hive内部机理详解
编者按:HDFS和MapReduce是Hadoop的两大核心,除此之外Hbase.Hive这两个核心工具也随着Hadoop发展变得越来越重要.本文作者张震的博文<Thinking in BigD ...
- hadoop java操作hdfs
hfds 是一种文件系统,用于存储hadoop将要处理的数据.适用于大规模分布式数据处理,是一个可扩展行的文件分布式系统: 优点 1.如果出现节点宕机,hdfs,可以持续监视,错误检查,容错处理,文档 ...
- Hadoop 分布式文件系统 - HDFS
当数据集超过一个单独的物理计算机的存储能力时,便有必要将它分不到多个独立的计算机上.管理着跨计算机网络存储的文件系统称为分布式文件系统.Hadoop 的分布式文件系统称为 HDFS,它 是为 以流式数 ...
- 何时使用hadoop fs、hadoop dfs与hdfs dfs命令
hadoop fs:使用面最广,可以操作任何文件系统. hadoop dfs与hdfs dfs:只能操作HDFS文件系统相关(包括与Local FS间的操作),前者已经Deprecated,一般使用后 ...
- Hadoop分布式文件系统--HDFS结构分析
前言 在Hadoop内部,详细实现了很多类的文件系统,当然最最被我们用到的就是他的分布式文件系统HDFS了. 可是本篇文章不会讲HDFS的主从架构等东西,由于这些东西网上和资料书中都讲得非常多了. 所 ...
- Hadoop分布式文件系统hdfs的shell操作命令大全
hadoop fs -操作命令 -参数 -ls #显示目录信息 -->hadoop fs -ls hdfs://hadoop-server-00:9000/ 这些参数中,所有的hdfs路径都可以 ...
- Hadoop学习之HDFS
Hadoop学习之HDFS 1 HDFS相关概念 1.1 设计思路 分散存储,冗余备份. 分散存储:大文件被切割成小文件,使用分而治之的思想让多个服务器对同一个文件进行联合管理: 冗余备份:每个小文件 ...
- Centos7.x Hadoop 3.x HDFS 写入文件
操作目的 1.在Linux环境下 编写HDFS写文件程序的java文件 2.编译并打包HDFS的写程序 3.执行HDFS的写程序 环境.工具说明 1.先搭建一个 Hadoop 的基础集群环境 参考:H ...
- Hadoop分布式文件系统HDFS的工作原理详述
Hadoop分布式文件系统(HDFS)是一种被设计成适合运行在通用硬件上的分布式文件系统.HDFS是一个高度容错性的系统,适合部署在廉价的机器上.它能提供高吞吐量的数据访问,非常适合大规模数据集上的应 ...
最新文章
- “偷鸡”不成的马斯克,终于丢掉了自己的“王位”
- iPhone浏览器性能测试
- android四中启动模式
- Codeforces Round #721 (Div. 2)
- 信息学奥赛课课通VS中学生计算机,数学奥赛VS信息学奥赛 孩子们该如何选择
- node.js stream
- 我的记事本(VB6)
- 阿里矢量图标及其引入方式
- 一文读懂李洪元被捕251天:先后涉及三项罪名 录音成关键证据
- matlab图像噪声处理,基于matlab图像处理的去噪处理.doc
- 数字图像处理第三章-----空间域滤波
- phyton方面相关书籍
- CSS3解决连续英文字符或数字不能自动换行的问题
- LightProxy 无线端代理iOS,安装验证证书后仍不生效
- HTML 网页相关概念
- Android蓝牙开发(一)之打开蓝牙和设备搜索
- 硬盘分区删除后的恢复!
- java心得!--很好的java学习历程(转自张国宝)
- 模拟输入H.264流,输出封装格式文件
- 教师是唯一无法被人工智能取代的职业