MaxCompute如何访问Hologres

更新时间:
复制 MD 格式

本文介绍MaxCompute如何访问Hologres。

背景信息

Hologres是阿里云实时交互式分析产品。Hologres具备高并发地实时写入和查询数据的能力,同时支持数据无需迁移就能高性能加速分析MaxCompute数据,通过联邦分析Hologres实时数据与MaxCompute离线数据,实现离线实时一体化的数据仓库产品解决方案。可以使用MaxComputeHologres的组合方案,来满足大规模离线分析、实时运营分析、交互式查询等多业务场景。

前提条件

  • 已准备MaxCompute相应的环境。

  • 已开通DataWorks服务。

    开通DataWorks服务的操作指导,请参见开通DataWorks服务

  • 已开通Hologres服务并连接HoloWeb。

    开通Hologres并连接HoloWeb的操作指导,请参见开通Hologres连接HoloWeb并执行查询

  • 已下载PostgreSQLJDBC驱动包。

    本实践使用的是postgresql-42.2.16.jar驱动包,并且将该JAR包存放在Linux/home/postgreSQL路径下。

MaxCompute SQL外部表方式访问Hologres

  1. Hologres管理控制台,选择目标实例并创建Hologres数据库mc_db_holo创建Hologres数据库的操作指导,请参见创建Hologres数据库

  2. HoloWeb开发界面的mc_db_holo数据库下,执行如下语句创建Hologresmc_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')
    ;
  3. RAM访问控制台创建RAM角色AliyunOdpsHoloRole并修改信任策略配置内容。

    创建RAM角色并修改信任策略配置内容的操作指导,请参见创建RAM角色

    说明

    本实践创建的RAM角色可信实体类型为阿里云账号

  4. 添加AliyunOdpsHoloRoleRAM角色至Hologres实例并授权。

    添加RAM角色至Hologres实例并授权的操作指导,请参见添加RAM角色至Hologres实例并授权

  5. 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外部表

  6. 创建完成后,在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   |
    +----+----------+
  7. MaxCompute客户端执行如下语句,写数据至Hologres外部表。

    set odps.sql.split.hive.bridge=true;
    set odps.sql.hive.compatible=true;
    insert into mc_externaltable_holo values (4,'alice');
  8. HoloWeb开发界面,查询Hologresmc_sql_holo中数据。

    select * from mc_sql_holo;

