通過(guò)Spark SQL讀Lindorm數(shù)據(jù)
云原生數(shù)據(jù)倉(cāng)庫(kù) AnalyticDB MySQL 版支持通過(guò)Spark SQL訪問(wèn)Lindorm數(shù)據(jù)庫(kù)。本文主要介紹如何通過(guò)Spark SQL訪問(wèn)Lindorm中的Hive表和寬表的數(shù)據(jù)。
前提條件
已創(chuàng)建Lindorm單可用區(qū)實(shí)例。具體操作,請(qǐng)參見(jiàn)創(chuàng)建實(shí)例。
重要Lindorm實(shí)例需開(kāi)通寬表引擎、計(jì)算引擎、LindormDFS。計(jì)算引擎開(kāi)通方式,請(qǐng)參見(jiàn)開(kāi)通與變配。
已開(kāi)通OSS服務(wù)并創(chuàng)建存儲(chǔ)空間和項(xiàng)目。具體操作,請(qǐng)參見(jiàn)開(kāi)通OSS服務(wù)、創(chuàng)建存儲(chǔ)空間和管理目錄。
集群的產(chǎn)品系列為企業(yè)版、基礎(chǔ)版或湖倉(cāng)版。
已在企業(yè)版、基礎(chǔ)版或湖倉(cāng)版集群中創(chuàng)建Job型資源組。具體操作,請(qǐng)參見(jiàn)新建資源組。
已創(chuàng)建企業(yè)版、基礎(chǔ)版或湖倉(cāng)版集群的數(shù)據(jù)庫(kù)賬號(hào)。
準(zhǔn)備工作
在Lindorm管理控制臺(tái)的實(shí)例詳情頁(yè)面,獲取交換機(jī)ID。
在Lindorm管理控制臺(tái)的訪問(wèn)控制頁(yè)面,單擊安全組頁(yè)簽,查看Lindorm實(shí)例所屬的安全組ID。如未添加安全組,請(qǐng)參見(jiàn)添加安全組。
訪問(wèn)Lindorm中的Hive數(shù)據(jù)
獲取HDFS客戶端的hdfs-site配置信息。
說(shuō)明如需獲取hdfs-site配置信息,請(qǐng)聯(lián)系Lindorm技術(shù)支持(釘釘號(hào):s0s3eg3)。
登錄云原生數(shù)據(jù)倉(cāng)庫(kù)AnalyticDB MySQL控制臺(tái),在左上角選擇集群所在地域。在左側(cè)導(dǎo)航欄,單擊集群列表,在企業(yè)版、基礎(chǔ)版或湖倉(cāng)版頁(yè)簽下,單擊目標(biāo)集群ID。
在左側(cè)導(dǎo)航欄,單擊作業(yè)開(kāi)發(fā) > SQL開(kāi)發(fā)。
在SQLConsole窗口,選擇Spark引擎和Job型資源組。
在SQLConsole窗口中輸入以下作業(yè)內(nèi)容:
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相關(guān)配置 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; -- 創(chuàng)建OSS外部數(shù)據(jù)庫(kù)和表 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表中的數(shù)據(jù)插入至OSS外表 INSERT INTO external_oss_db.test SELECT * FROM lindorm_catalog.spark_test.test; -- 讀取OSS外表數(shù)據(jù) SELECT * FROM external_oss_db.test;
參數(shù)
是否必填
說(shuō)明
spark.adb.connectors
是
啟用AnalyticDB for MySQLSpark內(nèi)置的連接器,連接器名稱以逗號(hào)分隔,目前可選的連接器有oss、hudi、delta、adb、odps、external_hive、jindo。
本文示例為
oss,external_hive
連接器。spark.adb.eni.enabled
是
是否開(kāi)啟ENI訪問(wèn)的開(kāi)關(guān)。
如果是通過(guò)外表訪問(wèn)其他外部數(shù)據(jù)源,則需要打開(kāi)ENI訪問(wèn)開(kāi)關(guān)。取值說(shuō)明:
true:開(kāi)啟
false:關(guān)閉
本文示例需打開(kāi)ENI訪問(wèn)開(kāi)關(guān),參數(shù)取值為
true
。spark.adb.eni.vswitchId
是
準(zhǔn)備工作中獲取的Lindorm交換機(jī)ID。
spark.adb.eni.securityGroupId
是
準(zhǔn)備工作中獲取的Lindorm安全組ID。
spark.sql.catalog.lindorm_catalog
是
Spark SQL支持的配置數(shù)據(jù)源的方式。
參數(shù)取值固定為
org.apache.spark.sql.hive.V2HiveExternalCatalog
。說(shuō)明參數(shù)名稱中的
catalog_name
可自定義,本文示例為lindorm_catalog
。spark.adb.eni.adbHostAlias.enabled
是
是否開(kāi)啟自動(dòng)將AnalyticDB for MySQL服務(wù)所需要的域名解析信息寫(xiě)入到域名映射表中。取值說(shuō)明:
true:開(kāi)啟。
false:關(guān)閉。
在通過(guò)ENI連接EMR Hive讀寫(xiě)數(shù)據(jù)時(shí),需要開(kāi)啟。
HDFS相關(guān)配置
是
步驟1中獲取的hdfs-site配置信息。格式如下:
set spark.hadoop.<name>=<value>
。說(shuō)明<name>和<value>需替換為配置信息中的實(shí)際值。
location
是
指定外部數(shù)據(jù)庫(kù)和外表數(shù)據(jù)在OSS上的存儲(chǔ)路徑。格式為
oss://<bucketname/database/table>
。本文示例為oss://testBucketName/warehouse/db/test
。說(shuō)明<bucketname/database/table>
需替換為實(shí)際的OSS路徑。單擊執(zhí)行SQL。
Spark作業(yè)執(zhí)行成功后,您可以在Spark Jar開(kāi)發(fā)頁(yè)面應(yīng)用列表頁(yè)簽中的日志查看表數(shù)據(jù)。詳情請(qǐng)參見(jiàn)Spark開(kāi)發(fā)編輯器。
訪問(wèn)Lindorm寬表數(shù)據(jù)
獲取寬表引擎使用HBase Java API訪問(wèn)的專有網(wǎng)絡(luò)地址。具體操作,請(qǐng)參見(jiàn)查看連接地址。
登錄云原生數(shù)據(jù)倉(cāng)庫(kù)AnalyticDB MySQL控制臺(tái),在左上角選擇集群所在地域。在左側(cè)導(dǎo)航欄,單擊集群列表,在企業(yè)版、基礎(chǔ)版或湖倉(cāng)版頁(yè)簽下,單擊目標(biāo)集群ID。
在左側(cè)導(dǎo)航欄,單擊作業(yè)開(kāi)發(fā) > SQL開(kāi)發(fā)。
在SQLConsole窗口,選擇Spark引擎和Job型資源組。
在SQLConsole窗口中輸入以下作業(yè)內(nèi)容:
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/*"; -- 創(chuàng)建OSS外部數(shù)據(jù)庫(kù)和表 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寬表中的數(shù)據(jù)插入至OSS外表 INSERT INTO external_oss_db.lindorm_table_2 SELECT * FROM lindorm_table.spark_test.tb; -- 讀取OSS外表數(shù)據(jù) SELECT * FROM external_oss_db.lindorm_table_2;
參數(shù)說(shuō)明:
參數(shù)
是否必填
說(shuō)明
spark.adb.eni.enabled
是
是否開(kāi)啟ENI訪問(wèn)的開(kāi)關(guān)。
如果是通過(guò)外表訪問(wèn)其他外部數(shù)據(jù)源,則需要打開(kāi)ENI訪問(wèn)開(kāi)關(guān)。取值說(shuō)明:
true:開(kāi)啟
false:關(guān)閉
本文示例需打開(kāi)ENI訪問(wèn)開(kāi)關(guān),參數(shù)取值為
true
。spark.adb.eni.vswitchId
是
準(zhǔn)備工作中獲取的Lindorm交換機(jī)ID。
spark.adb.eni.securityGroupId
是
準(zhǔn)備工作中獲取的Lindorm安全組ID。
spark.sql.catalog.lindorm_table
是
Spark SQL支持的配置數(shù)據(jù)源的方式。
參數(shù)取值固定為
com.alibaba.lindorm.ldspark.datasources.v2.LindormCatalog
。說(shuō)明參數(shù)名稱中的
catalog_name
可自定義,本文示例為lindorm_table
。spark.sql.catalog.lindorm_table.url
是
步驟1中獲取的使用HBase Java API訪問(wèn)的專有網(wǎng)絡(luò)地址。
spark.sql.catalog.lindorm_table.username
是
寬表引擎的用戶名和密碼。
如果您忘記用戶密碼,可以通過(guò)Lindorm寬表引擎的集群管理系統(tǒng)修改密碼。具體操作,請(qǐng)參見(jiàn)修改用戶密碼。
spark.sql.catalog.lindorm_table.password
是
jar
是
步驟2中下載的壓縮包所在的OSS路徑。本文示例為
oss://testBucketName/hbase_jars/*
。location
是
指定外部數(shù)據(jù)庫(kù)和外表數(shù)據(jù)在OSS上的存儲(chǔ)路徑。格式為
oss://<bucketname/database/table>
。本文示例為oss://testBucketName/warehouse/db/lindorm_table_2
。說(shuō)明<bucketname/database/table>
需替換為實(shí)際的OSS路徑。單擊執(zhí)行SQL。
Spark作業(yè)執(zhí)行成功后,您可以在Spark Jar開(kāi)發(fā)頁(yè)面應(yīng)用列表頁(yè)簽中的日志查看表數(shù)據(jù)。詳情請(qǐng)參見(jiàn)Spark開(kāi)發(fā)編輯器。