Spark 2.x管理與開發-Spark SQL-性能優化(一)在內存中緩存數據(最常用最有效)


 

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM