使用MRS Spark SQL访问DWS表
应用场景
华为云提供MapReduce服务(MRS),可在云上快速构建和运营全栈云原生大数据平台。它包含HDFS、Hive、HBase、Spark等大数据组件,专为分析海量企业数据而量身定制。
Spark提供了类似SQL的Spark SQL语言,用于对结构化数据进行操作。使用Spark SQL,可以访问不同的数据库,用户可以从这些数据库中提取数据,处理并加载到不同的数据存储中。
本实践演示如何使用MRS Spark SQL访问GaussDB(DWS)数据。
方案架构
Spark的应用运行架构如图1所示,运行流程如下所示:
- 应用程序(Application)是作为一个进程的集合运行在集群上的,由Driver进行协调。
- 在运行一个应用时,Driver会去连接集群管理器(Standalone、Mesos、YARN)申请运行Executor资源,并启动ExecutorBackend。然后由集群管理器在不同的应用之间调度资源。Driver同时会启动应用程序DAG调度、Stage划分、Task生成。
- 然后Spark会把应用的代码(传递给SparkContext的JAR或者Python定义的代码)发送到Executor上。
- 所有的Task执行完成后,用户的应用程序运行结束。
约束与限制
- 本章节仅适用于MRS 3.x及之后版本。
- 为确保网络连通,GaussDB(DWS)集群需与MRS集群“可用区”、“虚拟私有云”、“安全组”配置相同。
前提条件
- 已创建DWS集群,请参考创建GaussDB(DWS)集群。
- 已获取连接GaussDB(DWS)数据库的IP地址、端口、数据库名称、用户名和密码。此外,操作用户必须具有GaussDB(DWS)表的读写权限。
步骤一:创建MRS集群
- 创建MRS集群。
创建并购买一个包含Spark组件的MRS集群,详情可参考创建MRS集群。
- 如果MRS集群开启了Kerberos认证,登录FusionInsight Manager页面,选择“系统 > 权限 > 用户”,添加一个人机用户sparkuser,用户组(hadoop、hive),主组(hadoop)。
参考添加Spark2x的Ranger访问权限策略章节,添加“ADD JAR操作”权限。
如果MRS集群未开启Kerberos认证,则无需创建用户。
- 安装MRS集群客户端。
安装MRS集群客户端,具体请参考安装客户端。
步骤二:配置MRS Spark SQL访问DWS表
- 准备数据,在GaussDB(DWS)集群中创建数据库和表:
- 登录GaussDB(DWS)管理控制台,单击DWS集群“操作”列的“登录”。
- 登录现有GaussDB(DWS)集群的默认数据库gaussdb,执行以下命令,创建数据库“dws_test”。
- 连接到创建的新数据库,执行以下命令,创建表“dws_order”。
CREATE TABLE dws_data.dws_order
( order_id VARCHAR,
order_channel VARCHAR,
order_time VARCHAR,
cust_code VARCHAR,
pay_amount DOUBLE PRECISION,
real_pay DOUBLE PRECISION );
- 执行以下命令插入数据到表“dws_order”中。
INSERT INTO dws_data.dws_order VALUES ('202306270001', 'webShop', '2023-06-27 10:00:00', 'CUST1', 1000, 1000);
INSERT INTO dws_data.dws_order VALUES ('202306270002', 'webShop', '2023-06-27 11:00:00', 'CUST2', 5000, 5000);
- 查询表数据,验证数据是否插入。
SELECT * FROM dws_data.dws_order;
- 下载GaussDB(DWS)数据库JDBC驱动并上传到MRS集群。
- 在MRS Spark中创建数据源表,并访问DWS表:
- 登录Spark客户端节点,执行如下命令:
source ./bigdata_env
kinit sparkuser
spark-sql --master yarn
- 执行如下命令,添加驱动程序jar:
add jar hdfs://hacluster/tmp/gsjdbc200.jar;
- 执行如下命令,在Spark中创建数据源表,访问DWS数据:
CREATE TABLE IF NOT EXISTS spk_dws_order
USING JDBC OPTIONS (
'url'='jdbc:gaussdb://192.168.0.228:8000/dws_test',
'driver'='com.huawei.gauss200.jdbc.Driver',
'dbtable'='dws_data.dws_order',
'user'='dbadmin',
'password'='xxx');
- 查询Spark表,验证显示的数据是否与DWS数据相同:
可以验证返回的数据与1中所示的数据相同。
- 登录Spark客户端节点,执行如下命令: