Vivo Internet大数据团队LV JIA
Hadoop 3.X的第一个稳定版本已于2017年底发布,并且有许多重大改进。
就HDF而言,新功能,例如擦除编码,2个以上的Namenodes,基于路由器的联合会,待机Namenode Read,Faircallqueue,Intra Intra Intra datanode Balancer和其他新功能。这些新功能在许多方面带来了许多好处,例如稳定性等方面,性能和成本。我们打算将HDFS群集升级到HDFS 3.x版本。
本文将介绍我们如何将CDH 5.14.4 HDFS 2.6.0升级到HDP-3.1.4.0-315 HDFS 3.1.1版本,这是从CDH群集滚动到HDP群集的少数情况之一。您有什么问题。在升级期间相遇?如何解决这些问题?本文具有很高的参考值。
Vivo离线数字仓库Hadoop群集基于CDH 5.14.4版本,CDH 5.14.4 HADOOP版本:2.6.0+CDH 5.14.4+2785,这是Cloudera -Base -Base -Base -base -Apache Hadoop 2.6.0.hadoop Release版本。
随着近年来体内业务的开发,爆炸性数据已经增长,离线数字仓库HDFS群集已从1到十,量表接近10,000个单位。随着HDFS群的增加,当前版本的HDFS的某些疼痛点也暴露出来:
Hadoop 3.X的第一个稳定版本已于2017年底发布,并做出了许多重大改进。根据HDFS,诸如擦除编码,超过2个Namenodes,基于路由器的联邦,备用Namenode之类的新功能阅读,Faircallqueue,Datanode Balancer和其他新功能。HDFS3.x新功能在稳定,性能和成本等许多方面带来许多好处。
根据上述疼痛点和收入,我们决定将离线数字仓库HDFS群集升级到HDFS 3.X版本。
由于我们的Hadoop群集是基于CDH 5.14.4版本构建的,因此我们首先考虑升级到CDH高版本。CDH7提供HDFS 3.x分布。不幸的是,CDH 7没有免费版本。我们只能选择升级到Hortonworks提供的Apache版本或HDP分发。
由于Apache Hadoop没有提供管理工具,因此管理和分发成千上万的HDFS群集的分配非常不便。因此,我们选择了Hortonworks HDP Release版本,HDFS管理工具选择Ambari。
由HortonWorks提供的最新稳定的免费Hadoop版本是HDP-3.1.4.0-315.hadoop版本是Apache Hadoop 3.1.1。
HDFS正式提供两种升级解决方案:Express和RollingUpgrade。
鉴于HDFS停止服务的事实,我们终于选择了RollingUpgrade解决方案。
在RollingUpgrade解决方案中,有两种方法可以撤退:回滚和滚动量程。
我们的在线HDFS群集无法忍受数据丢失,我们最终选择了RollingDrandgrade的静修处。
在线火花,Hive,Flink,Olap和其他计算组件依赖于具有沉重依赖的HDFS客户端。一些计算出的组件版本太低。有必要升级到HDFS 3.x。HDFS客户有高风险。
我们已经验证了HDFS 3.x兼容HDFS 2.x客户端读取和写入几轮测试后。
因此,我们的HDFS仅升级Namenode,Journal Node,DataNode组件和HDFS 2.X客户端和其他YARN升级,然后再升级。
Hadoop官方的官方升级文件中引入了RollingUpgrade升级的操作过程。一般步骤总结如下:
HDFS 2.X群集,HDFS,Yarn,Hive,HBase和其他组件,使用CM工具管理。仅升级HDFS,HDFS 3.X由Ambari管理,由Ambari管理,其他组件,例如Yarn和Hive,仍然使用CM Management.hdfs.hdfs.hdfs2.x客户端未升级并继续使用CM管理。Zokeeper使用原始的CM部署ZK。
特定实现:CM服务器节点部署AMARI服务器,CM代理节点部署Ambari代理。
如上图所示,使用Ambari工具在主/从节点上部署HDFS 3.x Namenode/DataNode组件。由于港口冲突,Ambari部署的HDFS 3.X将开始失败,并且将不会启动在线CM上部署的HDFS 2.X。集群产生影响。
HDFS升级启动后,主节点停止CM JN/ZKFC/NN,启动Ambari JN/ZKFC/NN,Slave Node停止CM DN,并激活Ambari DN。
HDFS社区在滚动升级和降级过程中修复了关键和不兼容的问题。相关的问题编号为:HDFS-13596,HDFS-14396,HDFS-14831。
[HDFS-13596]:修复了活动的NAMNODE升级后,将EC相关的数据结构写入EditLog文件中,导致待机Namenode读取Editlog异常shotdown。
[HDFS-14396]:将Namenode升级到HDFS 3.X版本后,将EC相关的数据结构写入FSIMAGE文件中,导致Namenode降级到HDFS 2.X 2.X版本以识别异常的FMIMAGE FIMAGE FIMAGE文件。
[HDFS-14831]:修复了Namenode升级后,Namenode升级后的Stringtable修改会导致HDFS降级后的不兼容问题。
我们升级后的HDP HDFS版本介绍了上述三个问题 - 相关代码。此外,我们在升级过程中还遇到了其他不令人满意的问题:
在杂志升级期间,出现问题:
未知协议:org.apache.hadoop.hdfs.qjournal.protocol.interqjournalprotocol
错误的原因:HDFS 3.x添加了InterqjournalProtocol,新添加的InterQjournalProtocol用于在JournalNode之间同步的旧编辑数据。
HDFS-14942优化了此问题,日志级别从错误变为调试。此问题不会影响升级。当所有三个HDFS 2.x JN全部升级到HDFS 3.x JN时,JN可以正常同步数据。
在Namenode升级后,DatanOdeProtocol.proto不兼容,导致数据座块报告无法执行。
(1)HDFS 2.6.0版本
datanodeprotocol.proto
(2)HDFS 3.1.1版本
datanodeprotocol.proto
我们可以看到HeartbeaTresponseProto的两个版本的第四和第五参数。
此问题的原因是HDFS-9788的Hadoop 3.1.1版本用于解决HDFS升级期间低版本的问题。HDFS 2.6.0版本没有提交,这会导致datanodeprotocol.proto不兼容。
在HDFS升级期间,无需与低版本的HDFS兼容,只能与HDFS客户端的低版本兼容。
因此,HDFS 3.X不需要HDFS-9788和低版本的功能。我们从HDFS-9788退休,以维护Hadoop 3.1.1上的HDFS-9788版本。
在Namenode升级后,Namenode LewOutversion更改了,这导致Editlog不兼容。HDFS 3.x降级至HDFS 2.x Namenode无法启动。
HDFS 2.6.0升级到HDFS 3.1.1,Namenode LewOutversion值-60更改为-64。要解决此问题,首先找出会更改Namenode LeaoutOutversion?
HDFS版本升级了新功能,Namenode布局遵循新功能更改。Hadoop的官方升级文档指出,在HDFS滚动升级过程中应禁用新功能,以确保在升级过程中布局保持不变。升级的HDFS 3.X版本可以返回到HDFS 2.X版本。
接下来,找出升级到HDFS 3.1.1的HDFS 2.6.0,以介绍Namenode Lewoutversion的新功能?检查HDFS-5223,HDFS-5223,HDFS-8432,HDFS-3107相关问题,HDFS 2.7.0版本,介绍了交流功能,Namenode,Namenode,Namenode,NameNodelayoutversion变为-61.View HDFS 3.x版本NamenodelayOutversion代码:
namenodelayoutversion
截断,append_new_block,queta_by_storage_type,erasure_coding四个功能将mincompatlv设置为-61。
检查最终Namenode布局的值逻辑逻辑:
FSNAMESYSTEM
geteffectivelayoutversion获得了最终有效的布局。Storagelv当前是HDFS 2.6.0 Layoutversion -60,MinCompatlv为-61,并且CurrentLV升级为HDFS 3.1.1 LeaoutVersion -64。
从代码判断的逻辑来看,可以看出,HDFS 2.6.0版本的Layoutversion -60不等于MinCompatlv为-61。因此,在升级到HDFS 3.1.1之后,Namenode布局的值为CurrentLV -64。
从上面的代码分析中可以看出,在HDFS 2.7.0版本引入截短功能之后,HDFS社区仅支持HDFS 3.X降级到HDFS 2.7版本的Namenode LeaoutVersion。
我们评估了HDFS截断功能并与业务场景分析相结合,我们的Vivo内部离线分析暂时没有使用HDFS截短功能。基于此,我们修改了HDFS 3.1.1版本的MinCompatlv,以支持-60支持HDFS。2.6.0升级到HDFS 3.1.1,可以降级到HDFS 2.6.0。
mincompatlv修改为-60:
namenodelayoutversion
升级数据台后,数据台面布局不兼容。HDFS 3.X数据台将降级到HDFS 2.x数据台无法启动。
HDFS 2.6.0 DataNode Lewoutversion为-56,HDFS 3.1.1 DataNode LeaoutVersion为-57。
更改DataDos LeaouTversion的原因:HDFS-2.8.0提交HDFS-8791之后,Hadoop社区已升级DataNode.Essencethe的目的是通过降低DataNode Directory级别来优化DA操作引起的性能问题。
Datanode布局升级过程:
布局升级流程图:
升级期间DN布局储备目录结构:
HardLink的链接关联模式地图:
检查DatanOdelayOutversion代码,以及定义32 x 32目录结构的布局为-57。
datanodelayoutversion
我们发现在测试环境中发现了数据台布局升级。发现存在以下问题:DataNode创建了一个新的当前目录,并非常时间设置HardLink的过程。从布局开始需要5分钟的时间才能提供从布局提供读写服务,以提供布局的读取和写作服务。这对于我们的HDFS群集接近10,000个数据台不可接受,并且很难在计划的升级时间窗口中完成数据座升级。
因此,我们在HDFS 3.1.1中退休了HDFS-8791,并且数据台没有升级布局。测试发现,数据台从100块升级到200万个块仅花费了90秒至180秒,这被布局升级时间大大缩短了。
如何解决HDFS-8791带来的性能问题?
我们整理了HDFS 3.3.0的补丁版本,发现HDFS-14313计算了从内存中使用数据台的使用空间,并且不再使用DU操作,完美地解决了Datanode DU.的性能问题。您升级HDFS 3.1.1.1版本输入了HDFS-14313,该版本解决了DU Operation在DataNode升级后带来的IO性能问题。
在上图中,在数据座升级期间,删除块时,数据台不会真正删除块。取而代之的是,将块文件放置在磁盘块旁边的垃圾目录中。升级期间已删除的DATA。我们的集群磁盘的平均水位为80%,这已经非常紧张。在升级期间,垃圾中大量的块文件将对集群的稳定性构成巨大威胁。
考虑到我们的解决方案正在撤退,它正在滚动以降级而不是回滚,并且不会在垃圾桶中使用块。因此,我们使用脚本来删除垃圾中的块文件,这可以大大减轻其存储压力数据台上的磁盘。
以上是HDFS升级和降级过程中遇到的所有不兼容问题。除了不兼容之外,我们还引入了HDP HDFS 3.1.1中的一些Namenode RPC优化补丁。
HDFS 2.6.0版本FoldedTreeset的红色黑树数据结构导致一段时间后的Namenode减少。群集中出现了大量的静坐体,导致任务读取块失败。hadoop3.4.0 HDFS-13671解决了此问题,并将折叠式返回到原始的lightweightresizablegset链接列表数据结构。我们还引入了HDFS-13671补丁我们的升级HDP HDFS 3.1.1。
升级后,HDFS-13671的优化效果:群集体育体的数量已大大减少。
2021年3月,我们启动了离线数字仓库集群的HDFS升级项目,并在测试环境中为多个HDFS升级和降级钻机设置了多个HDFS群集。在升级过程中遇到的问题。
仅在HDFS升级中升级服务器终端。HDFS客户端也是HDFS 2.6.0。因此,我们必须确保业务可以通过HDFS 2.6.0客户端读取和编写HDFS 3.1.1群集。
我们正在测试环境,并设置了类似的在线环境HDFS测试集群。联合计算集团同事和业务部门共同计算,Hive,Spark,Olap(Kylin,Presto,Druid)和算法平台使用HDFS 2.6.0客户端来读写HDFS 3.1 3.1 3.1 3.1.1,模拟的在线环境模拟在线环境进行了完整的兼容性测试。确认HDFS 2.6.0客户端可以正常读取和写入HDFS 3.1.1群集,并且兼容性是正常的。
我们严格整理了HDFS升级和降级的命令,并整理了每个步骤的风险和预防措施。通过CM和Ambari API启动和停止HDFS服务。将这些操作整理到Python脚本中,以减少人类运营风险。
我们在HDFS升级过程中列出了要点检查,以确保可以尽快发现HDFS升级的问题,撤退以及底部对业务的影响。
我们已经在测试环境中进行了许多HDFS升级和降级练习,并完成了HDFS兼容性测试。该公司在公司内部撰写了许多Wiki文档以进行录制。
在确认测试环境HDFS升级和降级还可以之后,我们开始升级。
相关的特定里程碑在线:如下:
升级后,我们观察了离线数字仓库的各个集群。目前,HDFS服务正常运行。
我们花了一年的时间将10,000个离线仓库HDFS簇从CDH HDFS 2.6.0升级到HDP HDFS 3.1.1,并且成功将管理工具从CM转换为Ambari。
HDFS升级过程很长,但是好处很大。HDFS升级为随后的纱线,Hive/Spark和HBase组件奠定了基础。
在此基础上,我们可以继续做非常有意义的工作,继续在各个方面进行深入探索,例如稳定,性能和成本,并使用技术来为公司创造可见价值。
参考
原始:https://juejin.cn/post/7098140073710845965