使用实践:Hologres对接MaxCompute常见问题排查

本文涉及的产品
实时数仓Hologres,5000CU*H 100GB 3个月
简介: 本文总结了Hologres对接MaxCompute时的常见问题与处理方法。

大数据计算服务(MaxCompute,原名ODPS)是一种快速、完全托管的EB级数据仓库,致力于批量结构化数据的存储和计算,提供海量数据仓库的解决方案及分析建模服务。

Hologres是兼容PostgreSQL协议的实时交互式分析数据仓库,在底层与MaxCompute无缝连接,支持您使用创建外部表的方式实现MaxCompute加速查询,无冗余存储,无需导入导出数据,即可快速获取查询结果。您也可以导入数据至Hologres后,再进行查询。相比其他非大数据生态产品,Hologres导入导出数据的速度性能更佳。


本文总结了Hologres在对接MaxCompute时的常见问题以及对应的处理手段,以帮助您更好的使用Hologres。

common sense

Hologres与MaxCompute的区别:

MaxCompute

Hologres

使用场景

ETL加工,面向DWDDWS

在线查询、服务,面向ADS

用户使用

异步的MaxComputeJob/Instance/Task

同步的Query

集群资源

共享大集群

独享集群

计算引擎

基于StageFile设计的,持久化的,可扩展SQLEngine

基于内存的,超快速响应的SQLEngine,计算不落盘

调度方式

进程级别,运行时分配

轻量级线程,资源预留

扩展性

几乎不受限制

复杂查询尽量避免跨多节点数据shuffle

存储格式

列式

行式、列式共存,面向不同场景

存储成本

基于Pangu,成本低

基于Pangu,利用SSD做缓存加速,成本相对高

接口标准

MCSQL

PostgreSQL

Hologres外表和内表的选择场景

  • 新建外部表直接加速查询

外表不存储数据,数据还是存储在MaxCompute。外表没有索引,全靠cpu资源进行计算,因此外表比较适用于小数据量,低QPS的查询,见文档外表访问

  • 导入数据至Hologres进行加速查询

内表的数据存储在hologres,当有数据更新、复杂查询、高qps的查询时,建议导入内表,能充分发挥hologres底层的性能优势,见文档导入查询


报错信息: specified partitions count in MaxCompute table: exceeds the limitation of 512,

please add stricter partition filter or set axf_MaxCompute_partition_limit. 或者 Build desc failed: Exceeds the partition limitation of 512, current match xxx partitions.

报错原因:当前hologres只支持查询最多512个分区数

解决办法:

1、超过512个分区,请加上分区过滤条件。

2、可以将数据导入holo内表,则没有分区限制。

3、调整每次query命中的分区数大小,默认512,最大为1024,不建议调整太大,会影响查询性能

set hg_foreign_table_max_partition_limit =128;--1.1版本set axf_MaxCompute_partition_limit = xxx --0.10版本

补充说明:holo当前最多支持一级分区。


报错信息:Build desc failed: Exceeds the scan limitation of 200 GB, current scan xxx GB.

报错原因:超出查询中最大的底层数据扫描量为200GB的限制导致报错。200G是SQL命中的数据量,不是指表的数据量。但如全表扫描,则按照该表的大小计算,如按照分区字段查询,扫描的数据量为分区过滤完200G。

解决办法:

1、增加过滤条件,一次query在200GB以内可直接查询;

2、将MaxCompute表数据导入至holo中,再进行查询,详情见文档:MaxCompute导入查询(推荐)

3、设置参数调大数据量限制(不推荐使用):

set hg_experimental_foreign_table_max_scan_size =400

过分调大外表数据量限制,可以无法得到预期的性能,也可能造成实例OOM,影响正常使用。(不推荐使用)


查外表很慢

建议优化sql,见文档外表性能调优


报错:Build desc failed: failed to check permission: Currently not supported table type "view"

报错原因:目前暂时不支持MaxCompute的view。



报错:Build desc failed: failed to get foregin table split:MaxCompute-0010000: System internal error - get input pangu dir meta fai


报错原因:读取MaxCompute时,因为实例的capability配置报错导致。

解决方法:请在用户群联系Hologres值班开发恢复正确capability配置。


