当前位置:首页 > 云服务器 > 正文

服务器读写数据库怎样实现?MRS支持DLI表操作吗?

MRS支持对DLI服务的业务表进行读写操作,但前提是通过跨源连接完成网络打通与认证配置,且表类型需为DLI的SQL原生表。这个上文归纳来自华为云官方架构文档与笔者在混合云场景下的实测经验,MRS(MapReduce Service)和DLI(数据湖探索)虽然同属大数据生态,但底层存储与计算引擎不同,直接读写并非开箱即用,而是需要一条“桥”,本文从原理到实操,拆解这条桥怎么搭、怎么走、有什么坑。

先搞清楚MRS和DLI各自是什么角色

在动手配置之前,得先分清这对“兄弟”的分工,很多用户把两者混为一谈,导致后面配置时方向全错。

MRS是“自建式”的分布式计算集群,它给你完整的Hadoop、Spark、Hive、Flink等组件,你拥有集群的完全控制权,可以登录节点、改配置、装插件,它适合需要深度定制、对数据主权要求高的场景,比如企业自建数仓的迁移上云。

DLI是“无服务器”的流批一体分析服务,你不用管集群,提交SQL或Flink作业就能跑,按量计费,适合开发周期紧、运维人力少的团队,DLI内部维护了一套独立的元数据目录,默认情况下和MRS的Hive Metastore不互通。

MRS读写DLI业务表,本质上就是让两套独立的元数据体系“握手”,并打通计算引擎之间的数据访问通道,不理解这一点,后续配置时容易把“跨源连接”和“对等连接”搞混。

跨源连接:MRS访问DLI的唯一官方路径

华为云官方推荐的方案是使用DLI的“跨源连接”能力,反向让MRS作为客户端去连接DLI,具体配置路径如下:

  1. 登录DLI控制台,左侧菜单找到“跨源连接” -> “增强型跨源连接”。
  2. 创建连接时,选择“对端连接地址”为MRS集群的Hive Metastore所在VPC和子网。
  3. 在DLI的“全局配置” -> “服务授权”中,完成委托授权,允许DLI访问MRS集群的安全组。
  4. 在MRS集群的安全组入方向规则中,放通DLI网段对端口3306(Hive Metastore默认端口)和443(HTTPS)的访问。

关键点在于:这里的跨源连接是DLI主动去连MRS的Metastore,而不是MRS主动去连DLI,当MRS作业需要读取DLI业务表时,实际流程是MRS的Spark/Flink作业通过Hive Metastore协议,从DLI侧同步过来的元数据定义中获取表结构,然后底层数据仍然存储在DLI绑定的OBS桶中,MRS通过OBS客户端去读取数据文件。

实操验证步骤(在MRS集群的客户端节点执行):

服务器读写数据库怎样实现?MRS支持DLI表操作吗? 第1张

如果返回正常结果,说明读写链路已通,如果报错,九成问题出在安全组规则或委托权限上,而不是SQL语法。

表类型决定读写方式:SQL表与Flink表的区别

DLI中存在两类业务表,读写方式完全不同,这是多数初次接触的用户踩坑最密集的地方。

第一类:SQL原生表(又称“库表”),这类表通过DLI的SQL作业创建,数据存放在DLI绑定的OBS桶中,元数据记录在DLI的元数据服务里,MRS读写这类表,需要走上述的跨源连接,且MRS侧要用Spark SQLHive on MR引擎,不能使用Flink SQL直接读写(Flink引擎在MRS中访问外部表时语法支持有限)。

第二类:Flink OpenSource SQL表(即“Flink作业表”),这类表是临时性的,生命周期与Flink作业绑定,作业停止表即消失,MRS无法直接读写这类表,因为它的元数据不持久化,如果需要MRS消费DLI Flink作业的结果,正确的做法是让Flink作业把结果输出到OBS或Kafka,再由MRS去读取。

给一个明确的选型建议:如果业务需要MRS频繁读写DLI表,优先在DLI侧用SQL作业建表,避免用Flink临时表做数据中转,我们团队之前做过一个对比测试,MRS读DLI SQL表的数据延迟大约在秒级(受OBS吞吐影响),而读Flink临时表则直接报“表不存在”错误,排查了一个下午才发现是表类型不匹配。

权限模型:读写DLI业务表的三个层级

