云原生数据仓库 AnalyticDB MySQL 版支持通过Spark SQL访问Lindorm数据库。本文主要介绍如何通过Spark SQL访问Lindorm中的Hive表和宽表的数据。
前提条件
准备工作
在Lindorm管理控制台的实例详情页面,获取交换机ID。
在Lindorm管理控制台的访问控制页面,单击安全组页签,查看Lindorm实例所属的安全组ID。如未添加安全组,请参见添加安全组。
访问Lindorm中的Hive数据
获取HDFS客户端的hdfs-site配置信息。
说明如需获取hdfs-site配置信息,请联系Lindorm技术支持(钉钉号: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开发编辑器。