使用MaxCompute连接访问Hologres开发实践

本文涉及的产品
云原生大数据计算服务MaxCompute,500CU*H 100GB 3个月
简介: 很多客户使用MaxCompute和Hologres的集成方案同时满足大规模离线分析、实时运营分析、交互式查询及在线Serving等多业务场景。MaxCompute和Hologres之间支持相互读写对方数据,能够消除不必要的数据冗余,形成有效的数据分层并支持离线/实时统一视图和联合分析。本文重点介绍了MaxCompute如何访问Hologres数据的开发实践。

使用MaxCompute连接访问Hologres开发实践

前言

MaxCompute(大数据计算服务)是阿里云Serverless、全托管、支持多种分析场景的云数据仓库服务,Hologres(交互式分析)是阿里云实时交互式分析产品。Hologres具备高并发地实时写入和查询数据的能力,同时支持数据不迁移高性能加速分析MaxCompute数据的能力、联邦分析Hologres实时数据与MaxCompute离线数据,实现离线实时一体化的数据仓库产品解决方案。很多客户使用MaxCompute和Hologres的集成方案同时满足大规模离线分析、实时运营分析、交互式查询及在线Serving等多业务场景。

在Hologres的产品官方文档也给出了"联邦分析实时数据和离线数据"的典型应用场景说明。如下图所示:

image.png

从MaxCompute和Hologres数据交互链路上看,包含2个部分:

  • Hologres能够"直接读"MaxCompute:Hologres借助IMPORT FOREIGN SCHEMA语法批量创建MaxCompute外表,在Hologres侧并高性能加速分析保存在MaxCompute中的数据,例如,Hologres中可进行当日实时消费与MaxCompute中的近30天的消费数据对比分析;具体操作使用参见Hologres产品文档相关内容
  • MaxCompute能够"直接读"Hologres:当日实时数据进入Hologres中,在Hologres侧进行实时运营分析。到T+1时,MaxCompute的ETL逻辑、数据模型加工需要使用当日新增数据,此时Hologres的数据作为MaxCompute数仓的ODS层,MaxCompute无需数据导入,"直接读"取Hologres对应的数据表,完成增量+全量数据的模型加工。

本文将主要介绍在MaxCompute、Holgres的组合方案下,MaxCompute直读Hologres数据源的开发实践。

MaxCompute访问Hologres数据源包含以下2种手段:

  • MaxCompute SQL以外部表方式访问Hologres数据源
  • MaxCompute Spark以JDBC方式直接访问Hologres数据源


MaxCompute SQL外部表方式读写Hologres

详细内容参见MaxCompute产品文档-Hologres外部表部分,以下仅作简要介绍。

首先,在MaxCompute创建Hologres外部表。

在MaxCompute创建Hologres外部表时,您需要在建表DDL语句中指定StorageHandler,并配置JDBC驱动机制参数实现访问MC-Hologres数据源。建表语句定义如下:

create external table <table_name>(
  <col1_name> <data_type>,
  <col2_name> <data_type>,
  ......
)
stored by '<com.aliyun.odps.jdbc.JdbcStorageHandler>'
location '<jdbc:postgresql://<accessid>:<accesskey>@<endpoint>:<port>/<database>?currentSchema=<schema>&preferQueryMode=simple&table=<holo_table_name>/>' 
tblproperties (
  'mcfed.mapreduce.jdbc.driver.class'='org.postgresql.Driver', 
  'odps.federation.jdbc.target.db.type'='holo',
  ['odps.federation.jdbc.colmapping'='<col1:column1,col2:column2,col3:column3,...>']
);


示例如下:

