本文为您介绍MaxCompute如何访问Hologres。
背景信息
Hologres是阿里云实时交互式分析产品。Hologres具备高并发地实时写入和查询数据的能力,同时支持数据无需迁移就能高性能加速分析MaxCompute数据,通过联邦分析Hologres实时数据与MaxCompute离线数据,实现离线实时一体化的数据仓库产品解决方案。您可以使用MaxCompute和Hologres的组合方案,来满足大规模离线分析、实时运营分析、交互式查询等多业务场景。
- MaxCompute SQL外部表的方式访问Hologres,详情请参见MaxCompute SQL外部表方式访问Hologres。 
- MaxCompute Spark方式访问Hologres,如下所示。 
前提条件
- 已准备MaxCompute相应的环境。 - 已开通MaxCompute服务并创建Hologres外部表的目标MaxCompute项目。 - 开通MaxCompute服务以及创建MaxCompute项目的操作指导,请参见开通MaxCompute和创建MaxCompute项目。 
- 已安装MaxCompute客户端。 - 安装MaxCompute客户端的操作指导,请参见安装并配置MaxCompute客户端。 
- 已搭建MaxCompute Spark开发环境。 - 本实践的MaxCompute Spark开发环境搭建在Linux操作系统下,使用的是Spark2.4.5发布包。具体的操作指导,请参见搭建MaxCompute Spark开发环境。 
 
- 已开通DataWorks服务。 - 开通DataWorks服务的操作指导,请参见开通DataWorks服务。 
- 已开通Hologres服务并连接HoloWeb。 - 开通Hologres并连接HoloWeb的操作指导,请参见开通Hologres和连接HoloWeb并执行查询。 
- 已下载PostgreSQL的JDBC驱动包。 - 本实践使用的是 - postgresql-42.2.16.jar驱动包,并且将该JAR包存放在Linux的/home/postgreSQL路径下。您可以通过PostgreSQL驱动官网下载。
MaxCompute SQL外部表方式访问Hologres
- 在Hologres管理控制台,选择目标实例并创建Hologres数据库 - mc_db_holo。- 创建Hologres数据库的操作指导,请参见创建Hologres数据库。  
- 在HoloWeb开发界面的 - mc_db_holo数据库下,执行如下语句创建Hologres表- mc_sql_holo并插入数据。- 创建Hologres表的操作指导,请参见创建Hologres表。  - CREATE TABLE mc_sql_holo( id INTEGER, name TEXT ); INSERT INTO mc_sql_holo VALUES (1,'zhangsan'), (2,'lisi'), (3,'wangwu') ;
- 在RAM访问控制台创建RAM角色 - AliyunOdpsHoloRole并修改信任策略配置内容。- 创建RAM角色并修改信任策略配置内容的操作指导,请参见创建RAM角色。 说明- 本实践创建的RAM角色可信实体类型为阿里云账号。 
- 添加 - AliyunOdpsHoloRoleRAM角色至Hologres实例并授权。- 添加RAM角色至Hologres实例并授权的操作指导,请参见添加RAM角色至Hologres实例并授权。 
- 在MaxCompute客户端,按照如下语句创建Hologres外部表 - mc_externaltable_holo。- create external table if not exists mc_externaltable_holo ( id int , name string ) stored by 'com.aliyun.odps.jdbc.JdbcStorageHandler' with serdeproperties ( 'odps.properties.rolearn'='acs:ram::13969******5947:role/aliyunodpsholorole') LOCATION 'jdbc:postgresql://hgprecn-cn-2r42******-cn-hangzhou-internal.hologres.aliyuncs.com:80/mc_db_holo?currentSchema=public&useSSL=false&table=mc_sql_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外部表。 
- 创建完成后,在MaxCompute客户端执行如下语句,获取Hologres外部表的数据。 - set odps.sql.split.hive.bridge=true; set odps.sql.hive.compatible=true; select * from mc_externaltable_holo limit 10;说明- SET操作的属性说明,详情请参见SET操作。 - 结果如下所示: - +----+----------+ | id | name | +----+----------+ | 1 | zhangsan | | 2 | lisi | | 3 | wangwu | +----+----------+
- 在MaxCompute客户端执行如下语句,写数据至Hologres外部表。 - set odps.sql.split.hive.bridge=true; set odps.sql.hive.compatible=true; insert into mc_externaltable_holo values (4,'alice');
- 在HoloWeb开发界面,查询Hologres表 - mc_sql_holo中数据。 - select * from mc_sql_holo;
MaxCompute Spark访问Hologres:Local提交模式
- 在HoloWeb开发界面的 - mc_db_holo数据库下,执行如下语句创建Hologres表- mc_jdbc_holo。- 创建Hologres表的操作指导,请参见创建Hologres表。 - CREATE TABLE mc_jdbc_holo( id INTEGER, name TEXT );
- 在Linux操作系统的/home/pythoncode路径下,新建Python文件 - holo_local.py。- Python脚本内容如下所示: - from pyspark.sql import SparkSession spark = SparkSession \ .builder \ .appName("Spark_local") \ .config("spark.eventLog.enabled","false") \ .getOrCreate() jdbcDF = spark.read.format("jdbc"). \ options( url='jdbc:postgresql://hgprecn-cn-2r42******-cn-hangzhou.hologres.aliyuncs.com:80/mc_db_holo', dbtable='mc_jdbc_holo', user='LTAI****************', password='********************', driver='org.postgresql.Driver').load() jdbcDF.printSchema()- 脚本内容参数说明如下所示: - url:使用Spark的JDBC连接方式,驱动为 - postgresql。- hgprecn-cn-2r42******-cn-hangzhou.hologres.aliyuncs.com:80:Hologres实例的公网访问域名。获取方式,请参见实例配置。 
- mc_db_holo:连接的Hologres数据库名称。本实践命名为mc_db_holo。 
 