报错:ERROR:  status { code: SERVER_INTERNAL_ERROR message: "hos_exception: IO error: Failed to execute pangu open normal file ,err: PanguParameterInvalidException" }

报错原因:Hologres 1.1较低版本的 引擎 直读 MaxCompute pangu 加密数据存在问题,

解决办法:

1、在sql前面加以下参数绕过:

set hg_experimental_enable_access_MaxCompute_orc_via_holo = off;

2、升级实例至最新版本


报错信息:failed to import foregin schema:Failed to get MaxCompute table:Not enable schema evolution

报错原因:对MaxCompute表的元数据做了修改

解决办法:

1、更新了MaxCompute外表schema之后(eg:增加列,删除列操作),需要执行import foreign schema来做刷新。

2、如果执行了import foreign schema报错的话,需要重新建一次MaxCompute的表,再建外表(原因是:MaxCompute修改schema之后进入到schema evolution状态,我们无法读取这种的table,所以需要重新建一次MaxCompute的表)。


报错:Open ORC file failed for schema mismatch. Reader schema:

报错原因:MaxCompute的表为orc格式,然后表的decimal类型存储方式改变(一般是MaxCompute新加了decimal字段或者MaxCompute做了灰度配置变更),导致holo读MaxCompute的decimal类型出错

解决办法:1:执行set MaxCompute.storage.orc.enable.binary.decimal=false,重新导下MaxCompute数据。

2:将MaxCompute的表的decimal类型都改成double类型绕过,重新刷新一遍数据解决。


报错ERROR: failed to import foregin schema:Failed to get MaxCompute table:Not enable acid table

报错原因:MaxCompute表是transation表

解决方法:当前不支持MaxCompute的transation表,建议改成普通表


查外表报错:Request denied, may caused by server busy.

报错原因:外表资源占满,CPU 用量严重超出。

解决方法:

1.优化sql,让sql更加充分合理的使用资源,详情见外表优化手段

2.合理的使用一些参数改善:

先看一下当前的配置:show hg_experimental_foreign_table_executor_max_dop

  • 降低并发度:set hg_experimental_foreign_table_executor_max_dop = <并发数>(推荐降低一半)
  • 参数含义:外表单个执行节点读取外表数据的并发度;
  • 默认值:256
  • 范围:0-1024 (不建议低于实例节点数)
  • 修改后的风险:
  • 并发度太大可能造成实例oom ,导入/查询失败,甚至实例重启,以至于服务不可用
  • 并发度太小会导致外表查询/外表导入内表性能较差
  • 示例:set hg_experimental_foreign_table_executor_max_dop = 18

3.导入内表,内表可以设置索引,让性能更好。


导入时发生OOM,一般报错为:Query executor exceeded total memory limitation xxxxx: yyyy bytes used

报错原因:数据量太大或者导入逻辑太复杂,导致超出了内存限制。(说明:实例由多个节点组成,一个节点标准的内存上限是64G,节点内存会分为3部分,1/3计算,1/3缓存,1/3元数据。这里的报错是计算内存超了)

解决方案:

排查步骤1:查看执行计划

可以执行explain analyze sql看执行计划中具体的数据行数。当导入query包含查询,但部分table没有analyze,或者analyze过,但数据又有更新导致不准确,导致查询优化器决策join order有误,会引起内存开销多高。

解决方法:对所有参与的内表、外表执行analyze tablename,更新表的统计元信息,可以帮助查询优化器生成更优的执行计划。

排查步骤2:设置单行导入条数

当表的列数较多,单行数据量较大时,单次读取的数据量会更大,通过在sql前加以下参数来控制单词读取数据行数,可以有效减少OOM情况

set hg_experimental_query_batch_size = 1024;--默认为8192


insert into holo_table select * from mc_table;


排查步骤3:降低导入的并发度。

降低导入并发度,也会有效减少导入过程中的内存开销,并发度通过参数hg_experimental_foreign_table_executor_max_dop控制,默认为实例的Core数,可以在导入时设置更小的dop参数,降低导入的内存使用。

set hg_experimental_foreign_table_executor_max_dop = 8;


insert into holo_table select * from mc_table;

排查步骤4:排查外表重复数据是否过多

以上操作都做完了,还是导入不了,如果使用的是insert on conflict,排查是否外表重复数据太多,重复数据太多也会导致导入性能不好,可以现在是MaxCompute做一下去重,再导入。

