全部產品
Search
文件中心

MaxCompute:MaxCompute如何訪問Hologres

更新時間:Mar 25, 2025

本文為您介紹MaxCompute如何訪問Hologres。

背景資訊

Hologres是阿里雲即時互動式分析產品。Hologres具備高並發地即時寫入和查詢資料的能力,同時支援資料無需遷移就能高效能加速分析MaxCompute資料,通過聯邦分析Hologres即時資料與MaxCompute離線資料,實現離線即時一體化的資料倉儲產品解決方案。您可以使用MaxCompute和Hologres的組合方案,來滿足大規模離線分析、即時營運分析、互動式查詢等多業務情境。

前提條件

  • 已準備MaxCompute相應的環境。

  • 已開通DataWorks服務。

    開通DataWorks服務的操作指導,請參見開通DataWorks服務

  • 已開通Hologres服務並串連HoloWeb。

    開通Hologres並串連HoloWeb的操作指導,請參見開通Hologres串連HoloWeb並執行查詢

  • 已下載PostgreSQL的JDBC驅動包。

    本實踐使用的是postgresql-42.2.16.jar驅動包,並且將該JAR包存放在Linux的/home/postgreSQL路徑下。您可以通過PostgreSQL驅動官網下載。

MaxCompute SQL外部表格方式訪問Hologres

  1. Hologres管理主控台,選擇目標執行個體並建立Hologres資料庫mc_db_holo

    建立Hologres資料庫的操作指導,請參見建立Hologres資料庫建立Hologres資料庫

  2. 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')
    ;
  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開發介面,查詢Hologres表mc_sql_holo中資料。

    查詢Hologres表資料

    select * from mc_sql_holo;

MaxCompute Spark訪問Hologres:Local提交模式

  1. HoloWeb開發介面的mc_db_holo資料庫下,執行如下語句建立Hologres表mc_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:使用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

  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表一致,即訪問成功。Local

MaxCompute Spark訪問Hologres:Cluster提交模式

  1. HoloWeb開發介面的mc_db_holo資料庫下,執行如下語句建立Hologres表mc_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:使用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

  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資訊,請參見各地區Endpoint對照表(阿里雲VPC網路連接方式)

    • 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-UI的Jobview連結地址,可供開發人員進一步診斷作業。

    • 作業的Logview連結地址。Logview

    • Spark-UI的Jobview連結地址。Jobview

  5. 開啟Logview連結,如果作業執行狀態為success,選擇Job Details > master-0 > StdOut,查看jdbcDF.printSchema()的返回結果。

    Logview

    查看Stdout,列印的Schema資訊與Hologres中建立的mc_jdbc_holo表一致,即訪問成功。StdOut

    說明

    您也可以開啟Spark-UI的Jobview連結地址,進行作業的查看與診斷。

MaxCompute Spark訪問Hologres:DataWorks提交模式

  1. HoloWeb開發介面的mc_db_holo資料庫下,執行如下語句建立Hologres表mc_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資訊,請參見各地區Endpoint對照表(阿里雲VPC網路連接方式)

    • Hologres_Classic_Network:Hologres傳統網路類型。配置此項主要是為了在MaxCompute安全運行沙箱環境中,開啟到對應Hologres執行個體的網路原則,否則MaxCompute叢集無法訪問外部服務。

  3. 登入DataWorks控制台

  4. 在左側導覽列,單擊工作空間列表

  5. 工作空間列表頁面,單擊相應工作空間後操作列的快速進入 > 資料開發

  6. 建立PostgreSQL JDBC資源以及ODPS Spark節點。

    1. 在目標商務程序下,右鍵選擇 建立資源 > MaxCompute > File,在彈出的建立資源對話方塊,上傳PostgreSQL JDBC的JAR包檔案後,單擊建立

      建立資源

      說明
    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:使用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

    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-UI的Jobview連結地址等。Logview連結地址

  8. 開啟Logview連結,如果作業執行狀態為success,選擇Job Details > master-0 > StdOut,查看jdbcDF.printSchema()的返回結果。

    Logview

    查看Stdout,列印的Schema資訊與Hologres中建立的mc_jdbc_holo表一致,即訪問成功。StdOut

    說明

    您也可以開啟Spark-UI的Jobview連結地址,進行作業的查看與診斷。