大数据-Spark SQL性能优化

Spark SQL性能优化

一·、内存中缓存表的数据

scala代码
spark-shell --master spark://hadoop1:7077 --jars /root/temp/mysql-connector-java-8.0.13.jar --driver-class-path /root/temp/mysql-connector-java-8.0.13.jar
val mysql = spark.read.format("jdbc").option("user","destiny").option("password","destiny").option("url","jdbc:mysql://192.168.138.1:3306/data?serverTimezone=GMT%2B8").option("dbtable","employee").load
mysql.createOrReplaceTempView("employee")
spark.sqlContext.cacheTable("employee")
spark.sql("select * from employee").show

结果
在这里插入图片描述

二·、性能优化相关参数

(1)数据缓存到内存中的优化参数

spark.sql.inMemoryColumnarStorage,compressed

默认为true

Spark SQL将会基于统计信息自动地为每一列选择一种亚索编码方式

spark.sql.inMemoryColumnarStorage.batchSize

默认为10000

缓存批处理大小。缓存数据时,较大的批处理大小可以提高内存利用率和压缩率,但同时也会带来COM(out of memory)的风险

(2)其他性能相关的配置选项(不推荐手动修改)

spark.sql.files.maxPartitionBytes

默认为128MB

读取文件时单个分区可容纳的最大字节数

spark.sql.files.openCostInBytes

默认为4M

打开文件的估算成本,按照同一时间能够扫描的字节数来测量。当往一个分区写入多个文件的时候会使用。高估更好,这样的话小文件分区将比大文件分区更快

spark.sql.autoBroadcastJoinThreshold

默认为10M

用于配置一个表在执行join操作时能够广播给所有worker节点的最大字节大小。通过将这个值设置为-1可以禁用广播。注意,当前数据统计仅支持已经运行了ANALYZE TABLE COMPUTE STATISTICE noscan 命令的Hive Metastore表

spark.sql.shuffle.partitions

默认为200

用于配置join或聚合操作混洗(shuffle)数据时使用的分区数

发布了131 篇原创文章 · 获赞 12 · 访问量 6万+

猜你喜欢

转载自blog.csdn.net/JavaDestiny/article/details/97493636