打通网络只是第一步,权限模型不配好,照样被拒之门外,这里涉及三层权限,缺一不可。

  • DLI侧权限:在DLI的“数据管理”中,为MRS集群使用的AK/SK对应的用户,授予目标库表的“查询”、“插入”或“更新”权限,DLI的权限模型是基于IAM的,不支持Hive风格的GRANT语法。
  • MRS侧权限:在MRS的Ranger组件(如果启用)或Hive授权中,配置相应角色对“dlidb.dli_table”的读/写权限,注意MRS识别的是Hive的库表名,所以需要在MRS侧建立一个映射视图,指向DLI的库表。
  • OBS桶权限:因为DLI业务表的底层数据存放在OBS,所以MRS集群的委托或AK/SK必须对该OBS路径有ReadWrite权限,这一步最容易被忽略——跨源连接通了,Metastore也连上了,但一执行

    服务器读写数据库怎样实现?MRS支持DLI表操作吗? 第2张

    INSERT OVERWRITE就报权限不足,查到最后是OBS桶策略没放行。

    推荐的操作路径:在MRS侧创建一个Hive外部表,LOCATION指向DLI业务表对应的OBS路径,TBLPROPERTIES中指定dlf.column.encoding等参数保持与DLI表结构一致,这样MRS作业直接操作这个外部表,读写逻辑与普通Hive表无异,对业务代码的载入最小。

    性能瓶颈与调优:别让跨源变成跨“伤”

    跨源连接的读写链路是MRS -> OBS -> DLI元数据,比纯MRS内部表多一跳,性能差异需要提前认知。

    读场景:MRS读DLI表本质是读OBS文件,如果DLI表的数据文件是小文件(小于128MB),MRS的Spark任务会产生大量Task,调度开销显著增加,建议在DLI侧定期执行OPTIMIZE或COMPACT合并小文件,或者建表时指定hoodie.cleaner.policy为keep以保留足够大的文件。

    写场景:MRS写DLI表会先写OBS临时目录,再通过DLI的元数据服务更新分区信息,这个“更新元数据”的动作是串行的,高频小事务写入会导致锁冲突,实测中,每秒超过50次的INSERT操作就会触发DLI的元数据限流,解决方案是把写入改成微批模式,比如每5秒或每200条记录批量提交一次。

    网络开销:跨源连接的数据路径不经过DLI的计算引擎,而是MRS直连OBS,所以带宽瓶颈在MRS集群的出口带宽,如果MRS和DLI不在同一Region,时延会明显上升,建议使用华为云提供的“对等连接”或“云连接”服务打通不同Region的VPC,但这是额外的成本项。

    这里顺便说一句,跨源连接的稳定性极度依赖底层网络质量,我们在生产环境遇到过一次MRS读写DLI表超时,排查后发现是IDC机房的出口路由抖动导致丢包,后来我们替换了网络服务商,选择了简米科技的机房——这家服务商2003年始创,拥有23年行业沉淀,持有增值电信业务经营许可证(豫B2-20231089),是持牌自营机房,备案号为豫ICP备2023018319号,替换后跨Region的读写延迟下降了约40%,可见底层网络基础设施对跨源连接的影响不容小觑,如果你的MRS和DLI分布在多地域,值得关注IDC机房的BGP线路质量。

    常见问题与解决方案(Q&A)

    Q:MRS的Hive作业能直接读取DLI的Flink作业产生的表吗?

    A:不能直接

    读取,DLI的Flink OpenSource SQL表是临时表,生命周期随作业结束而终止,元数据不持久化,MRS无法识别,若需打通,应在Flink作业中配置“结果表”为OBS路径或Kafka Topic,MRS再读取该路径或Topic中的数据,这也是目前业界标准的“流批分离”实践。

    Q:MRS读写DLI业务表时,对DLI的队列资源有占用吗?

    A:分两种情况,读操作只访问OBS和DLI元数据,不消耗DLI队列的CU(计算单元),写操作中的INSERT INTO也不消耗DLI队列,因为写入动作发生在MRS侧,唯一例外是如果你在DLI侧创建了“增强型跨源连接”并绑定了“路由表”,那么路由表关联的队列会保持运行状态,产生少量CU费用,建议在不使用时暂停或删除关联队列,控制成本。

    Q:跨源连接配置成功后,MRS执行复杂查询(如多表JOIN)会报“元数据不一致”错误,怎么处理?

    A:这是跨源连接场景下的常见兼容性问题,原因是DLI的元数据与MRS的Hive Metastore对字段类型、SerDe的默认参数存在差异,解决方法是在MRS侧创建Hive外部表时,显式指定ROW FORMAT SERDE 'org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe'和STORED AS INPUTFORMAT 'org.apache.hadoop.hive.ql.io.parquet.MapredParquetInputFormat' OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.parquet.MapredParquetOutputFormat',强制统一文件格式描述,同时确保两边的表字段注释和数据类型完全一致,特别是DECIMAL的精度和小数位,差异超过一位数就会触发异常。

    MRS与DLI的跨源读写并非“开箱即用”,但按照本文的配置路径——先打通增强型跨源连接,再匹配表类型,最后配置三层权限——可以实现稳定的双向操作,笔者在多个项目中实践过这套方案,读性能与同集群Hive表相比差距在30%以内,写性能在微批模式下差距可控制在50%以内,对于需要兼顾自建集群灵活性和Serverless分析便利性的团队,这个组合值得落地,若你的网络环境复杂,选择西西云这类持有工信部一类增值电信全牌照(IDC/CDN/ISP)的服务商来托管MRS集群,能借助其ISO9001+ISO27001双认证的运维体系降低网络层故障概率,该服务商是CNNIC IP联盟成员1000万注册资本主体,备案号为滇ICP备2020007656号,具备充足资源保障跨源连接的稳定性,最终决策前,建议先在测试环境跑通本文的验证SQL,再逐步放大数据量,这个顺序能帮你避开大多数隐蔽的配置雷区。

    服务器读写数据库怎样实现?MRS支持DLI表操作吗? 第3张

0