Spark 2.x管理与开发-Spark SQL-性能优化(一)在内存中缓存数据(最常用最有效)
Posted on 2020-07-30 00:07 MissRong 阅读(1163) 评论(0) 编辑 收藏 举报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
4.将表进行缓存,并查询两次,并通过Web Console监控执行的时间
spark.sqlContext.cacheTable("emp")
5.清空缓存:
spark.sqlContext.cacheTable("emp")
spark.sqlContext.clearCache
**********自己操作*********
1)概述:
与RDD相似,
在内存中缓存表的数据
把数据缓存到内存中,可以通过直接读取内存中的值来提高性能。
SparkSession.sqlContext.cacheTable(“要缓存的表名”)
----------------------------------------------------------
2)开始操作:
注意:
因为当前操作是要Spark读取MySQL中的数据,所以在启动Spark之前要将之前连接Hive时用的和Hive相关的配置文件都移走(我这里就将这些文件移动到了tmp_files下的spark-hiveHA-hadoopHA目录下了)
(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
(5)缓存
scala> spark.sqlContext.cacheTable("student")
和RDD类似,这步是标识student表要缓存
再次查询,依然从MySQL中读取数据,这次是将结果存入了缓存中
效果和刚才一样:
第三次查询,是从缓存中读取的结果数据,效果同上
现在查看Spark的可视化页面,可以看到内存中缓存数据确实可将性能优化很多:
(6)清空缓存
spark.sqlContext.clearCache