如果您需要以交互式方式执行Spark SQL,可以指定Spark Interactive型资源组作为执行查询的资源组。资源组的资源量会在指定范围自动扩缩容,在满足您交互式查询需求的同时还可以降低使用成本。本文为您详细介绍如何通过控制台、Hive JDBC、PyHive、Beeline、DBeaver等客户端工具实现Spark SQL交互式查询。
前提条件
集群的产品系列为湖仓版。
集群与OSS存储空间位于相同地域。
已创建数据库账号。
如果是通过阿里云账号访问,只需创建高权限账号。具体操作,请参见创建高权限账号。
如果是通过RAM用户访问,需要创建高权限账号和普通账号并且将RAM用户绑定到普通账号上。具体操作,请参见创建数据库账号和绑定或解绑RAM用户与数据库账号。
已安装Java 8开发环境和Python开发环境,以便后续运行Java应用、Python应用、Beeline等客户端。
已将客户端IP地址添加至AnalyticDB for MySQL集群白名单中。具体操作,请参见白名单。
注意事项
如果Spark Interactive型资源组处于停止状态,在执行第一个Spark SQL时集群会重新启动Spark Interactive型资源组,第一个Spark SQL可能会处于较长时间的排队等待状态。
Spark无法读写ADB_External_TPCH_10GB、INFORMATION_SCHEMA和MYSQL数据库,因此请不要将这些数据库作为初始连接的数据库。
请确保提交Spark SQL作业的数据库账号已具有访问目标数据库的权限,否则会导致查询失败。
准备工作
已创建Spark Interactive型资源组。具体操作,请参见新建和管理资源组。
获取Spark Interactive型资源组的连接地址。
登录云原生数据仓库AnalyticDB MySQL控制台,在左上角选择集群所在地域。在左侧导航栏,单击集群列表,在湖仓版页签下,单击目标集群ID。
在左侧导航栏,单击,单击资源组管理页签。
单击对应资源组操作列的详情,查看内网连接地址和公网连接地址。您可单击端口号括号内的
按钮,复制连接地址。
以下两种情况,您需要单击公网地址后的申请网络,手动申请公网连接地址。
提交Spark SQL作业的客户端工具部署在本地。
提交Spark SQL作业的客户端工具部署在ECS上,且ECS与AnalyticDB for MySQL不属于同一VPC。
交互式查询
控制台
若您是自建HiveMetastore
,使用控制台开发Spark SQL作业时,请在AnalyticDB for MySQL中创建一个名为default
的数据库,并选择它作为执行Spark SQL的数据库。
登录云原生数据仓库AnalyticDB MySQL控制台,在左上角选择集群所在地域。在左侧导航栏,单击集群列表,在湖仓版页签下,单击目标集群ID。
在左侧导航栏单击
。选择Spark引擎和创建的Spark Interactive型资源组,执行如下Spark SQL:
SHOW DATABASES;
Hive JDBC
在pom.xml中配置Maven依赖。
<dependency> <groupId>org.apache.hive</groupId> <artifactId>hive-jdbc</artifactId> <version>2.3.9</version> </dependency>
建立连接并执行Spark SQL。
public class java { public static void main(String[] args) throws Exception { Class.forName("org.apache.hive.jdbc.HiveDriver"); String url = "<连接地址>"; Connection con = DriverManager.getConnection(url, "<用户名>", "<密码>"); Statement stmt = con.createStatement(); ResultSet tables = stmt.executeQuery("show tables"); List<String> tbls = new ArrayList<>(); while (tables.next()) { System.out.println(tables.getString("tableName")); tbls.add(tables.getString("tableName")); } } }
参数说明:
连接地址:准备工作中获取的Spark Interactive型资源组连接地址。其中
default
需替换成实际连接的数据库名称。用户名:AnalyticDB for MySQL的数据库账号。
密码:AnalyticDB for MySQL数据库账号的密码。
PyHive
安装Python Hive客户端。
pip install pyhive
建立连接并执行Spark SQL。
from pyhive import hive from TCLIService.ttypes import TOperationState cursor = hive.connect( host='<连接地址>', port=<端口号>, username='<资源组名称>/<用户名>', password='<密码>', auth='CUSTOM' ).cursor() cursor.execute('show tables') status = cursor.poll().operationState while status in (TOperationState.INITIALIZED_STATE, TOperationState.RUNNING_STATE): logs = cursor.fetch_logs() for message in logs: print(message) # If needed, an asynchronous query can be cancelled at any time with: # cursor.cancel() status = cursor.poll().operationState print(cursor.fetchall())
参数说明:
连接地址:准备工作中获取的Spark Interactive型资源组连接地址。其中
default
需替换成实际连接的数据库名称。端口号:Spark Interactive型资源组的端口号,固定为10000。
资源组名称:Spark Interactive型资源组的名称。
用户名:AnalyticDB for MySQL的数据库账号。
密码:AnalyticDB for MySQL数据库账号的密码。
Beeline
连接Spark Interactive型资源组。
命令格式如下:
!connect <连接地址> <用户名> <密码>
连接地址:准备工作中获取的Spark Interactive型资源组连接地址。其中
default
需替换成实际连接的数据库名称。用户名:AnalyticDB for MySQL的数据库账号。
密码:AnalyticDB for MySQL数据库账号的密码。
示例:
!connect jdbc:hive2://amv-bp1c3em7b2e****-spark.ads.aliyuncs.com:10000/adb_test spark_resourcegroup/AdbSpark14**** Spark23****
返回结果:
Connected to: Spark SQL (version 3.2.0) Driver: Hive JDBC (version 2.3.9) Transaction isolation: TRANSACTION_REPEATABLE_READ
执行Spark SQL。
SHOW TABLES;
DBeaver
打开DBeaver客户端,单击 。
在连接到数据库页面,选择Apache Spark,单击下一步。
配置Hadoop/Apache Spark 连接设置,参数说明如下:
参数
说明
连接方式
连接方式选择为URL。
JDBC URL
请填写准备工作中获取的连接地址。详情请参见准备工作。
重要连接地址中的
db
需替换为实际的数据库名。用户名
AnalyticDB for MySQL的数据库账号。
密码
AnalyticDB for MySQL数据库账号的密码。
上述参数配置完成后,单击测试连接。
重要首次测试连接时,DBeaver会自动获取需要下载的驱动信息,获取完成后,请单击下载,下载相关驱动。
测试连接成功后,单击完成。
在数据库导航页签下,展开对应数据源的子目录,单击对应数据库。
在右侧代码框中输入SQL语句,并单击
按钮运行。
SHOW TABLES;
返回结果如下:
+-----------+-----------+-------------+ | namespace | tableName | isTemporary | +-----------+-----------+-------------+ | db | test | [] | +-----------+-----------+-------------+
DBVisualizer
打开DBVisualizer客户端,单击。
在Driver Manage页面,选择Hive,单击
按钮。
在Driver Settings页签下,配置如下参数:
参数
说明
Name
Hive数据源名称,您可以自定义名称。
URL Format
请填写准备工作中获取的连接地址。详情请参见准备工作。
重要连接地址中的
db
需替换为实际的数据库名。Driver Class
Hive驱动,固定选择为org.apache.hive.jdbc.HiveDriver。
说明参数配置完成后,请单击Start Download,下载对应驱动。
驱动下载完成后,单击
。在Create Database Connection from Database URL对话框中填写以下参数:
参数
说明
Database URL
请填写准备工作中获取的连接地址。详情请参见准备工作。
重要连接地址中的
db
需替换为实际的数据库名。Driver Class
选择步骤3创建的Hive数据源。
在Connection页面配置以下连接参数,并单击Connect。
参数
说明
Name
默认与步骤3创建的Hive数据源同名,您可以自定义名称。
Notes
备注信息。
Driver Type
选择Hive。
Database URL
请填写准备工作中获取的连接地址。详情请参见准备工作。
重要连接地址中的
db
需替换为实际的数据库名。Database Userid
AnalyticDB for MySQL的数据库账号。
Database Password
AnalyticDB for MySQL数据库账号的密码。
说明其他参数无需配置,使用默认值即可。
连接成功后,在Database页签下,展开对应数据源的子目录,单击对应数据库。
在右侧代码框中输入SQL语句,并单击
按钮运行。
SHOW TABLES;
返回结果如下:
+-----------+-----------+-------------+ | namespace | tableName | isTemporary | +-----------+-----------+-------------+ | db | test | false | +-----------+-----------+-------------+