spark-sql调优

本文深入探讨了SparkSQL的前世今生,从Shark到SparkSQL的转变。讲解了如何使用SparkSQL操作CSV文件和Hive,以及参数调优策略,如数据缓存、分区控制和广播变量。通过案例分析,解决了广播变量超时和小文件问题,提供了解决这些问题的方案和参数调整建议。
摘要由CSDN通过智能技术生成

sparkSQL概述

sparkSQL的前世今生

  • Shark是专门针对于spark的构建大规模数据仓库系统的一个框架
  • Shark与Hive兼容、同时也依赖于Spark版本
  • Hivesql底层把sql解析成了mapreduce程序,Shark是把sql语句解析成了Spark任务
  • 随着性能优化的上限,以及集成SQL的一些复杂的分析功能,发现Hive的MapReduce思想限制了Shark的发展。
  • 最后Databricks公司终止对Shark的开发
    • 决定单独开发一个框架,不在依赖hive,把重点转移到了sparksql这个框架上。

什么是sparkSQL

SparkSQL是apache Spark用来处理结构化数据的一个模块

sparkSQL读取sql数据

spark sql可以通过 JDBC 从关系型数据库中读取数据的方式创建DataFrame,通过对DataFrame一系列的计算后,还可以将数据再写回关系型数据库中

添加mysql连接驱动jar包

​
<dependency>
	<groupId>mysql</groupId>
	<artifactId>mysql-connector-java</artifactId>
	<version>5.1.38</version>
</dependency>

代码开发

import java.util.Properties
import org.apache.spark.SparkConf
import org.apache.spark.sql.{
   DataFrame, SparkSession}

//todo:利用sparksql加载mysql表中的数据
object DataFromMysql {
   

  def main(args: Array[String]): Unit = {
   
    //1、创建SparkConf对象
    val sparkConf: SparkConf = new SparkConf().setAppName("DataFromMysql").setMaster("local[2]")

    //2、创建SparkSession对象
    val spark: SparkSession = SparkSession.builder().config(sparkConf).getOrCreate()

    //3、读取mysql表的数据
    //3.1 指定mysql连接地址
    val url="jdbc:mysql://localhost:3306/mydb?characterEncoding=UTF-8"
    //3.2 指定要加载的表名
    val tableName="jobdetail"
    // 3.3 配置连接数据库的相关属性
    val properties = new Properties()

    //用户名
    properties.setProperty("user","root")
    //密码
    properties.setProperty("password","123456")

    val mysqlDF: DataFrame = spark.read.jdbc(url,tableName,properties)

    //打印schema信息
    mysqlDF.printSchema()

    //展示数据
    mysqlDF.show()

    //把dataFrame注册成表
    mysqlDF.createTempView("job_detail")

    spark.sql("select * from job_detail where city = '广东' ").show()

    spark.stop(<
Spark SQL调优参数可以分为以下几类: 1. Spark SQL的通用参数: - `spark.sql.shuffle.partitions`:控制shuffle操作时的分区数,默认值为200。 - `spark.sql.autoBroadcastJoinThreshold`:控制自动广播的表大小,默认为10MB。 - `spark.sql.broadcastTimeout`:控制广播超时时间,默认值为5分钟。 - `spark.sql.execution.arrow.enabled`:控制是否启用Arrow优化,默认为false。 2. Spark SQL的查询优化参数: - `spark.sql.cbo.enabled`:控制是否启用基于成本的优化器(CBO),默认为false。 - `spark.sql.statistics.histogram.enabled`:控制是否启用直方图统计信息,默认为false。 - `spark.sql.statistics.ndv.scale.factor`:控制基数估计的规模因子,默认为2.0。 - `spark.sql.inMemoryColumnarStorage.compressed`:控制是否启用列式存储压缩,默认为true。 - `spark.sql.adaptive.enabled`:控制是否启用自适应查询执行,默认为false。 3. Spark SQL的内存管理参数: - `spark.sql.shuffle.memoryFraction`:控制shuffle操作的内存占比,默认为0.2。 - `spark.sql.execution.arrow.maxRecordsPerBatch`:控制Arrow批处理的最大行数,默认为1024。 - `spark.sql.execution.sort.externalSorter.maxMemoryUsage`:控制外部排序的内存占比,默认为0.4。 - `spark.sql.execution.arrow.fallback.enabled`:控制是否开启Arrow优化失败时的回退机制,默认为true。 4. Spark SQL的调试参数: - `spark.sql.debug.maxToStringFields`:控制最大的toString字段数目,默认为25。 - `spark.sql.debug.maxPlanStringLength`:控制最大的计划字符串长度,默认为1000。 以上仅列举了一部分常用的Spark SQL调优参数,具体使用时需要根据实际情况进行选择和调整。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值