- dbtable:Hologres源表名称。本实践命名为mc_jdbc_holo。 
- user:阿里云账号或RAM用户的AccessKey ID。您可以进入AccessKey管理页面获取AccessKey ID。 
- password:AccessKey ID对应的AccessKey Secret。您可以进入AccessKey管理页面获取AccessKey Secret。 
- driver:PostgreSQL驱动,固定值为org.postgresql.Driver。 
 
- 在Linux系统任意目录下,使用spark-submit提交本地作业。 - spark-submit --master local --driver-class-path /home/postgreSQL/postgresql-42.2.16.jar --jars /home/postgreSQL/postgresql-42.2.16.jar /home/pythoncode/holo_local.py- 查看Spark打印日志,打印Schema信息与Hologres中创建的 - mc_jdbc_holo表一致,即访问成功。 
MaxCompute Spark访问Hologres:Cluster提交模式
- 在HoloWeb开发界面的 - mc_db_holo数据库下,执行如下语句创建Hologres表- mc_jdbc_holo。- 创建Hologres表的操作指导,请参见创建Hologres表。 - CREATE TABLE mc_jdbc_holo( id INTEGER, name TEXT );
- 在Linux操作系统的/home/pythoncode路径下,新建Python文件 - holo_yarncluster.py。- Python脚本内容如下所示: - from pyspark.sql import SparkSession spark = SparkSession \ .builder \ .appName("Spark_yarn") \ .getOrCreate() jdbcDF = spark.read.format("jdbc"). \ options( url='jdbc:postgresql://hgprecn-cn-2r42******-cn-hangzhou-internal.hologres.aliyuncs.com:80/mc_db_holo', dbtable='mc_jdbc_holo', user='LTAI****************', password='********************', driver='org.postgresql.Driver').load() jdbcDF.printSchema()- 脚本内容参数说明如下所示: - url:使用Spark的JDBC连接方式,驱动为postgresql。 - hgprecn-cn-2r42******-cn-hangzhou-internal.hologres.aliyuncs.com:80:Hologres实例的经典网络访问域名。获取方式,请参见实例配置。 
- mc_db_holo:连接的Hologres数据库名称。本实践命名为mc_db_holo。 
 
- dbtable:Hologres源表名称。本实践命名为mc_jdbc_holo。 
- user:阿里云账号或RAM用户的AccessKey ID。您可以进入AccessKey管理页面获取AccessKey ID。 
- password:AccessKey ID对应的AccessKey Secret。您可以进入AccessKey管理页面获取AccessKey Secret。 
- driver:PostgreSQL驱动,固定值为org.postgresql.Driver。 
 
