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

简介: 本文总结了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+PAI+计算巢,5分钟搭建企业级AI问答知识库
本场景采用阿里云人工智能平台PAI、Hologres向量计算和计算巢,搭建企业级AI问答知识库。通过本教程的操作,5分钟即可拉起大模型(PAI)、向量计算(Hologres)与WebUI资源,可直接进行对话问答。
相关文章
|
1月前
|
SQL 分布式计算 DataWorks
DataWorks常见问题之maxcompute资源打开失败如何解决
DataWorks是阿里云提供的一站式大数据开发与管理平台,支持数据集成、数据开发、数据治理等功能;在本汇总中,我们梳理了DataWorks产品在使用过程中经常遇到的问题及解答,以助用户在数据处理和分析工作中提高效率,降低难度。
|
11天前
|
SQL 分布式计算 关系型数据库
实时数仓 Hologres产品使用合集之湖仓加速版查询maxcompute外部表,有什么优化途径吗
实时数仓Hologres的基本概念和特点:1.一站式实时数仓引擎:Hologres集成了数据仓库、在线分析处理(OLAP)和在线服务(Serving)能力于一体,适合实时数据分析和决策支持场景。2.兼容PostgreSQL协议:Hologres支持标准SQL(兼容PostgreSQL协议和语法),使得迁移和集成变得简单。3.海量数据处理能力:能够处理PB级数据的多维分析和即席查询,支持高并发低延迟查询。4.实时性:支持数据的实时写入、实时更新和实时分析,满足对数据新鲜度要求高的业务场景。5.与大数据生态集成:与MaxCompute、Flink、DataWorks等阿里云产品深度融合,提供离在线
|
2天前
|
数据采集 分布式计算 大数据
森马基于MaxCompute+Hologres+DataWorks构建数据中台
本次案例主要分享森马集团面对多年自建的多套数仓产品体系,通过阿里云MaxCompute+Hologres+DataWorks统一数仓平台,保障数据生产稳定性与数据质量,减少ETL链路及计算时间,每年数仓整体费用从300多万降到180万。
|
1月前
|
存储 运维 监控
飞书深诺基于Flink+Hudi+Hologres的实时数据湖建设实践
通过对各个业务线实时需求的调研了解到,当前实时数据处理场景是各个业务线基于Java服务独自处理的。各个业务线实时能力不能复用且存在计算资源的扩展性问题,而且实时处理的时效已不能满足业务需求。鉴于当前大数据团队数据架构主要解决离线场景,无法承接更多实时业务,因此我们需要重新设计整合,从架构合理性,复用性以及开发运维成本出发,建设一套通用的大数据实时数仓链路。本次实时数仓建设将以游戏运营业务为典型场景进行方案设计,综合业务时效性、资源成本和数仓开发运维成本等考虑,我们最终决定基于Flink + Hudi + Hologres来构建阿里云云原生实时湖仓,并在此文中探讨实时数据架构的具体落地实践。
飞书深诺基于Flink+Hudi+Hologres的实时数据湖建设实践
|
1月前
|
分布式计算 Java 数据库连接
实时数仓 Hologres产品使用合集之该创建外部表maxCompute的这个服务器列表如何解决
实时数仓Hologres是阿里云推出的一款高性能、实时分析的数据库服务,专为大数据分析和复杂查询场景设计。使用Hologres,企业能够打破传统数据仓库的延迟瓶颈,实现数据到决策的无缝衔接,加速业务创新和响应速度。以下是Hologres产品的一些典型使用场景合集。
|
1月前
|
存储 JSON BI
友盟+Hologres:千亿级多维分析平台建设实践
Hologres 在友盟+统计分析、营销等多个产品线使用,很好地满足了用户行为分析、人群圈选与洞察场景的多维度分析、灵活下钻、快速人群预估和圈选等分析需求,提供客户更流畅的数据查询和分析体验。
|
1月前
|
机器学习/深度学习 存储 分布式计算
机器学习PAI常见问题之将MaxCompute方法设置成永久如何解决
PAI(平台为智能,Platform for Artificial Intelligence)是阿里云提供的一个全面的人工智能开发平台,旨在为开发者提供机器学习、深度学习等人工智能技术的模型训练、优化和部署服务。以下是PAI平台使用中的一些常见问题及其答案汇总,帮助用户解决在使用过程中遇到的问题。
|
1月前
|
SQL 分布式计算 DataWorks
在DataWorks中,将MaxCompute的表映射成Hologres(Holo)外部表的语句
【2月更文挑战第32天】在DataWorks中,将MaxCompute的表映射成Hologres(Holo)外部表的语句
41 1
|
1月前
|
数据采集 分布式计算 DataWorks
DataWorks常见问题之dataworks引用maxcompute资源失败如何解决
DataWorks是阿里云提供的一站式大数据开发与管理平台,支持数据集成、数据开发、数据治理等功能;在本汇总中,我们梳理了DataWorks产品在使用过程中经常遇到的问题及解答,以助用户在数据处理和分析工作中提高效率,降低难度。
|
11天前
|
分布式计算 DataWorks NoSQL
MaxCompute产品使用合集之一张表如果想只保留近七天的数据,应该如何设置
MaxCompute作为一款全面的大数据处理平台,广泛应用于各类大数据分析、数据挖掘、BI及机器学习场景。掌握其核心功能、熟练操作流程、遵循最佳实践,可以帮助用户高效、安全地管理和利用海量数据。以下是一个关于MaxCompute产品使用的合集,涵盖了其核心功能、应用场景、操作流程以及最佳实践等内容。

热门文章

最新文章

相关产品

  • 实时数仓 Hologres