create external table if not exists my_table_holo_jdbc
(
 id bigint,
 name string
)
stored by 'com.aliyun.odps.jdbc.JdbcStorageHandler' 
LOCATION 'jdbc:postgresql://LTAI4FzxmCwzb4BJqFce****:hKZMEFjdLe8ngRT5qp75UYufvT****@hgprecn-cn-oew210utf003-cn-hangzhou-internal.MC-Hologres.aliyuncs.com:80/mc_test?currentSchema=public&preferQueryMode=simple&useSSL=false&table=holo/'
TBLPROPERTIES (
  'mcfed.mapreduce.jdbc.driver.class'='org.postgresql.Driver',
  'odps.federation.jdbc.target.db.type'='holo',
  'odps.federation.jdbc.colmapping'='id:id,name:name'
);

创建的Hologres外部表将映射到指定的Hologres实例下db的某张表。

其次,创建完成后,使用MaxCompute SQL查询该外部表以获得Hologres表的数据

命令示例如下:


--访问MC-Hologres外部表需要添加如下属性。
set odps.sql.split.hive.bridge=true;
set odps.sql.hive.compatible=true;
--查询MC-Hologres外部表数据。
select * from my_table_holo_jdbc limit 10;

MaxCompute SQL同时可以写入数据到Hologres外部表,实现将MaxCompute加工后的消费数据直接导入Hologres,借助Hologres高性能存储的分析引擎,获得最佳的分析体验。

--访问MC-Hologres外部表需要添加如下属性。
set odps.sql.split.hive.bridge=true;
set odps.sql.hive.compatible=true;
--向MC-Hologres外部表插入数据。
insert into my_table_holo_jdbc values (12,'alice');
--查询MC-Hologres外部表数据。
select * from my_table_holo_jdbc;


MaxCompute Spark使用JDBC连接访问Hologres

MaxCompute原生集成Apache Spark分析引擎,借助Spark不仅可以直接分析MaxCompute数据,MaxCompute Spark还可以使用JDBC方式连接Hologres数据源。习惯使用Spark的用户,可以在Spark代码中实现更灵活的业务逻辑。

笔者分别使用以下3种提交模式验证Spark如何访问Hologres。关于MaxCompute Spark支持的几种模式,具体请参考MaxCompute产品官方文档,本文不作展开。

本地(Local)提交模式

熟悉MaxCompute Spark的用户经常使用这个模式做本地测试,验证代码逻辑是否正确。本文主要是用于验证、跑通Spark的JDBC方式能够正常访问Hologres数据源。


样例代码(PySpark):

spark=SparkSession \
    .builder \
    .appName("MC spark") \
    .getOrCreate()