- 配置MaxCompute Spark客户端解压目录/home/spark2.4.5/spark-2.4.5-odps0.33.2/conf下的spark-defaults.conf文件。 - #需配置以下配置项 spark.hadoop.odps.project.name = <MaxCompute_Project_Name> spark.hadoop.odps.end.point = <Endpoint> spark.hadoop.odps.runtime.end.point = <VPC_Endpoint> spark.hadoop.odps.access.id = <AccessKey_ID> spark.hadoop.odps.access.key = <AccessKey_Secret> spark.hadoop.odps.cupid.trusted.services.access.list = <Hologres_Classic_Network> #以下内容保持不变 spark.master = yarn-cluster spark.driver.cores = 2 spark.driver.memory = 4g spark.dynamicAllocation.shuffleTracking.enabled = true spark.dynamicAllocation.shuffleTracking.timeout = 20s spark.dynamicAllocation.enabled = true spark.dynamicAllocation.maxExecutors = 10 spark.dynamicAllocation.initialExecutors = 2 spark.executor.cores = 2 spark.executor.memory = 8g spark.eventLog.enabled = true spark.eventLog.overwrite = true spark.eventLog.dir = odps://admin_task_project/cupidhistory/sparkhistory spark.sql.catalogImplementation = hive spark.sql.sources.default = hive- 配置文件参数说明如下所示: - MaxCompute_Project_Name:待访问MaxCompute项目的名称。 - 此处为MaxCompute项目名称,非工作空间名称。您可以登录MaxCompute控制台,左上角切换地域后,在左侧导航栏选择工作区 > 项目管理,查看MaxCompute项目名称。 
- AccessKey_ID:具备目标MaxCompute项目访问权限的AccessKey ID。 - 您可以进入AccessKey管理页面获取AccessKey ID。 
- AccessKey_Secret:AccessKey ID对应的AccessKey Secret。 
- Endpoint:MaxCompute项目所属地域的公网Endpoint。 - 各地域的公网Endpoint信息,请参见各地域Endpoint对照表(公网连接方式)。 
- VPC_Endpoint:MaxCompute项目所属地域的VPC网络的Endpoint。 - 各地域的VPC网络Endpoint信息,请参见各地域Endpoint对照表(阿里云VPC网络连接方式)。 
- Hologres_Classic_Network:Hologres经典网络类型。配置此项主要是为了在MaxCompute安全运行沙箱环境中,开启到对应Hologres实例的网络策略,否则MaxCompute集群无法访问外部服务。 
 
- 在Linux系统任意目录下,使用spark-submit提交作业。 - spark-submit --master yarn-cluster --driver-class-path /home/postgreSQL/postgresql-42.2.16.jar --jars /home/postgreSQL/postgresql-42.2.16.jar /home/pythoncode/holo_yarncluster.py- 提交后可以查看Spark打印日志,作业正常完成会打印作业的Logview以及Spark-UI的Jobview链接地址,可供开发者进一步诊断作业。 - 作业的Logview链接地址。  
- Spark-UI的Jobview链接地址。  
 
- 打开Logview链接,如果作业执行状态为success,选择,查看 - jdbcDF.printSchema()的返回结果。 - 查看Stdout,打印的Schema信息与Hologres中创建的 - mc_jdbc_holo表一致,即访问成功。 说明 说明- 您也可以打开Spark-UI的Jobview链接地址,进行作业的查看与诊断。 
MaxCompute Spark访问Hologres:DataWorks提交模式
- 在HoloWeb开发界面的 - mc_db_holo数据库下,执行如下语句创建Hologres表- mc_jdbc_holo。- 创建Hologres表的操作指导,请参见创建Hologres表。 - CREATE TABLE mc_jdbc_holo( id INTEGER, name TEXT );
- 配置MaxCompute Spark客户端解压目录/home/spark2.4.5/spark-2.4.5-odps0.33.2/conf下的spark-defaults.conf文件。 - #需配置以下配置项 spark.hadoop.odps.project.name = <MaxCompute_Project_Name> spark.hadoop.odps.end.point = <Endpoint> spark.hadoop.odps.runtime.end.point = <VPC_Endpoint> spark.hadoop.odps.access.id = <AccessKey_ID> spark.hadoop.odps.access.key = <AccessKey_Secret> spark.hadoop.odps.cupid.trusted.services.access.list = <Hologres_Classic_Network> #以下内容保持不变 spark.master = yarn-cluster spark.driver.cores = 2 spark.driver.memory = 4g spark.dynamicAllocation.shuffleTracking.enabled = true spark.dynamicAllocation.shuffleTracking.timeout = 20s spark.dynamicAllocation.enabled = true spark.dynamicAllocation.maxExecutors = 10 spark.dynamicAllocation.initialExecutors = 2 spark.executor.cores = 2 spark.executor.memory = 8g spark.eventLog.enabled = true spark.eventLog.overwrite = true spark.eventLog.dir = odps://admin_task_project/cupidhistory/sparkhistory spark.sql.catalogImplementation = hive spark.sql.sources.default = hive- 配置文件参数说明如下所示: - MaxCompute_Project_Name:待访问MaxCompute项目的名称。 - 此处为MaxCompute项目名称,非工作空间名称。您可以登录MaxCompute控制台,左上角切换地域后,在左侧导航栏选择工作区 > 项目管理,查看MaxCompute项目名称。 
- AccessKey_ID:具备目标MaxCompute项目访问权限的AccessKey ID。 - 您可以进入AccessKey管理页面获取AccessKey ID。 
- AccessKey_Secret:AccessKey ID对应的AccessKey Secret。 
- Endpoint:MaxCompute项目所属地域的公网Endpoint。 - 各地域的公网Endpoint信息,请参见各地域Endpoint对照表(公网连接方式)。 
- VPC_Endpoint:MaxCompute项目所属地域的VPC网络的Endpoint。 - 各地域的VPC网络Endpoint信息,请参见各地域Endpoint对照表(阿里云VPC网络连接方式)。 
- Hologres_Classic_Network:Hologres经典网络类型。配置此项主要是为了在MaxCompute安全运行沙箱环境中,开启到对应Hologres实例的网络策略,否则MaxCompute集群无法访问外部服务。 
 
