zoukankan      html  css  js  c++  java
  • sparkSQL 简介

    一、Spark SQL的特点

    1、支持多种数据源:Hive、RDD、Parquet、JSON、JDBC等。
    2、多种性能优化技术:in-memory columnar storage、byte-code generation、cost model动态评估等。
    3、组件扩展性:对于SQL的语法解析器、分析器以及优化器,用户都可以自己重新开发,并且动态扩展。

    二、Spark SQL的性能优化技术简介

    1、内存列存储(in-memory columnar storage)
    内存列存储意味着,Spark SQL的数据,不是使用Java对象的方式来进行存储,而是使用面向列的内存存储的方式来进行存储。也就是说,每一列,作为一个数据存储的单位。从而大大优化了内存使用的效率。采用了内存列存储之后,减少了对内存的消耗,也就避免了gc大量数据的性能开销。

    2、字节码生成技术(byte-code generation)
    Spark SQL在其catalyst模块的expressions中增加了codegen模块,对于SQL语句中的计算表达式,比如select num + num from t这种的sql,就可以使用动态字节码生成技术来优化其性能。

    3、Scala代码编写的优化
    对于Scala代码编写中,可能会造成较大性能开销的地方,自己重写,使用更加复杂的方式,来获取更好的性能。比如Option样例类、for循环、map/filter/foreach等高阶函数,以及不可变对象,都改成了用null、while循环等来实现,并且重用可变的对象。

    三、Spark SQL and DataFrame

    Spark SQL是Spark中的一个模块,主要用于进行结构化数据的处理。它提供的最核心的编程抽象,就是DataFrame。同时Spark SQL还可以作为分布式的SQL查询引擎。Spark SQL最重要的功能之一,就是从Hive中查询数据。

    DataFrame,可以理解为是,以列的形式组织的,分布式的数据集合。它其实和关系型数据库中的表非常类似,但是底层做了很多的优化。DataFrame可以通过很多来源进行构建,包括:结构化的数据文件,Hive中的表,外部的关系型数据库,以及RDD。

    四、SQLContext
    要使用Spark SQL,首先就得创建一个创建一个SQLContext对象,或者是它的子类的对象,比如HiveContext的对象。

    Java版本:
    JavaSparkContext sc = ...;
    SQLContext sqlContext = new SQLContext(sc);

    Scala版本:
    val sc: SparkContext = ...
    val sqlContext = new SQLContext(sc)
    import sqlContext.implicits._

    五、HiveContext
    除了基本的SQLContext以外,还可以使用它的子类——HiveContext。HiveContext的功能除了包含SQLContext提供的所有功能之外,还包括了额外的专门针对Hive的一些功能。这些额外功能包括:使用HiveQL语法来编写和执行SQL,使用Hive中的UDF函数,从Hive表中读取数据。

    要使用HiveContext,就必须预先安装好Hive,SQLContext支持的数据源,HiveContext也同样支持——而不只是支持Hive。对于Spark 1.3.x以上的版本,都推荐使用HiveContext,因为其功能更加丰富和完善。

    Spark SQL还支持用spark.sql.dialect参数设置SQL的方言。使用SQLContext的setConf()即可进行设置。对于SQLContext,它只支持“sql”一种方言。对于HiveContext,它默认的方言是“hiveql”。

  • 相关阅读:
    js字符串分割
    Maven打包出错Failed to execute goal org.apache.maven.plugins:maven-surefire-plugin:2.22.2:test
    Kafka
    linux 切换PHP版本
    linux 查看服务状态及开发端口
    php消息队列
    windows 设置composer 淘宝镜像
    PHP使用CURL详解
    linux php7.0 安装redis扩展
    linux 快速查找安装目录方法
  • 原文地址:https://www.cnblogs.com/suwy/p/9519062.html
Copyright © 2011-2022 走看看