MaxCompute Spark访问Hologres:Local提交模式

  1. HoloWeb开发界面的mc_db_holo数据库下,执行如下语句创建Hologresmc_jdbc_holo

    创建Hologres表的操作指导,请参见创建Hologres

    CREATE TABLE mc_jdbc_holo(
            id INTEGER,
            name TEXT
    );
  2. 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:使用SparkJDBC连接方式,驱动为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

  3. 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提交模式

  1. HoloWeb开发界面的mc_db_holo数据库下,执行如下语句创建Hologresmc_jdbc_holo

    创建Hologres表的操作指导,请参见创建Hologres

    CREATE TABLE mc_jdbc_holo(
            id INTEGER,
            name TEXT
    );
  2. 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:使用SparkJDBC连接方式,驱动为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

  3. 配置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信息,请参见VPC Endpoint

    • Hologres_Classic_Network:Hologres经典网络类型。配置此项主要是为了在MaxCompute安全运行沙箱环境中,开启到对应Hologres实例的网络策略,否则MaxCompute集群无法访问外部服务。

  4. 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-UIJobview链接地址,可供开发者进一步诊断作业。

    • 作业的Logview链接地址。

      22/04/07 10:10:11 INFO Client: Submitting application application_1xxx_1600131562 to ResourceManager
      22/04/07 10:10:11 INFO YarnClientImpl: post: local resource scheme: tempresource, path: /2a7de2c1e7f051b656591322941157a.jar
      22/04/07 10:10:11 INFO YarnClientImpl: post: local resource scheme: tempresource, path: /6e483606b633aaf08f4a7e6bfbe98116.zip
      22/04/07 10:10:11 INFO YarnClientImpl: post: local resource scheme: tempresource, path: /22489af297da5c56d2ce533c9dc0d259.py
      22/04/07 10:10:11 INFO YarnClientImpl: post: local resource scheme: tempresource, path: /b2d6ef4c6f6dc428b9c5bd38aacfb7f1.zip
      22/04/07 10:10:11 INFO YarnClientImpl: post: local resource scheme: tempresource, path: /b6fc4b0a15046d1168b70e10b09ca334.zip
      22/04/07 10:10:11 INFO YarnClientImpl: post: local resource scheme: tempresource, path: /b5348e4c57f3d598043621739a41ed82.zip
      22/04/07 10:10:11 INFO SubmitJobUtil: submitting CupidTask with ALIYUN type, operator: startam
      22/04/07 10:10:11 INFO YarnClientImpl: transformAppCtxAndStartAM instance id 20220407021011976ggjr01ms2
      22/04/07 10:10:12 INFO YarnClientImplUtil: logview url: http://logview.odps.aliyun.com/logview/?h=http://service.cxxx.aliyun.com/api&p=xxx&i=2022xxx
      011976ggjr01ms2&token=dTFGWXZBSkEvNW84UVdVdUhVZm5V0YzcEVVPSxPRFBTX09CTzpwNF8yODAzMTY1MzI0NjY2ODI1MTIsMTY0OTU1NjYxMix7IlN0YXRlbWVudCI6W3siQWN0aW9uIjpbIm9kcHM6UijpbIm9kcHM6UmVhZCJdLCJFZmZlY3QiOiJBbGxvdyIsIlJlc291cmNlIjpbImFjczoiOiJhY3M6b2RwczoqOioiXX1dLCJWZXJzaW9uIjoiMSJ9
      iJBbGxvdyIsIlJlc291cmNlIjpbImFjczoiOiJhY3M6b2RwczoqOioiXX1dLCJWZXJzaW9uIjoiMSJ9xxx
      22/04/07 10:10:12 INFO CupidUtil: CupidTask status changed: Ready, expecting next status: Waiting/Running/Success
    • Spark-UIJobview链接地址。

      client token: N/A
      diagnostics: N/A
      ApplicationMaster host: 33.xxx.xxx.2
      ApplicationMaster RPC port: 8xxx
      queue: queue
      start time: 1649297412218
      final status: SUCCEEDED
      tracking URL: http://jobview.odps.aliyun.com/proxyview/jobview/?h=http://service.cn-hangzhou.maxcompute.aliyun.com/api&p=xxx&i=2022xxx1976ggjr01ms2&t=spark&id=application_1649xxxxxxxxx9_16001315628&metaname=2022xxxx-xxxxx1976ggjr01ms2&token=cXNmL3dvZFFlемY0aTF4MVpDTCe9WczY5K2k4PSxPRFBTX09CTzpwNF8yODAzMTY1MzI0NjY2ODI1MTlsMTY0OTU1NjY4OCx7IlN0YXRlbWVudCI6W3siQWN0aW9uIjpbIM9kcHM6KiJdLCJFZmZlY3QiOiJBbGxvdyIsIlJlc291cmNlIjpbImFjczpvZHBzOio6KjoqIl19XSwiVmVyc2lvbiI6IjEifQ==
           user: user
  5. 打开Logview链接,如果作业执行状态为success,选择Job Details > master-0 > StdOut,查看jdbcDF.printSchema()的返回结果。

    查看Stdout,打印的Schema信息与Hologres中创建的mc_jdbc_holo表一致,即访问成功。

    root
     |-- id: integer (nullable = true)
     |-- name: string (nullable = true)
    说明

    您也可以打开Spark-UIJobview链接地址,进行作业的查看与诊断。

MaxCompute Spark访问Hologres:DataWorks提交模式

  1. HoloWeb开发界面的mc_db_holo数据库下,执行如下语句创建Hologresmc_jdbc_holo

    创建Hologres表的操作指导,请参见创建Hologres

    CREATE TABLE mc_jdbc_holo(
            id INTEGER,
            name TEXT
    );
  2. 配置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信息,请参见VPC Endpoint

    • Hologres_Classic_Network:Hologres经典网络类型。配置此项主要是为了在MaxCompute安全运行沙箱环境中,开启到对应Hologres实例的网络策略,否则MaxCompute集群无法访问外部服务。

  3. 登录DataWorks控制台

  4. 在左侧导航栏,单击工作空间列表

  5. 工作空间列表页面,单击相应工作空间后操作列的快速进入 > 数据开发

  6. 新建PostgreSQL JDBC资源以及ODPS Spark节点。

    1. 在目标业务流程下,右键选择 新建资源 > MaxCompute > File,在弹出的新建资源对话框,上传PostgreSQL JDBCJAR包文件后,单击新建

      说明
    2. 在目标业务流程下,右键选择新建资源 > MaxCompute > Python,在新建资源对话框,填写资源名称后,单击新建

      本实践将资源名称命名为read_holo.py

    3. 按照如下脚本内容,编写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:使用SparkJDBC连接方式,驱动为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

    4. 在目标业务流程下,右键选择新建节点 > ODPS Spark,在新建节点对话框,填写节点名称后,单击确认

    5. 配置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集群无法访问外部服务。

  7. 在目标业务流程画板,右键选择spark_read_holo > 运行节点

    作业运行后,将会打印作业日志,其中包含MaxCompute作业的诊断信息、Logview链接地址、Spark-UIJobview链接地址等。

  8. 打开Logview链接,如果作业执行状态为success,选择Job Details > master-0 > StdOut,查看jdbcDF.printSchema()的返回结果。

    查看Stdout,打印的Schema信息与Hologres中创建的mc_jdbc_holo表一致,即访问成功。

    root
     |-- id: integer (nullable = true)
     |-- name: string (nullable = true)
    说明

    您也可以打开Spark-UIJobview链接地址,进行作业的查看与诊断。