当前位置: 首页 > 网络应用技术

Vivo Wan -scale HDFS群集升级HDFS 3.x练习

时间:2023-03-08 00:00:13 网络应用技术

  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