【赵渝强老师】使用TiSpark在Spark中访问TiDB

TiSpark是TiDB为解决用户复杂OLAP需求而推出的产品。它借助Spark平台,同时融合TiKV分布式集群的优势,和TiDB一起为用户一站式解决HTAP的需求。下面展示了TiSpark的体系架构。

点击这里查看视频讲解:【赵渝强老师】使用TiSpark在Spark中访问TiDB

下面通过具体的操作步骤来演示如何使用TiSpark查询TiKV中的数据。

(1)进入Spark的conf目录,生成spark-defaults.conf文件。

powershell 复制代码
cd /root/training/spark-3.0.0-bin-hadoop3.2/conf/
cp spark-defaults.conf.template spark-defaults.conf

(2)在spark-defaults.conf中添加如下配置

powershell 复制代码
spark.sql.extensions  org.apache.spark.sql.TiExtensions
spark.tispark.pd.addresses  127.0.0.1:2379
spark.sql.catalog.tidb_catalog  org.apache.spark.sql.catalyst.catalog.TiCatalog
spark.sql.catalog.tidb_catalog.pd.addresses  127.0.0.1:2379

(3)重启Spark集群。

(4)启动TiDB数据库集群

powershell 复制代码
tiup playground v8.5.1 \
     --db 1 --pd 1 --kv 2 \
     --tiflash 0 --without-monitor
	
# 提示:这里将会使用部门表(dept)和员工表(emp)进行演示。

(5)启动Spark交互式命令行工具spark-shell,并同时加载TiSpark的包

powershell 复制代码
bin/spark-shell --master spark://192.168.79.10:7077 \
    --jars /root/tools/tispark-assembly-3.0-2.5.3.jar

(6)通过TiSpark执行一个多表连接查询。

powershell 复制代码
scala> spark.sql("use tidb_catalog")
scala> spark.sql("select d.dname,e.ename,e.sal from scott.dept d,scott.emp e where d.deptno=e.deptno").show

# 输出的结果如下:
+----------+------+----+                                                        
|     dname| ename| sal|
+----------+------+----+
|  RESEARCH| SMITH| 800|
|     SALES| ALLEN|1600|
|     SALES|  WARD|1250|
|  RESEARCH| JONES|2975|
|     SALES|MARTIN|1250|
|     SALES| BLAKE|2850|
|ACCOUNTING| CLARK|2450|
|  RESEARCH| SCOTT|3000|
|ACCOUNTING|  KING|5000|
|     SALES|TURNER|1500|
|  RESEARCH| ADAMS|1100|
|     SALES| JAMES| 950|
|  RESEARCH|  FORD|3000|
|ACCOUNTING|MILLER|1300|
+----------+------+----+

通过Spark Web Console可以进一步查看TiSpark任务执行的过程。

通过使用TiSpark也可以连接不同数据源中的数据从而进行多表连接查询。下面的示例将两张表:一张表是部门表dept,该表存储在文件系统中,如:本地文件系统或者Hadoop HDFS中;另一张表是员工表emp,该表存储在TiDB中。具体的操作步骤如下:

(1)查看部门表dept中的数据

powershell 复制代码
# cat dept.csv 
10,ACCOUNTING,NEW YORK
20,RESEARCH,DALLAS
30,SALES,CHICAGO
40,OPERATIONS,BOSTON

# 提示:这是一个本地文件系统上的csv文件。

(2)启动Spark Shell

powershell 复制代码
bin/spark-shell --master spark://192.168.79.10:7077 \
    --jars /root/tools/tispark-assembly-3.0-2.5.3.jar

(3)将部门表加载到Spark的DataFrame中

powershell 复制代码
scala> val deptDF = spark.read.format("csv").option("seq",",").schema("deptno int,dname string,loc string").load("/root/dept.csv")
				  
# 提示:通过Spark可以加载本地文件系统、Hadoop HDFS、Hive等数据源中的数据。

(4)将deptDF注册为视图。

powershell 复制代码
scala> deptDF.createOrReplaceTempView("dept")

(5)通过TiSpark关联TiDB数据库中的员工表emp,执行多表查询。

powershell 复制代码
scala> spark.sql("use tidb_catalog")
scala> spark.sql("select d.dname,e.ename,e.sal from dept d,scott.emp e where d.deptno=e.deptno").show

# 输出的结果如下:
+----------+------+----+                                                        
|     dname| ename| sal|
+----------+------+----+
|  RESEARCH| SMITH| 800|
|     SALES| ALLEN|1600|
|     SALES|  WARD|1250|
|  RESEARCH| JONES|2975|
|     SALES|MARTIN|1250|
|     SALES| BLAKE|2850|
|ACCOUNTING| CLARK|2450|
|  RESEARCH| SCOTT|3000|
|ACCOUNTING|  KING|5000|
|     SALES|TURNER|1500|
|  RESEARCH| ADAMS|1100|
|     SALES| JAMES| 950|
|  RESEARCH|  FORD|3000|
|ACCOUNTING|MILLER|1300|
+----------+------+----+
相关推荐
不可求~8 小时前
多模型路由怎么落地:把任务分流写进项目的最小实现
java·前端·数据库
Lumistory8 小时前
城市建筑照明的落地与长效运营观察
大数据·数据库·中间件·光照贴图
布莱克60510 小时前
理解 MySQL 架构:从连接层到存储引擎
mysql
围炉聊科技11 小时前
长期免费的数据库方案——零成本基建系列
数据库
AC赳赳老秦11 小时前
公开图片 OCR 数据提取:OpenClaw 合规采集公开信息图,识别文字与表格并转化为结构化数据
java·大数据·前端·数据库·python·php·openclaw
梁辰兴13 小时前
软件工程:数据结构设计
数据库·软件工程·设计原则·设计方法·梁辰兴·数据库结构设计·数据库结构类型
AC赳赳老秦13 小时前
风控岗应用:OpenClaw 采集公开司法与经营异常数据,自动生成企业风险评估报告
大数据·c语言·数据库·人工智能·python·php·openclaw
灯澜忆梦14 小时前
【MySQL18】进阶篇 | MySQL管理
数据库·mysql
zcmodeltech14 小时前
智能制造教学实训沙盘模型多系统协同控制系统设计:基于STM32与Modbus RTU的工业机器人-智慧工厂-数字孪生全场景联动方案
数据库·stm32·嵌入式硬件·机器人·制造·多分类
AI多Agent协作实战派14 小时前
AI多Agent协作系统实战(四十):AI说“没有错误“,系统判了“测试失败“——一个正则的误判
数据库·人工智能