jdbcDF=spark.read.format("jdbc"). \
options(
url='jdbc:postgresql://hgpostcn-cn-xxx-cn-shanghai.hologres.aliyuncs.com:80/test_holo',
dbtable='test',
user='xxx',# e.g.Access_idpassword='xxx', # e.g.Secret_keydriver='org.postgresql.Driver'). \
load()
jdbcDF.printSchema()

这里使用Spark的JDBC连接方式,通过postgresql驱动连接Hologres,访问test_holo数据库下的test表,打印出该表的schema信息。由于是本地测试,选择使用公网方式连接Hologres,其中url为hologres实例的公网访问域名。

使用spark-submit方式提交作业:

#本地Spark访问Holospark-submit --master local  --driver-class-path /drivers/postgresql-42.2.16.jar  --jars  /path/postgresql-42.2.16.jar   /path/read_holo.py

Postgresql的JDBC驱动可访问pg驱动官网下载

提交后查看spark打印日志:

image.png

打印的test表的schema信息与Holo中创建的test表schema一致,访问成功。其他关于JDBC数据源表的数据处理可以参考Apache Spark文档,本文主要介绍如何打通访问,其他处理逻辑不再展开。

MaxCompute集群(yarn-cluster)提交模式

样例代码(PySpark):

spark=SparkSession \
    .builder \
    .appName("MC spark") \
    .getOrCreate()
jdbcDF=spark.read.format("jdbc"). \
options(
url='jdbc:postgresql://hgpostcn-cn-xxx-cn-shanghai-internal.hologres.aliyuncs.com:80/test_holo',
dbtable='test',
user='xxx',# e.g.Access_idpassword='xxx', # e.g.Secret_keydriver='org.postgresql.Driver'). \
load()
jdbcDF.printSchema()

由于是集群提交模式,代码需要上传到MaxCompute云上集群运行,在集群中MaxCompute通过Hologres的经典网络域名以内网方式访问,这里不能使用公网地址。


配置MaxCompute Spark客户端(为MaxCompute适配进行了定制改造,相关介绍和下载,详见产品文档spark-defaults.conf,增加spark.hadoop.odps.cupid.trusted.services.access.list参数项,添加需要访问的目标hologres实例的经典网络域名地址。增加该配置,主要是为了在MaxCompute安全运行沙箱环境中开启到对应Hologres实例的网络策略,否则MaxCompute集群默认无法访问外部服务。

# OdpsAccount Info Settingspark.hadoop.odps.project.name=your_maxc_projectspark.hadoop.odps.access.id=xxxspark.hadoop.odps.access.key=xxx# endpointspark.hadoop.odps.end.point=http://service.cn.maxcompute.aliyun.com/apispark.hadoop.odps.runtime.end.point=http://service.cn.maxcompute.aliyun-inc.com/api#Access holo instancespark.hadoop.odps.cupid.trusted.services.access.list=hgprecn-cn-xxx-cn-shanghai-internal.hologres.aliyuncs.com:80


使用spark-submit方式提交作业:

#本地Spark访问Holospark-submit --master yarn-cluster  --driver-class-path /drivers/postgresql-42.2.16.jar  --jars  /path/postgresql-42.2.16.jar   /path/read_holo.py

提交后查看spark打印日志,作业正常完成会打印作业的Logview以及Spark-UI的Job View链接地址,可供开发者进一步诊断作业。

image.png

查看MaxCompute作业信息Logview、Spark-UI的Job View,验证作业执行成功。

查看日志有无报错,同时打开logview链接,查看作业执行状态。

image.png

查看作业状态为Success,同时点击master-0下的worker的StdOut输出按钮。

image.png

这里是spark代码中jdbcDF.printSchema()的返回结果,与预期一致,验证完成。


MaxCompute Spark同时提供Spark web-ui进行作业诊断,打开日志中的job view链接地址即可访问。

image.png

点击driver的stdout按钮,可查看应用的打印输出是否符合业务预期:

image.png

DataWorks提交模式

更多的用户使用DataWorks作为MaxCompute作业调度系统,通过DataWorks使用者也能够很方便地提交Spark作业到MaxCompute中实现访问Hologres的逻辑。

第一步,登录阿里云控制台,进入dataworks指定的工作空间,进入项目对应的数据开发模块。

image.png

第二步,创建/调整业务流程

1.在业务流程中的MaxCompute节点下,上传postgresql jdbc jar文件,以便spark程序引用驱动。注意,这里要选择使用文件(File)资源类型。

image.png

2.在资源节点下,上传python代码。本文提交了pyspark代码用于测试。

image.png

3.在业务流程画布中选择odps spark节点并填写spark作业的参数信息

  • 业务流程画布中选择MaxCompute引擎支持的ODPS Spark节点

image.png

  • 双击画布中ODPS Spark节点图标,编辑该任务节点,填写任务信息

本文使用了pyspark,因此该节点选择python语言,同时在"选择主python资源"选项中,选择刚才上传的python文件资源。

其中在配置项中为该任务添加hologres目标地址的网络白名单,地址仍然使用Hologres实例的经典网络域名,如图所示:

配置项:spark.hadoop.odps.cupid.trusted.services.access.list

配置项取值:hgpostcn-cn-xxx-cn-shanghai-internal.hologres.aliyuncs.com:80

同时,在"选择file资源"选项中,选择刚才上传到资源中的postgres的驱动jar文件。

image.png

点击保存并提交。

4.在dataworks运行ODPS Spark节点任务进行验证

点击"运行节点",在dataworks页面下方将打印作业日志,其中包含MaxCompute作业的诊断信息Logview链接地址。

image.png

查看日志有无报错,同时打开logview链接,查看作业执行状态。

image.png

查看作业状态为Success,同时点击master-0下的worker的StdOut输出按钮。

image.png

这里是spark代码中jdbcDF.printSchema()的返回结果,与预期一致,验证完成。

相关实践学习
基于MaxCompute的热门话题分析
本实验围绕社交用户发布的文章做了详尽的分析,通过分析能得到用户群体年龄分布,性别分布,地理位置分布,以及热门话题的热度。
一站式大数据开发治理平台DataWorks初级课程
DataWorks 从 2009 年开始,十ー年里一直支持阿里巴巴集团内部数据中台的建设,2019 年双 11 稳定支撑每日千万级的任务调度。每天阿里巴巴内部有数万名数据和算法工程师正在使用DataWorks,承了阿里巴巴 99%的据业务构建。本课程主要介绍了阿里巴巴大数据技术发展历程与 DataWorks 几大模块的基本能力。 产品官网 https://www.aliyun.com/product/bigdata/ide 大数据&amp;AI体验馆 https://workbench.data.aliyun.com/experience.htm#/ 帮助文档https://help.aliyun.com/zh/dataworks 课程目标 &nbsp;通过讲师的详细讲解与实际演示,学员可以一边学习一边进行实际操作,可以深入了解DataWorks各大模块的使用方式和具体功能,让学员对DataWorks数据集成、开发、分析、运维、安全、治理等方面有深刻的了解,加深对阿里云大数据产品体系的理解与认识。 适合人群 &nbsp;企业数据仓库开发人员 &nbsp;大数据平台开发人员 &nbsp;数据分析师 &nbsp;大数据运维人员 &nbsp;对于大数据平台、数据中台产品感兴趣的开发者
目录
相关文章
|
14天前
|
存储 SQL 运维
中国联通网络资源湖仓一体应用实践
本文分享了中国联通技术专家李晓昱在Flink Forward Asia 2024上的演讲,介绍如何借助Flink+Paimon湖仓一体架构解决传统数仓处理百亿级数据的瓶颈。内容涵盖网络资源中心概况、现有挑战、新架构设计及实施效果。新方案实现了数据一致性100%,同步延迟从3小时降至3分钟,存储成本降低50%,为通信行业提供了高效的数据管理范例。未来将深化流式数仓与智能运维融合,推动数字化升级。
中国联通网络资源湖仓一体应用实践
|
1月前
|
存储 消息中间件 分布式计算
Hologres实时数仓在B站游戏的建设与实践
本文介绍了B站游戏业务中实时数据仓库的构建与优化过程。为满足日益增长的数据实时性需求,采用了Hologres作为核心组件优化传统Lambda架构,实现了存储层面的流批一体化及离线-实时数据的无缝衔接。文章详细描述了架构选型、分层设计(ODS、DWD、DIM、ADS)及关键技术挑战的解决方法,如高QPS点查、数据乱序重写等。目前,该实时数仓已广泛应用于运营分析、广告投放等多个场景,并计划进一步完善实时指标体系、扩展明细层应用及研发数据实时解析能力。
Hologres实时数仓在B站游戏的建设与实践
|
2月前
|
存储 分布式计算 MaxCompute
Hologres实时湖仓能力入门实践
本文由武润雪(栩染)撰写,介绍Hologres 3.0版本作为一体化实时湖仓平台的升级特性。其核心能力包括湖仓存储一体、多模式计算一体、分析服务一体及Data+AI一体,极大提升数据开发效率。文章详细解析了两种湖仓架构:MaxCompute + Hologres实现离线实时一体化,以及Hologres + DLF + OSS构建开放湖仓架构,并深入探讨元数据抽象、权限互通等重点功能,同时提供具体使用说明与Demo演示。
|
2月前
|
SQL 弹性计算 运维
Hologres计算组实例&分时弹性入门实践
本文由骆撷冬(Hologres PD)撰写,围绕Hologres计算组实例与分时弹性的入门实践展开。内容分为三部分:第一部分介绍Hologres计算组实例的原理与架构,解决负载隔离、资源浪费、大任务和运维难题;第二部分演示计算组实例的入门实践,包括管理、授权、连接及监控等操作;第三部分讲解分时弹性的使用,涵盖配置方法、成本优化及监控告警。通过具体案例与操作步骤,帮助用户更好地理解和应用Hologres的弹性计算能力。
|
18天前
|
存储 消息中间件 Java
抖音集团电商流量实时数仓建设实践
本文基于抖音集团电商数据工程师姚遥在Flink Forward Asia 2024的分享,围绕电商流量数据处理展开。内容涵盖业务挑战、电商流量建模架构、流批一体实践、大流量任务调优及总结展望五个部分。通过数据建模与优化,实现效率、质量、成本和稳定性全面提升,数据质量达99%以上,任务性能提升70%。未来将聚焦自动化、低代码化与成本优化,探索更高效的流批一体化方案。
120 11
抖音集团电商流量实时数仓建设实践
|
2月前
|
SQL 分布式计算 数据挖掘
从湖仓分离到湖仓一体,四川航空基于 SelectDB 的多源数据联邦分析实践
川航选择引入 SelectDB 建设湖仓一体大数据分析引擎,取得了数据导入效率提升 3-6 倍,查询分析性能提升 10-18 倍、实时性提升至 5 秒内等收益。
从湖仓分离到湖仓一体,四川航空基于 SelectDB 的多源数据联邦分析实践
|
2月前
|
存储 安全 数据挖掘
天翼云:Apache Doris + Iceberg 超大规模湖仓一体实践
天翼云基于 Apache Doris 成功落地项目已超 20 个,整体集群规模超 50 套,部署节点超 3000 个,存储容量超 15PB
天翼云:Apache Doris + Iceberg 超大规模湖仓一体实践
|
2月前
|
SQL 存储 消息中间件
vivo基于Paimon的湖仓一体落地实践
本文整理自vivo互联网大数据专家徐昱在Flink Forward Asia 2024的分享,基于实际案例探讨了构建现代化数据湖仓的关键决策和技术实践。内容涵盖组件选型、架构设计、离线加速、流批链路统一、消息组件替代、样本拼接、查询提速、元数据监控、数据迁移及未来展望等方面。通过这些探索,展示了如何优化性能、降低成本并提升数据处理效率,为相关领域提供了宝贵的经验和参考。
543 3
vivo基于Paimon的湖仓一体落地实践
|
2月前
|
存储 SQL Java
Flink CDC + Hologres高性能数据同步优化实践
本文整理自阿里云高级技术专家胡一博老师在Flink Forward Asia 2024数据集成(二)专场的分享,主要内容包括:1. Hologres介绍:实时数据仓库,支持毫秒级写入和高QPS查询;2. 写入优化:通过改进缓冲队列、连接池和COPY模式提高吞吐量和降低延迟;3. 消费优化:优化离线场景和分区表的消费逻辑,提升性能和资源利用率;4. 未来展望:进一步简化用户操作,支持更多DDL操作及全增量消费。Hologres 3.0全新升级为一体化实时湖仓平台,提供多项新功能并降低使用成本。
320 1
Flink CDC + Hologres高性能数据同步优化实践
|
2月前
|
SQL 分布式计算 运维
StarRocks 在爱奇艺大数据场景的实践
本文介绍了爱奇艺大数据OLAP服务负责人林豪在StarRocks年度峰会上的分享,重点讲述了爱奇艺OLAP引擎的演进及引入StarRocks后的显著效果。在广告业务中,StarRocks替换Impala+Kudu后,接口性能提升400%,P90查询延迟缩短4.6倍;在“魔镜”数据分析平台中,StarRocks替代Spark达67%,P50查询速度提升33倍,P90提升15倍,节省4.6个人天。未来,爱奇艺计划进一步优化存算一体和存算分离架构,提升整体数据处理效率。
StarRocks 在爱奇艺大数据场景的实践

相关产品

  • 云原生大数据计算服务 MaxCompute