ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

CDP7迁移评估:从CDH到Cloudera Data Platform的核心变化与踩坑记录

CDP7迁移评估:从CDH到Cloudera Data Platform的核心变化与踩坑记录

2020年5月中旬,我参加了一场Cloudera厂商组织的技术交流活动,主题就是当时的明星产品CDP7。去之前说实话我并没有抱太大期望,毕竟我们生产环境里还跑着CDH5.16,CDH6也才刚稳定,突然冒出来一个CDP7,总觉得更像是商业层面的换名游戏。但一场会听下来,很多东西超出了我的预期,也让我把原本计划的升级路线重新翻出来审视了一遍。这篇记录就当作一次参后感,把我认为真正值得关注的技术点、厂商没有明说的潜在问题,以及我回来之后做过的验证测试,一次性都写清楚,给同样在评估CDP7的大数据平台团队一个参考。

1. 那天的现场与CDP7的来龙去脉

1.1 去之前的疑惑:CDH、HDP、CDP这三个词到底什么关系

先简单交代一下背景。Cloudera和Hortonworks这对老冤家,在2019年完成了合并,当时很多人都觉得奇怪,两个做了十年競品的大数据发行版厂商走到一起,产品线要怎么收场?一个手里握着CDH,一个手里握着HDP,总不能让客户二选一或者两边继续内耗。

所以合并之后,官方一直在放风说会推出一个统一的新平台,名字就叫Cloudera Data Platform,简称CDP。而我那次活动之前,对CDP的了解基本停留在官方博客和几篇新闻稿上,只知道它会把CDH和HDP的组件揉在一起,但具体怎么揉、版本号为什么不是CDH7或者HDP4,而是直接跳到CDP7,心里是有疑问的。

加上我们团队之前跟厂商做过几轮沟通,大家普遍的疑虑是:CDP7是不是就是CDH6套了个新外壳?Ranger和Sentry的权限体系到底怎么兼容?如果从CDH5直接跨到CDP7,Hive表和HDFS目录这些还认不认?这些问题在邮件和微信里很难讨论清楚,所以那个下午的交流活动,更像是带着一堆清单去现场找答案。

1.2 厂商正式给出一个明确说法:CDP7是合并后的统一基线

厂商那天的开场没有绕弯子,直接给了一个比较确定的定义:CDP7是Cloudera和Hortonworks合并之后,基于CDH6和HDP3两条技术线整合出来的新平台基线,后面不再分CDH或者HDP了,所有版本演化和新特性都集中到CDP这个产品上。

这句话听起来简单,但对当时的用户来说信息量不小。首先,这说明CDH6和HDP3都不是长期分支了,官方未来的新组件、新功能,主要会落到CDP的版本迭代里。其次,版本号选7而不是延续6.x,也有意打破了跟CDH的强绑定印象,产品叙事从“发行版”转向“数据平台”。

厂商还特意点了一个对我很关键的信息:CDP7里的Hadoop生态组件会统一到同一套基线版本,不再像以前CDH和HDP各自维护不同版本。这意味着你在CDP7里看到的Hive、Spark、Kafka,选择是收敛的,不会出现同一个发行版里组件版本五花八门的情况。对运维团队来说,这算是实打实的好消息,至少依赖冲突会少一些。

1.3 听完以后我的三点判断

整个交流活动持续了差不多两个小时,听完全程,我心里其实已经有了一个比较粗的结论。

第一,CDP7对企业数据平台的定位明显比CDH更高,不只是把组件升级一遍,而是强调统一数据平台、内置安全治理、以及多云和本地部署的灵活性。官方演示里的内容,很大篇幅都放在数据目录、权限策略、审计这些以前容易忽略的地方。

第二,从CDH5或CDH6往CDP7迁移,不是简单改个仓库地址再做次升级,需要把Hive Metastore、Sentry或Ranger里的权限策略、以及Kerberos和Sentry相关的配置都重新梳理。厂商的架构师现场也承认,最花时间的往往不是HDFS数据搬移,而是安全模型和Hive元数据的兼容。

第三,CDP7对于已经在用CDH6.x的团队来说,迁移成本相对可控;但如果还在CDH5.16甚至更低版本,那么中间最好先升到CDH6,再走CDP7的路径,直接跨版本跳跃风险比较大。这个判断后来在我自己做的测试里也得到了验证。

2. CDP7核心能力拆解:哪些地方动了真格

