通過Spark SQL讀Lindorm資料

更新時間:
Copy as MD

AnalyticDB for MySQL支援通過Spark SQL訪問Lindorm資料庫。本文主要介紹如何通過Spark SQL訪問Lindorm中的Hive表和寬表的資料。

前提條件

  • 已建立Lindorm單可用性區域執行個體。具體操作,請參見建立執行個體

    重要

    Lindorm執行個體需開通寬表引擎、計算引擎、LindormDFS。計算引擎開通方式,請參見服務開通

  • 已開通OSS服務並建立儲存空間和專案。具體操作,請參見開通OSS服務建立儲存空間管理目錄

  • 叢集的產品系列為企業版、基礎版或湖倉版

  • 已在企業版、基礎版或湖倉版叢集中建立Job型資源群組

  • 已建立企業版、基礎版或湖倉版叢集的資料庫帳號。

準備工作

  1. Lindorm管理主控台實例詳情頁面,擷取交換器ID。

  2. Lindorm管理主控台訪問控制頁面,單擊安全組頁簽,查看Lindorm執行個體所屬的安全性群組ID。如未添加安全性群組,請參見添加安全性群組

訪問Lindorm中的Hive資料

  1. 擷取HDFS用戶端hdfs-site配置資訊。

    說明

    如需擷取hdfs-site配置資訊,請聯絡Lindorm支援人員(DingTalk號:s0s3eg3)。

  2. 登入雲原生資料倉儲AnalyticDB MySQL控制台,在左上方選擇叢集所在地區。在左側導覽列,單擊集群清單,然後單擊目的地組群ID。

  3. 在左側導覽列,單擊作業開發 > SQL開發

  4. SQL Console視窗,選擇Spark引擎和Job型資源群組。

  5. SQL Console視窗中輸入以下作業內容:

    SET spark.adb.connectors = oss,external_hive;
    SET spark.adb.eni.enabled=true;
    SET spark.adb.eni.vswitchId=vsw-bp14pj8h0k5p0kwu3****;
    SET spark.adb.eni.securityGroupId=sg-bp11m93k021tp4ca****;
    SET spark.sql.catalog.lindorm_catalog = org.apache.spark.sql.hive.V2HiveExternalCatalog;
    SET spark.adb.eni.adbHostAlias.enabled=true;
    SET spark.sql.catalogImplementation = hive;
    -- HDFS相關配置
    SET spark.sql.catalog.lindorm_catalog.spark.hadoop.hive.metastore.uris=thrift://ld-bp1ttz8833x9c****-proxy-ldps-hms.lindorm.aliyuncs.com:9083;
    SET spark.hadoop.dfs.nameservices=ld-bp1ttz8833x9c****;
    SET spark.hadoop.dfs.client.failover.proxy.provider.ld-bp1ttz8833x9c****=org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider;
    SET spark.hadoop.dfs.ha.automatic-failover.enabled=true;
    SET spark.hadoop.dfs.ha.namenodes.ld-bp1ttz8833x9c****=nn1,nn2;
    SET spark.hadoop.dfs.namenode.rpc-address.ld-bp1ttz8833x9c****.nn1=ld-bp1ttz8833x9c-master1-001.lindorm.rds.aliyuncs.com:8020;
    SET spark.hadoop.dfs.namenode.rpc-address.ld-bp1ttz8833x9c****.nn2=ld-bp1ttz8833x9c****-master2-001.lindorm.rds.aliyuncs.com:8020;
    SET spark.hadoop.dfs.namenode.http-address.ld-bp1ttz8833x9c****.nn1=ld-bp1ttz8833x9c****-master1-001.lindorm.rds.aliyuncs.com:50071;
    SET spark.hadoop.dfs.namenode.http-address.ld-bp1ttz8833x9c****.nn2=ld-bp1ttz8833x9c****-master2-001.lindorm.rds.aliyuncs.com:50071;
    
    -- 建立OSS外部資料庫和表
    CREATE DATABASE external_oss_db location 'oss://testBucketName/warehouse/db';
    CREATE TABLE external_oss_db.test(id int, name string) using parquet location 'oss://testBucketName/warehouse/db/test';
    
    -- 將Hive表中的資料插入至OSS外表
    INSERT INTO external_oss_db.test SELECT * FROM lindorm_catalog.spark_test.test;
    
    -- 讀取OSS外表資料
    SELECT * FROM external_oss_db.test;

    參數

    是否必填

    說明

    spark.adb.connectors

    啟用AnalyticDB for MySQLSpark內建的連接器,連接器名稱以逗號分隔,目前可選的連接器有oss、hudi、delta、adb、odps、external_hive、jindo、default。

    本文樣本為oss,external_hive連接器。

    spark.adb.eni.enabled

    是否開啟ENI訪問的開關。

    如果是通過外表訪問其他外部資料源,則需要開啟ENI訪問開關。取值說明:

    • true:開啟

    • false:關閉

    本文樣本需開啟ENI訪問開關,參數取值為true

    spark.adb.eni.vswitchId

    準備工作中擷取的Lindorm交換器ID。

    spark.adb.eni.securityGroupId

    準備工作中擷取的Lindorm安全性群組ID。

    spark.sql.catalog.lindorm_catalog

    Spark SQL支援的配置資料來源的方式。

    參數取值固定為org.apache.spark.sql.hive.V2HiveExternalCatalog

    說明

    參數名稱中的catalog_name可自訂,本文樣本為lindorm_catalog

    spark.adb.eni.adbHostAlias.enabled

    是否開啟自動將AnalyticDB for MySQL服務所需要的網域名稱解析資訊寫入到網域名稱映射表中。取值說明:

    • true:開啟。

    • false:關閉。

    在通過ENI串連EMR Hive讀寫資料時,需要開啟。

    HDFS相關配置

    步驟1中擷取的hdfs-site配置資訊。格式如下:set spark.hadoop.<name>=<value>

    說明

    <name><value>需替換為配置資訊中的實際值。

    location

    指定外部資料庫和外表資料在OSS上的儲存路徑。格式為oss://<bucketname/database/table>。本文樣本為oss://testBucketName/warehouse/db/test

    說明

    <bucketname/database/table>需替換為實際的OSS路徑。

  6. 單擊執行SQL

  7. Spark作業執行成功後,您可以在Spark Jar 開發頁面應用列表頁簽中的日誌查看錶資料。詳情請參見Spark開發編輯器

