本文为您介绍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角色可信实体类型为阿里云账号。
添加
AliyunOdpsHoloRole
RAM角色至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='LTAI5tJE8fuerxXdPPB****', password='Okr2kbBKueR3uRaHaBiUHw4r6****', 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='LTAI5tJE8fuerxXdPPB****', password='Okr2kbBKueR3uRaHaBiUHw4r6****', 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。
您可以进入AccessKey管理页面获取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。
您可以进入AccessKey管理页面获取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='LTAI5tJE8fuerxXdPPB****', password='Okr2kbBKueR3uRaHaBiUHw4r6****', 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链接地址,进行作业的查看与诊断。