使用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()的返回结果,与预期一致,验证完成。

相关实践学习
基于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的弹性计算能力。
|
5月前
|
存储 消息中间件 Java
抖音集团电商流量实时数仓建设实践
本文基于抖音集团电商数据工程师姚遥在Flink Forward Asia 2024的分享,围绕电商流量数据处理展开。内容涵盖业务挑战、电商流量建模架构、流批一体实践、大流量任务调优及总结展望五个部分。通过数据建模与优化,实现效率、质量、成本和稳定性全面提升,数据质量达99%以上,任务性能提升70%。未来将聚焦自动化、低代码化与成本优化,探索更高效的流批一体化方案。
373 12
抖音集团电商流量实时数仓建设实践
|
10月前
|
SQL 运维 网络安全
【实践】基于Hologres+Flink搭建GitHub实时数据查询
本文介绍了如何利用Flink和Hologres构建GitHub公开事件数据的实时数仓,并对接BI工具实现数据实时分析。流程包括创建VPC、Hologres、OSS、Flink实例,配置Hologres内部表,通过Flink实时写入数据至Hologres,查询实时数据,以及清理资源等步骤。
|
6月前
|
存储 SQL Java
Flink CDC + Hologres高性能数据同步优化实践
本文整理自阿里云高级技术专家胡一博老师在Flink Forward Asia 2024数据集成(二)专场的分享,主要内容包括:1. Hologres介绍:实时数据仓库,支持毫秒级写入和高QPS查询;2. 写入优化:通过改进缓冲队列、连接池和COPY模式提高吞吐量和降低延迟;3. 消费优化:优化离线场景和分区表的消费逻辑,提升性能和资源利用率;4. 未来展望:进一步简化用户操作,支持更多DDL操作及全增量消费。Hologres 3.0全新升级为一体化实时湖仓平台,提供多项新功能并降低使用成本。
515 1
Flink CDC + Hologres高性能数据同步优化实践
|
8月前
|
存储 弹性计算 运维
Hologres计算组实例&分时弹性入门实践
本文整理自 Hologres 产品团队的观秋老师关于Hologres 计算组实例&分时弹性入门实践的分享。内容主要为以下三部分: 1. Hologres 计算组实例介绍 2. 计算组实例入门实践 3. 分时弹性入门实践
220 16
|
8月前
|
DataWorks 关系型数据库 OLAP
云端问道5期实践教学-基于Hologres轻量实时的高性能OLAP分析
本文基于Hologres轻量实时的高性能OLAP分析实践,通过云起实验室进行实操。实验步骤包括创建VPC和交换机、开通Hologres实例、配置DataWorks、创建网关、设置数据源、创建实时同步任务等。最终实现MySQL数据实时同步到Hologres,并进行高效查询分析。实验手册详细指导每一步操作,确保顺利完成。
155 8
|
8月前
|
数据采集 机器学习/深度学习 DataWorks
DataWorks产品评测:大数据开发治理的深度体验
DataWorks产品评测:大数据开发治理的深度体验
358 1
|
9月前
|
DataWorks 数据挖掘 大数据
方案实践测评 | DataWorks集成Hologres构建一站式高性能的OLAP数据分析
DataWorks在任务开发便捷性、任务运行速度、产品使用门槛等方面都表现出色。在数据处理场景方面仍有改进和扩展的空间,通过引入更多的智能技术、扩展数据源支持、优化任务调度和可视化功能以及提升团队协作效率,DataWorks将能够为企业提供更全面、更高效的数据处理解决方案。

相关产品

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