訪問Lindorm寬表資料

AnalyticDB for MySQL支援通過JDBCSpark DatasourceV2介面兩種方法訪問Lindorm寬表資料。兩種方法區別如下:

  • 通過JDBC方式訪問Lindorm寬表資料僅支援訪問default庫。

  • 通過Spark Datasource V2介面方式支援訪問寬表中任意資料庫。

  • 兩種方式效率按照Lindorm側同學反饋無明顯差別,Spark Datasource V2底層也是拼接的SQL語句

通過JDBC訪問寬表資料

  1. 擷取Lindorm寬表SQL的專用網路地址。具體操作,請參見查看串連地址

  2. 下載Lindorm JDBC Driver依賴,並將JAR包上傳至OSS中。具體操作,請參見上傳檔案

    說明

    lindorm-all-client的版本固定為2.1.6

  3. 登入雲原生資料倉儲AnalyticDB MySQL控制台,在左上方選擇叢集所在地區。在左側導覽列,單擊集群清單,然後單擊目的地組群ID。

  4. 在左側導覽列,單擊作業開發 > SQL開發

  5. SQL Console視窗,選擇Spark引擎和Job型資源群組。

  6. SQL Console視窗中輸入以下作業內容:

    set spark.adb.eni.enabled=true;
    set spark.adb.eni.vswitchId=<vsw-bp14pj8h0k5p0kwu3****>;
    set spark.adb.eni.securityGroupId=>sg-bp11m93k021tp4ca****>;
    
    add jar oss://<bucketname>/hbase_jars/lindorm-all-client-2.1.6.jar;
    
    CREATE TEMPORARY VIEW tb
    USING org.apache.spark.sql.jdbc
    OPTIONS (
      driver 'com.aliyun.lindorm.table.client.Driver',
      url 'jdbc:lindorm:table:url=http://ld-bp1ttz8833x9c****-proxy-lindorm.lindorm.rds.aliyuncs.com:30060/default',內網地址
      dbtable 'tb',
    -- Lindorm控制台擷取的資料庫使用者名稱
      user 'test',
    -- Lindorm控制台擷取的資料庫密碼
      password 'password',
      fetchsize 10000
    );
    
    -- 建立OSS外部資料庫和表
    create database if not exists external_oss_db location 'oss://<bucketname>/warehouse/db';
    create table if not exists external_oss_db.lindorm_table_1(id string, name string) using parquet location 'oss://<bucketname>/warehouse/db/lindorm_table_1/';
    
    -- 將lindorm寬表中的資料插入至OSS外表
    insert into external_oss_db.lindorm_table_1 select * from tb;
    
    -- 讀取OSS外表資料
    select * from external_oss_db.lindorm_table_1;

    參數說明:

    參數

    說明

    jar

    步驟2中下載的JAR包所在的OSS路徑。

    driver

    Lindorm JDBC Driver依賴。參數取值固定為com.aliyun.lindorm.table.client.Driver

    url

    步驟1中擷取的Lindorm寬表SQL的專用網路地址,格式為

    Lindorm寬表SQL的專用網路地址/資料庫名

    例如:jdbc:lindorm:table:url=http://ld-bp1ttz8833x9c****-proxy-lindorm.lindorm.rds.aliyuncs.com:30060/default

    dbtable

    Lindorm寬表資料庫名稱。本文樣本為tb

    user

    如果您忘記使用者密碼,可以通過Lindorm寬表引擎的叢集管理系統修改密碼。

    password

    fetchsize

    每次串連讀取的資料條數。您可以任意調整。

    重要

    提交Spark作業需配置fetchsize參數,否則無法查詢到資料。

  7. 單擊運行

  8. Spark作業執行成功後,您可以在Spark Jar 開發頁面應用列表頁簽中的日誌查看錶資料。詳情請參見Spark開發編輯器

  1. 擷取寬表引擎使用HBase Java API訪問的專用網路地址。具體操作,請參見查看串連地址

  2. 下載串連Lindorm執行個體所需JAR,並將解壓後的JAR包上傳至OSS中。具體操作,請參見上傳檔案

  3. 登入雲原生資料倉儲AnalyticDB MySQL控制台,在左上方選擇叢集所在地區。在左側導覽列,單擊集群清單,然後單擊目的地組群ID。

  4. 在左側導覽列,單擊作業開發 > SQL開發

  5. SQL Console視窗,選擇Spark引擎和Job型資源群組。

  6. SQL Console視窗中輸入以下作業內容:

    SET spark.adb.eni.enabled=true;
    SET spark.adb.eni.vswitchId=vsw-bp14pj8h0k5p0kwu3****;
    SET spark.adb.eni.securityGroupId=sg-bp11m93k021tp4ca****;
    SET spark.sql.catalog.lindorm_table = com.alibaba.lindorm.ldspark.datasources.v2.LindormCatalog;
    SET spark.sql.catalog.lindorm_table.url=ld-bp1ttz8833x9c****-proxy-lindorm.lindorm.rds.aliyuncs.com:30020;
    SET spark.sql.catalog.lindorm_table.username=test;
    SET spark.sql.catalog.lindorm_table.password=password;
    add jar "oss://<bucketname>/hbase_jars/*";
    
    -- 建立OSS外部資料庫和表
    CREATE DATABASE IF NOT exists external_oss_db location 'oss://testBucketName/warehouse/db';
    CREATE TABLE IF NOT exists external_oss_db.lindorm_table_2(id string, name string) using parquet location 'oss://testBucketName/warehouse/db/lindorm_table_2';
    
    -- 將lindorm寬表中的資料插入至OSS外表
    INSERT INTO external_oss_db.lindorm_table_2 SELECT * FROM lindorm_table.spark_test.tb;
    
    -- 讀取OSS外表資料
    SELECT * FROM external_oss_db.lindorm_table_2;

    參數說明:

    參數

    是否必填

    說明

    spark.adb.eni.enabled

    是否開啟ENI訪問的開關。

    如果是通過外表訪問其他外部資料源,則需要開啟ENI訪問開關。取值說明:

    • true:開啟

    • false:關閉

    本文樣本需開啟ENI訪問開關,參數取值為true

    spark.adb.eni.vswitchId

    準備工作中擷取的Lindorm交換器ID。

    spark.adb.eni.securityGroupId

    準備工作中擷取的Lindorm安全性群組ID。

    spark.sql.catalog.lindorm_table

    Spark SQL支援的配置資料來源的方式。

    參數取值固定為com.alibaba.lindorm.ldspark.datasources.v2.LindormCatalog

    說明

    參數名稱中的catalog_name可自訂,本文樣本為lindorm_table

    spark.sql.catalog.lindorm_table.url

    步驟1中擷取的使用HBase Java API訪問的專用網路地址。

    spark.sql.catalog.lindorm_table.username

    寬表引擎的使用者名稱和密碼。

    如果您忘記使用者密碼,可以通過Lindorm寬表引擎的叢集管理系統修改密碼。

    spark.sql.catalog.lindorm_table.password

    jar

    步驟2中下載的壓縮包所在的OSS路徑。本文樣本為oss://testBucketName/hbase_jars/*

    location

    指定外部資料庫和外表資料在OSS上的儲存路徑。格式為oss://<bucketname/database/table>。本文樣本為oss://testBucketName/warehouse/db/lindorm_table_2

    說明

    <bucketname/database/table>需替換為實際的OSS路徑。

  7. 單擊執行SQL

  8. Spark作業執行成功後,您可以在Spark Jar 開發頁面應用列表頁簽中的日誌查看錶資料。詳情請參見Spark開發編輯器