sparksql读取mysql内存_Spark 2.x管理与开发-Spark SQL-性能优化(一)在内存中缓存数据(最常用最有效)...

本文介绍了如何使用Spark SQL进行性能优化,通过将数据从MySQL读取并缓存在内存中,显著提高查询速度。详细步骤包括从Oracle数据库读取数据,注册DataFrame为表,缓存表,以及清理缓存的过程。
摘要由CSDN通过智能技术生成

Spark 2.x管理与开发-Spark SQL-性能优化(一)在内存中缓存数据(最常用最有效)

性能调优主要是将数据放入内存中操作。

通过spark.cacheTable("tableName")或者dataFrame.cache()。使用spark.uncacheTable("tableName")来从内存中去除table。

Demo案例:

1.从Oracle数据库中读取数据,生成DataFrame

val oracleDF = spark.read.format("jdbc")

.option("url","jdbc:oracle:thin:@192.168.88.101:1521/orcl.example.com")

.option("dbtable","scott.emp")

.option("user","scott")

.option("password","tiger").load

2.将DataFrame注册成表:

oracleDF.registerTempTable("emp")

3.执行查询,并通过Web Console监控执行的时间

spark.sql("select * from emp").show

9ed45752ac677eec75fd184509b5e197.png

4.将表进行缓存,并查询两次,并通过Web Console监控执行的时间

spark.sqlContext.cacheTable("emp")

fe90baf7b9564a48af590cc4258de471.png

5.清空缓存:

spark.sqlContext.cacheTable("emp")

spark.sqlContext.clearCache

**********自己操作*********

1)概述:

与RDD相似,

在内存中缓存表的数据

把数据缓存到内存中,可以通过直接读取内存中的值来提高性能。

SparkSession.sqlContext.cacheTable(“要缓存的表名”)

----------------------------------------------------------

2)开始操作:

注意:

因为当前操作是要Spark读取MySQL中的数据,所以在启动Spark之前要将之前连接Hive时用的和Hive相关的配置文件都移走(我这里就将这些文件移动到了tmp_files下的spark-hiveHA-hadoopHA目录下了)

29d439a21a0ed0540163102f5f6cad3e.png 

d5f39159fe7b2cd7e5875e0e6a416837.png

972cea2e9abffe95da827341ffdfc170.png

(1)启动

接下来启动Spark

启动Spark-shell:

[root@bigdata111 bin]# ./spark-shell --master spark://bigdata111:7077 --jars /usr/local/mysql-connector-java-8.0.11.jar  --driver-class-path /usr/local/mysql-connector-java-8.0.11.jar

(2)读取MySQL数据

scala> val mysqlDF=spark.read.format("jdbc").option("url","jdbc:mysql://192.168.212.1:3306/xinrong?serverTimezone=UTC&characterEncoding=utf-8&useSSL=false&allowPublicKeyRetrieval=true").option("user","root").option("password","123456").option("dbtable","student").option("driver","com.mysql.jdbc.Driver").load

(3)建临时的表

scala> mysqlDF.registerTempTable("student")

warning: there was one deprecation warning; re-run with -deprecation for details

这和视图的创建类似,只是视图里没有数据,而表中有数据

(4)开始查询

scala> spark.sql("select * from student").show

d94bd8dc6c2c61bdf5c6c5c79be0b7b9.png

(5)缓存

scala> spark.sqlContext.cacheTable("student")

和RDD类似,这步是标识student表要缓存

再次查询,依然从MySQL中读取数据,这次是将结果存入了缓存中

效果和刚才一样:

277927a11acc761f6aae885343d74acf.png

第三次查询,是从缓存中读取的结果数据,效果同上

现在查看Spark的可视化页面,可以看到内存中缓存数据确实可将性能优化很多:

c2a35c752a404e42366291c19fb85ec7.png

(6)清空缓存

spark.sqlContext.clearCache

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值