排查步骤5:升级新版本动态调整内存

可以升级至1.1.24版本,新版本会对内存进行动态调整,后台会实时刷新当前内存水位,若是有空闲,则会分配更多内存给计算使用。

排查步骤6:扩容

以上步骤都做完了,需要扩容了!


报错:Timestamp overflow detected while converting timestampfrom orc VectorBatch to arrow

报错原因:MaxCompute使用 tunnel 写入后,holo读MaxCompute Arrow的接口存在问题。

解决办法:暂时没有好的解法,需要用户改为 在MaxCompute将timestamp改成DateTime类型


报错:query next from foreign table executor failed,userinfao fail

报错原因:当前MaxCompute表是存储加密的表,在1.1以下版本还不支持

解决办法:升级至1.1版本支持存储加密的表



查外部表报错:You have NO privilege 'MaxCompute:Select' on xxx

  • 问题原因当前账号不具备MaxCompute表的查询(Select)权限。
  • 解决方法需要MaxCompute管理员在MaxCompute中授予当前账号查询表(Select)的权限,具体操作请参见授权


查外表报错:The sensitive label of column 'xxx' is 2, but your effective label is 0

问题原因当前账号只有MaxCompute表的部分字段权限。

解决方法:

1)核对有权限的账号和报错的账号是否为同一个账号,若是真的没有权限,可以去申请MaxCompute的权限,或者只过滤有权限的字段查询。获取MaxCompute表全部字段的权限,具体操作请参见授权

2)若是有权限,并且也只查询了有权限的字段,在实例比较老的版本可能遇见了bug,您可以在执行的Query前增加如下参数解决报错问题。

set hg_experimental_enable_MaxCompute_executor=on;set hg_experimental_enable_query_master=on;


更多关于MaxCompute的权限问题,可以前往文档权限


更多问题可以通过文档查看


了解Hologres:https://www.aliyun.com/product/bigdata/hologram

合集.png