- 登录DataWorks控制台。 
- 在左侧导航栏,单击工作空间列表。 
- 在工作空间列表页面,单击相应工作空间后操作列的快速进入 > 数据开发。 
- 新建PostgreSQL JDBC资源以及ODPS Spark节点。 - 在目标业务流程下,右键选择,在弹出的新建资源对话框,上传PostgreSQL JDBC的JAR包文件后,单击新建。  说明 说明- DataWorks业务流程创建,详情请参见创建业务流程。 
- DataWorks上的MaxCompute资源创建,详情请参见创建并使用MaxCompute资源。 
 
- 在目标业务流程下,右键选择,在新建资源对话框,填写资源名称后,单击新建。 - 本实践将资源名称命名为 - read_holo.py。 
- 按照如下脚本内容,编写 - read_holo.py,并单击 。 。- from pyspark.sql import SparkSession spark = SparkSession \ .builder \ .appName("Spark") \ .getOrCreate() jdbcDF = spark.read.format("jdbc"). \ options( url='jdbc:postgresql://hgprecn-cn-2r42******-cn-hangzhou-internal.hologres.aliyuncs.com:80/mc_db_holo', dbtable='mc_jdbc_holo', user='LTAI****************', password='********************', driver='org.postgresql.Driver').load() jdbcDF.printSchema()- 脚本内容参数说明如下所示: - url:使用Spark的JDBC连接方式,驱动为 - postgresql。- hgprecn-cn-2r42******-cn-hangzhou.hologres.aliyuncs.com:80:Hologres实例的公网访问域名。获取方式,请参见实例配置。 
- mc_db_holo:连接的Hologres数据库名称。本实践命名为mc_db_holo。 
 
- dbtable:Hologres源表名称。本实践命名为mc_jdbc_holo。 
- user:阿里云账号或RAM用户的AccessKey ID。您可以进入AccessKey管理页面获取AccessKey ID。 
- password:AccessKey ID对应的AccessKey Secret。您可以进入AccessKey管理页面获取AccessKey Secret。 
- driver:PostgreSQL驱动,固定值为org.postgresql.Driver。 
 
- 在目标业务流程下,右键选择,在新建节点对话框,填写节点名称后,单击确认。  
- 按照下图指引,配置 - spark_read_holo。 - 配置项: - spark.hadoop.odps.cupid.trusted.services.access.list。
- 配置项取值: - hgprecn-cn-2r42******-cn-hangzhou-internal.hologres.aliyuncs.com:80。Hologres经典网络类型。说明- 配置此项主要是为了在MaxCompute安全运行沙箱环境中,开启到对应Hologres实例的网络策略,否则MaxCompute集群无法访问外部服务。 
 
 
- 在目标业务流程画板,右键选择。 - 作业运行后,将会打印作业日志,其中包含MaxCompute作业的诊断信息、Logview链接地址、Spark-UI的Jobview链接地址等。  
- 打开Logview链接,如果作业执行状态为success,选择,查看 - jdbcDF.printSchema()的返回结果。 - 查看Stdout,打印的Schema信息与Hologres中创建的 - mc_jdbc_holo表一致,即访问成功。 说明 说明- 您也可以打开Spark-UI的Jobview链接地址,进行作业的查看与诊断。