2.1 存储与计算层的统一逻辑

CDP7比较明显的一个变化,是在存储和计算层面做了一层更清晰的收敛。以前CDH和HDP各自维护各自的开源组件版本,用户比较头疼的是同一个开源项目在两个发行版里版本差很多,比如Hive,CDH6和HDP3用的版本就不一样。

CDP7把底层Hadoop基线提升到了我们熟悉的Hadoop 3.x系列,并且把Hive、HBase、Kafka、Spark这些核心组件都统一到同一条版本轨道上。用厂商的话说,这是统一基线,避免掉过去版本分裂带来的兼容问题。这个说法我举双手赞成,因为我们在实际运维中见过太多因为Hive和Hadoop库文件冲突导致的奇葩报错,根源就是发行版里外部依赖不统一。

它里面还引入了一个全新的存储方向,叫Ozone,当时还是预览特性。官方意思是未来对象存储和HDFS可以在一个数据湖里共存,不再需要两套集群。虽然当时我没有打算引入Ozone,但这条信息对长期规划很有参考价值,至少说明HDFS不会被轻易抛弃,而是在向云原生方向演进。

2.2 安全治理的整合:Ranger取代Sentry不是换皮

安全治理这块,是CDP7和旧版CDH差异最大的部分。CDH6时代,权限控制主要靠Sentry,Hortonworks那边推的是Ranger。两者虽然都是行级权限、角色授权,但策略模型、授权接口、审计日志是完全不同的两套东西。

合并后CDP7统一选择了Ranger,这是个很重要的决策。只从技术角度看,Ranger的插件机制覆盖面更广。它对Hive、HDFS、HBase、Kafka都有独立插件,还能管理数据目录级别的标签策略。Sentry在Hive和HDFS上做得不错,但对Kafka这种消息系统基本没有话事权,在大数据平台组件越来越多的情况下,Sentry逐渐成了瓶颈。

厂商现场也演示了Ranger的管理界面,我印象比较深的是它有一个审计模块,所有用户对Hive表和HDFS目录的访问动作都能汇总到一个界面里看,这点对运维排查问题很有用。以前想查谁读了哪张表,经常要到各个组件底层日志里去翻,效率很低。

但这里有个坑我要特别提醒:如果你现在用的是CDH5或CDH6,且已经把Sentry权限策略建得比较细,那迁移到CDP7时,Ranger不会自动把Sentry的策略平移过来。Sentry没有官方的自动迁移工具,常见做法是先在Ranger里重建用户、角色和策略,再逐步切换访问入口。这个过程最容易被低估,尤其是权限策略多的大型集群,光重配权限就能耗掉一个迭代周期的工时。

2.3 集群升级路径:从CDH6/HDP3到CDP7怎么切入

厂商当天给了一个比较清晰的升级逻辑。如果是从CDH6.3这个小版本开始,可以直接通过Cloudera Manager的升级向导走到CDP7,步骤相对平滑。如果还在CDH5.16或者更老的版本,那就不能直接跨代升级了,得先升级到CDH6.x,再做CDH到CDP的升级。如果是从HDP3过来,也有对应的工具和流程,但整体复杂程度会更高,因为两个发行版的目录结构和服务管理体系本来就不一样。

这个升级路径让我松了一口气,因为我们当时已经计划从CDH5.16升到CDH6,等于没有绕远路,只要把原计划执行完,后续再评估要不要升CDP7。不过厂商给的描述里有个前提:得先保证Cloudera Manager本身升级到支持CDP7的版本。CM版本和集群版本之间的匹配关系,这块特别容易踩坑。

另一个我当时很关注的问题是滚动升级能力。老CDH版本做滚动升级虽然也支持,但实际执行中经常因为HDFS DataNode的balance策略或者YARN上的长任务中断出问题。CDP7这次把滚动升级做得更平滑了一点,HDFS存量和增量块迁移可以同时进行,DataNode可以在线上下线,对运行中的任务影响小很多。不过厂商也提醒,如果Hive on MR任务还很多,建议先在低峰期做一次演练,别拿生产环境直接试。

3. 现场Demo印象与回来后的验证实验

3.1 演示中让我印象最深的三个镜头

厂商的现场Demo主要集中在三个地方。