相关实践学习
基于Hologres轻量实时的高性能OLAP分析
本教程基于GitHub Archive公开数据集,通过DataWorks将GitHub中的项⽬、行为等20多种事件类型数据实时采集至Hologres进行分析,同时使用DataV内置模板,快速搭建实时可视化数据大屏,从开发者、项⽬、编程语⾔等多个维度了解GitHub实时数据变化情况。
相关文章
|
5月前
|
存储 消息中间件 分布式计算
Hologres实时数仓在B站游戏的建设与实践
本文介绍了B站游戏业务中实时数据仓库的构建与优化过程。为满足日益增长的数据实时性需求,采用了Hologres作为核心组件优化传统Lambda架构,实现了存储层面的流批一体化及离线-实时数据的无缝衔接。文章详细描述了架构选型、分层设计(ODS、DWD、DIM、ADS)及关键技术挑战的解决方法,如高QPS点查、数据乱序重写等。目前,该实时数仓已广泛应用于运营分析、广告投放等多个场景,并计划进一步完善实时指标体系、扩展明细层应用及研发数据实时解析能力。
Hologres实时数仓在B站游戏的建设与实践
|
6月前
|
存储 分布式计算 MaxCompute
Hologres实时湖仓能力入门实践
本文由武润雪(栩染)撰写,介绍Hologres 3.0版本作为一体化实时湖仓平台的升级特性。其核心能力包括湖仓存储一体、多模式计算一体、分析服务一体及Data+AI一体,极大提升数据开发效率。文章详细解析了两种湖仓架构:MaxCompute + Hologres实现离线实时一体化,以及Hologres + DLF + OSS构建开放湖仓架构,并深入探讨元数据抽象、权限互通等重点功能,同时提供具体使用说明与Demo演示。
|
6月前
|
SQL 弹性计算 运维
Hologres计算组实例&分时弹性入门实践
本文由骆撷冬(Hologres PD)撰写,围绕Hologres计算组实例与分时弹性的入门实践展开。内容分为三部分:第一部分介绍Hologres计算组实例的原理与架构,解决负载隔离、资源浪费、大任务和运维难题;第二部分演示计算组实例的入门实践,包括管理、授权、连接及监控等操作;第三部分讲解分时弹性的使用,涵盖配置方法、成本优化及监控告警。通过具体案例与操作步骤,帮助用户更好地理解和应用Hologres的弹性计算能力。
|
2月前
|
存储 SQL 分布式计算
MaxCompute x 聚水潭:基于近实时数仓解决方案构建统一增全量一体化数据链路
聚水潭作为中国领先的电商SaaS ERP服务商,致力于为88,400+客户提供全链路数字化解决方案。其核心ERP产品助力企业实现数据驱动的智能决策。为应对业务扩展带来的数据处理挑战,聚水潭采用MaxCompute近实时数仓Delta Table方案,有效提升数据新鲜度和计算效率,提效比例超200%,资源消耗显著降低。未来,聚水潭将进一步优化数据链路,结合MaxQA实现实时分析,赋能商家快速响应市场变化。
129 0
|
5月前
|
存储 消息中间件 Java
抖音集团电商流量实时数仓建设实践
本文基于抖音集团电商数据工程师姚遥在Flink Forward Asia 2024的分享,围绕电商流量数据处理展开。内容涵盖业务挑战、电商流量建模架构、流批一体实践、大流量任务调优及总结展望五个部分。通过数据建模与优化,实现效率、质量、成本和稳定性全面提升,数据质量达99%以上,任务性能提升70%。未来将聚焦自动化、低代码化与成本优化,探索更高效的流批一体化方案。
380 12
抖音集团电商流量实时数仓建设实践
|
6月前
|
存储 SQL Java
Flink CDC + Hologres高性能数据同步优化实践
本文整理自阿里云高级技术专家胡一博老师在Flink Forward Asia 2024数据集成(二)专场的分享,主要内容包括:1. Hologres介绍:实时数据仓库,支持毫秒级写入和高QPS查询;2. 写入优化:通过改进缓冲队列、连接池和COPY模式提高吞吐量和降低延迟;3. 消费优化:优化离线场景和分区表的消费逻辑,提升性能和资源利用率;4. 未来展望:进一步简化用户操作,支持更多DDL操作及全增量消费。Hologres 3.0全新升级为一体化实时湖仓平台,提供多项新功能并降低使用成本。
528 1
Flink CDC + Hologres高性能数据同步优化实践
|
8月前
|
存储 弹性计算 运维
Hologres计算组实例&分时弹性入门实践
本文整理自 Hologres 产品团队的观秋老师关于Hologres 计算组实例&分时弹性入门实践的分享。内容主要为以下三部分: 1. Hologres 计算组实例介绍 2. 计算组实例入门实践 3. 分时弹性入门实践
222 16
|
8月前
|
DataWorks 关系型数据库 OLAP
云端问道5期实践教学-基于Hologres轻量实时的高性能OLAP分析
本文基于Hologres轻量实时的高性能OLAP分析实践,通过云起实验室进行实操。实验步骤包括创建VPC和交换机、开通Hologres实例、配置DataWorks、创建网关、设置数据源、创建实时同步任务等。最终实现MySQL数据实时同步到Hologres,并进行高效查询分析。实验手册详细指导每一步操作,确保顺利完成。
160 8
|
4月前
|
存储 消息中间件 OLAP
基于 Flink+Paimon+Hologres 搭建淘天集团湖仓一体数据链路
本文整理自淘天集团高级数据开发工程师朱奥在Flink Forward Asia 2024的分享,围绕实时数仓优化展开。内容涵盖项目背景、核心策略、解决方案、项目价值及未来计划五部分。通过引入Paimon和Hologres技术,解决当前流批存储不统一、实时数据可见性差等痛点,实现流批一体存储与高效近实时数据加工。项目显著提升了数据时效性和开发运维效率,降低了使用门槛与成本,并规划未来在集团内推广湖仓一体架构,探索更多技术创新场景。
1143 3
基于 Flink+Paimon+Hologres 搭建淘天集团湖仓一体数据链路
|
10月前
|
SQL 运维 网络安全
【实践】基于Hologres+Flink搭建GitHub实时数据查询
本文介绍了如何利用Flink和Hologres构建GitHub公开事件数据的实时数仓,并对接BI工具实现数据实时分析。流程包括创建VPC、Hologres、OSS、Flink实例,配置Hologres内部表,通过Flink实时写入数据至Hologres,查询实时数据,以及清理资源等步骤。

相关产品

  • 实时数仓 Hologres