AnalyticDB for MySQL支援通過Spark SQL訪問Lindorm資料庫。本文主要介紹如何通過Spark SQL訪問Lindorm中的Hive表和寬表的資料。
前提條件
準備工作
在Lindorm管理主控台的執行個體詳情頁面,擷取交換器ID。
在Lindorm管理主控台的存取控制頁面,單擊安全性群組頁簽,查看Lindorm執行個體所屬的安全性群組ID。如未添加安全性群組,請參見添加安全性群組。
訪問Lindorm中的Hive資料
擷取HDFS用戶端的hdfs-site配置資訊。
說明如需擷取hdfs-site配置資訊,請聯絡Lindorm支援人員(DingTalk號:s0s3eg3)。
登入雲原生資料倉儲AnalyticDB MySQL控制台,在左上方選擇叢集所在地區。在左側導覽列,單擊集群清單,在湖倉版頁簽下,單擊目的地組群ID。
在左側導覽列,單擊作業開發 > SQL開發。
在SQLConsole視窗,選擇Spark引擎和Job型資源群組。
在SQLConsole視窗中輸入以下作業內容:
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。
本文樣本為
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路徑。單擊執行SQL。
Spark作業執行成功後,您可以在Spark Jar開發頁面應用列表頁簽中的日誌查看錶資料。詳情請參見Spark開發編輯器。
訪問Lindorm寬表資料
擷取寬表引擎使用HBase Java API訪問的專用網路地址。具體操作,請參見查看串連地址。
登入雲原生資料倉儲AnalyticDB MySQL控制台,在左上方選擇叢集所在地區。在左側導覽列,單擊集群清單,在湖倉版頁簽下,單擊目的地組群ID。
在左側導覽列,單擊作業開發 > SQL開發。
在SQLConsole視窗,選擇Spark引擎和Job型資源群組。
在SQLConsole視窗中輸入以下作業內容:
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路徑。單擊執行SQL。
Spark作業執行成功後,您可以在Spark Jar開發頁面應用列表頁簽中的日誌查看錶資料。詳情請參見Spark開發編輯器。