第一个是安装部署。他们在几台虚拟机上一键拉起了一个小型CDP7集群,全程都是通过Cloudera Manager界面点选,从添加主机到各个服务启动完成,前后也就十几分钟。这个对老运维来说确实眼前一亮,因为以前手动部署一套CDH集群要花一下午,时间全耗在装包、改配置、逐个启动服务上。CM把这件事压缩到一个向导里,虽然生产环境不会这么天真,但整体流程确实成熟了不少。

第二个是Hive LLAP的交互式查询。厂商现场跑了几个SQL,其中最复杂的一条我记得是TPC-DS里比较典型的查询,扫描的数据量不大,但查询计划很复杂,用了不少Join和子查询。LLAP把热数据放在了分布式缓存里,响应速度确实比传统的MapReduce执行快很多,实际体验接近于跑在一个交互式数仓上。这个对业务侧有很大吸引力,因为以前用Hive跑一条临时查询,等十来分钟很正常。

第三个是Ranger里的一条权限控制演示。厂商先在Ranger里给一个测试用户配了只允许访问某个库下的几张表的策略,然后直接用Hive查询另一张表,马上就被拦截了。重点是整个过程没有做任何HiveServer2层面的二次配置,说明Ranger插件在服务端已经生效了。这个演示虽然简单,但很能说明问题,权限变更实时生效,这在老集群里要改Sentry配置然后重启服务才能实现,差距摆在那。

3.2 回来后我单独复现的最小化安装过程

活动结束后我没闲着,在公司一套空闲的测试机上进行了一次最小化的CDP7安装验证。我没有按照生产集群的规模来,只用了三台虚拟机,各分配了8核16 GB内存和100 GB磁盘,目标是搭一个可以跑HDFS、YARN、Hive on LLAP的小集群,顺便把Ranger权限验证做一遍。

我的具体步骤是这样的:先在每台机器上装好操作系统基础环境,关闭防火墙,设置好主机名映射;然后在一台节点上安装Cloudera Manager Server,版本选择支持CDP7的那一版。这里要注意,CDP7需要的CM版本和CDH6用的不是一个号段,不要用老版本的CM去加载CDP7的仓库,否则会出现无法识别parcel的报错。

CM Server装好之后,我通过Admin Console完成集群创建,再从CDP7的parcel仓库里把对应版本的安装包下载到本地,在CM里分发到所有节点。这个过程里比较耗时的是parcel分发,三台机器还好,生产环境几十个节点的话,尽量提前把parcel放在本地仓库里,不然部署时间很难看。

服务选择上我按测试需要选了HDFS、YARN、Hive、HBase以及Kafka,安全组件那边我启动了Ranger和Atlas。数据库方面,我在其中一台机器上部署了MariaDB,Hive Metastore、Ranger Admin、Atlas这些服务都需要独立的数据库实例,这一点在CDP7里也是老规矩,每个组件一个库,别有复用同一个库的偷懒想法,不然后面升级和问题定位都会很难办。

3.3 安装配置里最容易翻车的三个地方

第一次完整跑下来,我大概花了小半天。中间也遇到了几个问题,这里列出来给大家做个参考。

第一个坑是Hive Metastore的兼容性。CDP7自带的Hive版本是从CDH6和HDP3融合出来的,如果你在用旧的CDH5环境导出的Metastore schema,不能直接让它去连新版本的Hive Metastore。最稳妥的做法是先在CDH6的迁移路径里把Metastore schema升级到对应版本,再让CDP7接手。官方官方迁移文档里其实有schema升级脚本,但需要自己手动执行,不是装上CM就自动帮你做。

第二个很容易踩坑的地方是Kerberos配置。CDP7对Kerberos支持比旧版严格很多,如果你环境里已有的KDC主体和keytab没有同步到新集群,很多服务启动时会报“找不到principle”的错误。我建议在部署前把所有服务主体都先规划好,包括HDFS、Hive、HBase、Kafka各自的作用域,然后在CM里一次性导入,不要先启动服务再补认证。

第三个也是我单独验证Ranger时发现的:Ranger和Hive的插件之间需要保证版本匹配,而且要在HiveServer2主机上正确安装Ranger Hive Plugin,并在CM里启用Ranger的Hive服务策略。我一开始没启用,在Ranger里建了策略怎么都不生效,后来排查到插件没被CM识别才反应过来。所以如果策略配了但不生效,别急着怀疑Ranger本身,先去看对应组件节点上的Ranger插件进程是不是真的启动了。

4. 还没讲透的授权问题与选型思考

4.1 订阅模式变化,预算上要提前心理准备

