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

Copyright © 2024 MissRong
Powered by .NET 9.0 on Kubernetes