• 大数据课程K20——Spark的SparkSQL概述


    文章作者邮箱:yugongshiye@sina.cn              地址:广东惠州

     ▲ 本章节目的

    ⚪ 了解Spark的SparkSQL由来;

    ⚪ 了解Spark的SparkSQL特点;

    ⚪ 了解Spark的SparkSQL优势;

    ⚪ 掌握Spark的SparkSQL入门;

    一、SparkSQL概述

    1. 概述

    Spark为结构化数据处理引入了一个称为SparkSQL的编程模块。它提供了一个称为DataFrame(数据框)的编程抽象,DF的底层仍然是RDD,并且可以充当分布式SQL查询引擎。

    2. SparkSQL的由来

    SparkSQL的前身是Shark。在Hadoop发展过程中,为了给熟悉RDBMS但又不理解MapReduce的技术人员提供快速上手的工具,Hive应运而生,是当时唯一运行在hadoop上的SQL-on-Hadoop工具。但是,MapReduce计算过程中大量的中间磁盘落地过程消耗了大量的I/O,运行效率较低。

    后来,为了提高SQL-on-Hadoop的效率,大量的SQL-on-Hadoop工具开始产生,其中表现较为突出的是:

    1. MapR的Drill

    2. Cloudera的Impala

    3. Shark

    其中Shark是伯克利实验室Spark生态环境的组件之一,它基于Hive实施了一些改进,比如引入缓存管理,改进和优化执行器等,并使之能运行在Spark引擎上,从而使得SQL查询的速度得到10-100倍的提升。

    但是,随着Spark的发展,对于野心勃勃的Spark团队来说,Shark对于hive的太多依赖(如采用hive的语法解析器、查询优化器等等),制约了Spark的One Stack rule them all的既定方针,制约了spark各个组件的相互集成,所以提出了sparkSQL项目。

    SparkSQL抛弃原有Shark的代码,汲取了Shark的一些优点,如内存列存储(In-Memory Columnar Storage)、Hive兼容性等,重新开发了SparkSQL代码。

    由于摆脱了对hive的依赖性,SparkSQL无论在数据兼容、性能优化、组件扩展方面都得到了极大的方便。

    2014年6月1日,Shark项目和SparkSQL项目的主持人Reynold Xin宣布:停止对Shark的开发,团队将所有资源放SparkSQL项目上,至此,Shark的发展画上了句话。

    3. SparkSQL特点

    1. 引入了新的RDD类型SchemaRDD,可以像传统数据库定义表一样来定义SchemaRDD

    2. 在应用程序中可以混合使用不同来源的数据,如可以将来自HiveQL的数据和来自SQL的数据进行Join操作。

    3. 内嵌了查询优化框架,在把SQL解析成逻辑执行计划之后,最后变成RDD的计算。

    4. SparkSQL优化

    主要sparkSQL在下面几点做了优化:

    1. 内存列存储(In-Memory Columnar Storage)

    列存储的优势:

    ①海量数据查询时,不存在冗余列问题。如果是基于行存储,查询时会产生冗余列,消除冗余列一般在内存中进行的。或者基于行存储的查询,实现物化索引(建立B-tree B+tree),但是物化索引也是需要耗费cpu的

    ②基于列存储,每一列数据类型都是同质的,好处一可以避免数据在内存中类型的频繁转换。好处二可以采用更高效的压缩算法,比如增量压缩算法,二进制压缩算法。性别:男  女  男  女  0101

      SparkSQL的表数据在内存中存储不是采用原生态的JVM对象存储方式,而是采用内存列存储,如下图所示。

    该存储方式无论在空间占用量读取吞吐率上都占有很大优势。

    对于原生态的JVM对象存储方式,每个对象通常要增加12-16字节的额外开销(toString、hashcode等方法),如对于一个270MB的电商的商品表数据&

  • 相关阅读:
    hbase 集成 phoenix 实现 sql 化
    什么是运营商网关取号​
    计算机系统(8)----- 进程的状态和转换
    Apache POI使用
    Shell基础— 变量定义的规则和分类
    华为云两台机器内网互联
    char s1[len + 1]; 报错说需要常量?
    Web学习笔记-中期项目(拳皇)
    mysql同一个数据值,获取最新的一条数据
    Linux 指令心法(十)`head` 显示文本文件的开头部分
  • 原文地址:https://blog.csdn.net/u013955758/article/details/132567582