这场活动里厂商对授权收费的细节没有展开讲,只在最后简单提了一句:CDP7会逐步向订阅制迁移,跟以前按节点数买License的模式不完全一样。这句话的含金量很高,懂的都懂。

CDH时代,很多团队买的是按节点数计算的永久License,付完钱之后,只要不升版本,可以一直用下去。CDP7如果走向订阅制,就意味着费用不只是取决于集群规模,也要考虑使用周期和增值组件数量。运维团队如果只是做技术评估,不跟财务沟通,很容易在续费或者新采购的时候被发现预算压根没留那个额度。

我的建议是,如果团队正在评估新技术平台,尽早把授权模型问题列入评估维度。不要只看开源组件本身免费的部分,还要看Cloudera Manager、Ranger、Atlas这些管理组件在订阅里的覆盖范围。平台运维不是只跑HDFS和YARN就完事了,安全和元数据治理在CDP7里是核心能力,这部分如果是订阅专属,成本一定要算进去。

4.2 不同处境下的团队该怎么选:三类情况的建议

结合我自己的评估经验,我大致把团队分成了三类。

第一类是仍在CDH5.16或者更低版本上运行,业务平稳,没有强烈的实时数仓或数据治理需求。我的建议是暂时不要碰CDP7,先把CDH6的升级路径走完。CDH6本身已经比较成熟,稳定性经过了验证,即便未来要升CDP7,从CDH6走也比从CDH5直接走平滑得多。

第二类是已经在CDH6.3或HDP3上,且对Ranger权限、Atlas数据血缘、以及云上扩展有明确诉求的团队。这类团队是CDP7的理想用户。因为他们已经站在同一个生态体系里,升级路径相对清晰,核心技术栈不需要推倒重来,收益则比较明显。

第三类是准备新搭建一套大数据平台的团队,不管以前用的是CDH还是HDP,新项目建议直接选择CDP7。理由是现在开源组件版本演进已经围绕CDP来做了,与其部署一套刚出生就开始过时的旧基线,不如直接用新平台,至少后续版本路线图是明确的。

4.3 这场会出来后的执行动作清单

前面讲了很多分析,最后放一个可以直接抄走的执行清单,都是我实际评估时会做的事情,按顺序分四步。

第一步,盘点现有环境。把所有CDH或HDP版本、组件清单、Hive表数量和权限策略数量都列出来,尤其要统计Sentry里的角色和权限规则,这块后面是要重建到Ranger里的,数量直接决定迁移工时。

第二步,搭一套最小化CDP7验证环境。不用完全复刻生产规模,先把HDFS、YARN、Hive、Ranger、Atlas跑通,然后把一部分Hive表和测试用户权限手动迁移进去,验证查询和权限控制是否符合预期。

第三步,做一次数据与元数据迁移演练。把Hive Metastore导出、HDFS distCp拷贝、Ranger策略导入这几个步骤完整走一遍。记录每个环节耗时,这样后续算生产迁移窗口时才有依据,不是凭感觉排计划。

第四步,走一次严格回滚演练。验证环境提前做好快照,模拟迁移过程中Hive查询报错、权限策略丢失、HDFS块校验失败这几类情况,看看回到旧集群需要多长时间。因为生产环境迁移最有价值的保障不是顺迁了多少,而是失败之后多久能恢复。

结尾的几点实在话

那次活动结束到现在也有一段时间了,我自己在测试环境里陆陆续续又跑了几次CDP7的流程,最大的体会是:这个平台在工程化程度上确实比老CDH时代前进了一大截,尤其是Ranger的权限模型、LLAP的查询体验、以及CM对整个集群生命周期的控制力,都是实打实能感受到的变化。

但我还是要给那些准备跟着厂商节奏立刻上CDP7的团队泼一点冷水。新平台的能力再强,你的数据规模、权限体系、团队维护水平是否跟得上,才是决定成败的关键。尤其Ranger和Atlas这类治理组件,它们需要长期有人维护策略和元数据规范,如果只是装上就扔在那不管,那它们能发挥的价值会大打折扣,甚至成为新的运维负担。

最后分享一个我在实际部署中觉得很顺手的小技巧:把CDP7相关的parcel包、镜像仓库和数据库初始化脚本提前准备好,放到内网的一个固定位置。这样不管以后是要扩展节点还是重建测试集群,都不用再对外网下载依赖。测试环境多建几次之后你就会发现,这个准备动作省下来的时间非常可观。

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进