找回密码
 立即注册
首页 业界区 业界 【赵渝强老师】使用TiSpark在Spark中访问TiDB ...

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

嗳诿 4 小时前
1.png

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

3.png
点击这里查看视频讲解:【赵渝强老师】使用TiSpark在Spark中访问TiDB下面通过具体的操作步骤来演示如何使用TiSpark查询TiKV中的数据。
(1)进入Spark的conf目录,生成spark-defaults.conf文件。
  1. cd /root/training/spark-3.0.0-bin-hadoop3.2/conf/
  2. cp spark-defaults.conf.template spark-defaults.conf
复制代码
(2)在spark-defaults.conf中添加如下配置
  1. spark.sql.extensions  org.apache.spark.sql.TiExtensions
  2. spark.tispark.pd.addresses  127.0.0.1:2379
  3. spark.sql.catalog.tidb_catalog  org.apache.spark.sql.catalyst.catalog.TiCatalog
  4. spark.sql.catalog.tidb_catalog.pd.addresses  127.0.0.1:2379
复制代码
(3)重启Spark集群。
(4)启动TiDB数据库集群
  1. tiup playground v8.5.1 \
  2.      --db 1 --pd 1 --kv 2 \
  3.      --tiflash 0 --without-monitor
  4.        
  5. # 提示:这里将会使用部门表(dept)和员工表(emp)进行演示。
复制代码
(5)启动Spark交互式命令行工具spark-shell,并同时加载TiSpark的包
  1. bin/spark-shell --master spark://192.168.79.10:7077 \
  2.     --jars /root/tools/tispark-assembly-3.0-2.5.3.jar
复制代码
(6)通过TiSpark执行一个多表连接查询。
  1. scala> spark.sql("use tidb_catalog")
  2. scala> spark.sql("select d.dname,e.ename,e.sal from scott.dept d,scott.emp e where d.deptno=e.deptno").show
  3. # 输出的结果如下:
  4. +----------+------+----+                                                        
  5. |     dname| ename| sal|
  6. +----------+------+----+
  7. |  RESEARCH| SMITH| 800|
  8. |     SALES| ALLEN|1600|
  9. |     SALES|  WARD|1250|
  10. |  RESEARCH| JONES|2975|
  11. |     SALES|MARTIN|1250|
  12. |     SALES| BLAKE|2850|
  13. |ACCOUNTING| CLARK|2450|
  14. |  RESEARCH| SCOTT|3000|
  15. |ACCOUNTING|  KING|5000|
  16. |     SALES|TURNER|1500|
  17. |  RESEARCH| ADAMS|1100|
  18. |     SALES| JAMES| 950|
  19. |  RESEARCH|  FORD|3000|
  20. |ACCOUNTING|MILLER|1300|
  21. +----------+------+----+
复制代码
通过Spark Web Console可以进一步查看TiSpark任务执行的过程。
4.png

通过使用TiSpark也可以连接不同数据源中的数据从而进行多表连接查询。下面的示例将两张表:一张表是部门表dept,该表存储在文件系统中,如:本地文件系统或者Hadoop HDFS中;另一张表是员工表emp,该表存储在TiDB中。具体的操作步骤如下:
(1)查看部门表dept中的数据
  1. # cat dept.csv
  2. 10,ACCOUNTING,NEW YORK
  3. 20,RESEARCH,DALLAS
  4. 30,SALES,CHICAGO
  5. 40,OPERATIONS,BOSTON
  6. # 提示:这是一个本地文件系统上的csv文件。
复制代码
(2)启动Spark Shell
  1. bin/spark-shell --master spark://192.168.79.10:7077 \
  2.     --jars /root/tools/tispark-assembly-3.0-2.5.3.jar
复制代码
(3)将部门表加载到Spark的DataFrame中
  1. scala> val deptDF = spark.read.format("csv").option("seq",",").schema("deptno int,dname string,loc string").load("/root/dept.csv")
  2.                                   
  3. # 提示:通过Spark可以加载本地文件系统、Hadoop HDFS、Hive等数据源中的数据。
复制代码
(4)将deptDF注册为视图。
  1. scala> deptDF.createOrReplaceTempView("dept")
复制代码
(5)通过TiSpark关联TiDB数据库中的员工表emp,执行多表查询。
  1. scala> spark.sql("use tidb_catalog")
  2. scala> spark.sql("select d.dname,e.ename,e.sal from dept d,scott.emp e where d.deptno=e.deptno").show
  3. # 输出的结果如下:
  4. +----------+------+----+                                                        
  5. |     dname| ename| sal|
  6. +----------+------+----+
  7. |  RESEARCH| SMITH| 800|
  8. |     SALES| ALLEN|1600|
  9. |     SALES|  WARD|1250|
  10. |  RESEARCH| JONES|2975|
  11. |     SALES|MARTIN|1250|
  12. |     SALES| BLAKE|2850|
  13. |ACCOUNTING| CLARK|2450|
  14. |  RESEARCH| SCOTT|3000|
  15. |ACCOUNTING|  KING|5000|
  16. |     SALES|TURNER|1500|
  17. |  RESEARCH| ADAMS|1100|
  18. |     SALES| JAMES| 950|
  19. |  RESEARCH|  FORD|3000|
  20. |ACCOUNTING|MILLER|1300|
  21. +----------+------+----+
复制代码
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

相关推荐

您需要登录后才可以回帖 登录 | 立即注册