Spark进阶3

Spark

1.spark资源调度分析

在这里插入图片描述

  • 3大结论
    • 在默认情况下(在提交任务的时候没有设置–executor-cores选项),每一个Worker为当前的Application启动一个Executor,这个executor会使用这个Worker的所有cores和1G内存
    • 如果没有设置–total-executor-cores,则集群默认将剩余所有的(cores)核数全部分配给application
    • spreadOut :true(默认),分散启动

2.spark任务调度分析

  • 任务调度可以从Action算子开始,因为Action算子会触发一个job
  • 划分stage,以taskset的形式提交任务.DAGSchedule类中getMessingParentStages()方法切割job划分stage

在这里插入图片描述

3.sparkSQL

  • shark
    • 是基于spark计算框架之上且兼容Hive语法的SQL执行引擎.
    • Shark底层依赖于Hive的解析器,但对Hive的依赖太大很难长远发展,所以发展出了SparkSQL
  • sparkSQL
    • shark是它的前身,是parkSQL完全脱离了HIVE的限制
      • sparkSQL支持查询原生的RDD,(RDD是spark的核心概念,是spark能够高效的处理大数据的各种场景的基础)
      • 能够在java.scala中写sql语句,支持简单的SQL语法检查,能够在scala中写hive语句,访问hive,并将结果取回做为RDD使用
  • Spark on Hive & Hive on Spark
    • spark on hive
      • Hive只作为储存角色,Spark负责sql优化,执行
    • Hive on Spark
      • Hive即作为存储角色又负责sql优化.spark负责执行
  • Dataset&DataFrame
    • Dataset是一个分布式数据容器
    • 底层封装的是RDD,当RDD的泛型是Row类型的时候,我们也可以称它为DateFrame.(Dataset=DataFrame)
    • schema:掌握数据的结构信息
    • Dataset=RDD+schema

在这里插入图片描述

  • spark数据源
    • 可以是JSON格式的字符串,JDBC,parquent,Hive,HDFS
  • spark底层架构
    • 解析计划—>逻辑计划—>优化后的逻辑计划—>物理计划—>转换成spark任务执行

在这里插入图片描述

  • 谓词下推(predicate Pushdown)

在这里插入图片描述

4.创建Dataset的几种方式

  • 读取json文件创建dataset
  • 通过json格式的RDD创建dataset
  • 读取parquet文件创建Dataset
  • 非json格式的RDD创建dataset
    • 反射.将非json格式的RDD转换成Dataset
    • 动态创建.动态创建Schema将非json格式的RDD转换成Dataset
  • 读取JDBC中的数据创建Dataset(MySql为例)
  • 读取Hive中的数据加载成Dataset

5.行存储与列存储

在这里插入图片描述

  • 如图行存储下每一张表的数据都是放在一起的,但列存储下被分开保存了.

  • 数据写入上进行比较

    • 行存储的写入是一次性的,可以保证写入过程的成功或失败,数据的完整性
    • 列存储的写入由于需要将一行记录分拆成单列保存,所以写入次数会比行存储多,
    • 数据修改也是一种写入,行存储在指定的位置上写入一次,列存储需要定位多个列,分别写入,时间明显较长
  • 数据读取上进行比较

    • 读取数据时,行存储通常会将数据全部读取出来,如果只需要其中几列,就会存在冗余列,消除冗余列的过程通常在内存中进行
    • 列存储每次读取的数据是集合的一段或者全部,不存在冗余性问题
  • 数据分析上进行比较

    • 行存储因为在一行记录中保存了多种类型的数据,数据解析需要在多种数据类型之间频繁转换,这个操作很消耗CPU,增加了解析的时间
    • 列存储每一列数据的类型是同性质的,方便解析
  • 优缺点

    • 行存储的写入是一次性完成,消耗的时间比列存储少,并且能够保证数据的完整性,缺点是数据读取过程中会产生冗余数据,如果只有少量数据,此影响可以忽略;数量大可能会影响到数据的处理效率
    • 列存储在写入效率、保证数据完整性上都不如行存储,它的优势是在读取过程,不会产生冗余数据,这对数据完整性要求不高的大数据处理领域,比如互联网,犹为重要
  • 最后总结如下
    • 传统行式数据库的特性如下
      • 数据是按行存储的
      • 没有索引的查询使用大量I/O。比如一般的数据库表都会建立索引,通过索引加快查询效率
      • 建立索引和物化视图需要花费大量的时间和资源
      • 面对查询需求,数据库必须被大量膨胀才能满足需求
    • 列式数据库的特性如下
      • 数据按列存储,即每一列单独存放
      • 数据即索引
      • 只访问查询涉及的列,可以大量降低系统I/O
      • 每一列由一个线程来处理,即查询的并发处理性能高
      • 数据类型一致,数据特征相似,可以高效压缩。比如有增量压缩、前缀压缩算法都是基于列存储的类型定制的,所以可以大幅度提高压缩比,有利于存储和网络输出数据带宽的消耗

理,即查询的并发处理性能高
+ 数据类型一致,数据特征相似,可以高效压缩。比如有增量压缩、前缀压缩算法都是基于列存储的类型定制的,所以可以大幅度提高压缩比,有利于存储和网络输出数据带宽的消耗

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值