Spark-1.6.1 SQL与Apache Hive SQL的兼容性

与Apache Hive的兼容性#

Spark SQL 被设计成与Hive Metastore(元数据), SerDes 和UDFs兼容. 目前Spark SQL里的 Hive SerDes 和 UDFs 是基于Hive 1.2.1, 同时 Spark SQL 可以连接不同版本的Hive Metastore (从 0.12.0 到 1.2.1. 可以查看Interacting with Different Versions of Hive Metastore ).

在Hive数据仓库中部署Spark SQL#

Spark SQL Thrift JDBC 服务是设计成与现有的Hive设备是"开箱即用"的兼容。你不需要修改现有Hive的Metastore(元数据)或更改数据的位置或表的分区等。

Spark SQL支持的Hive特性#

Spark SQL支持绝大多数的Hive特性,例如:

  • 支持的Hive查询语句,包括:

    • SELECT
    • GROUP BY
    • ORDER BY
    • CLUSTER BY
    • SORT BY
  • 所有Hive运算符,包括

    • 比较操作符(=, ⇔, ==, <>, <, >, >=, <=, etc)
    • 算术运算符(+, -, *, /, %, etc)
    • 逻辑运算符(AND, &&, OR, ||, etc)
    • 复杂类型构造器
    • 数学函数(sign,ln,cos,etc)
    • 字符串函数(instr,length,printf,etc)
  • 用户自定义函数(UDF)

  • 用户自定义聚合函数(UDAF)

  • 用户自定义序列化格式器(SerDes)

  • 窗口函数

  • Joins

    • JOIN
    • {LEFT|RIGHT|FULL} OUTER JOIN
    • LEFT SEMI JOIN
    • CROSS JOIN
  • Unions

    • 子查询SELECT col FROM ( SELECT a + b AS col from t1) t2
  • Sampling

  • Explain

  • 表分区,包括动态分区插入

  • 视图

  • 所有的Hive DDL函数,包括:

    • CREATE TABLE
    • CREATE TABLE AS SELECT
    • ALTER TABLE
  • 大部分的Hive数据类型,包括:

    • TINYINT
    • SMALLINT
    • INT
    • BIGINT
    • BOOLEAN
    • FLOAT
    • DOUBLE
    • STRING
    • BINARY
    • TIMESTAMP
    • DATE
    • ARRAY<>
    • MAP<>
    • STRUCT<>

不支持的Hive功能#

下面是当前不支持的Hive特性,其中大部分特性在实际的Hive使用中很少用到。

主要Hive特性

  • Tables with buckets:bucket是在一个Hive表分区内进行hash分区。Spark SQL当前不支持。

底层Hive特性

  • UNION type
  • Unique join
  • Column statistics collecting:当期Spark SQL不支持扫描收集列统计信息,只支持填充Hive Metastore的sizeInBytes列。

Hive 输入/输出格式

  • File format for CLI(命令行文件格式化): 这个功能用于在CLI显示返回结果,Spark SQL只支持TextOutputFormat
  • Hadoop archive(特殊的档案格式)

Hive优化
部分Hive优化还没有添加到Spark中。没有添加的Hive优化(比如索引)对Spark SQL这种in-memory计算模型来说不是特别重要。下列Hive优化将在后续Spark SQL版本中慢慢添加。

  • 块级别位图索引和虚拟列(用于建立索引)
  • 自动检测joins和groupbys的reducer数量:当前Spark SQL中需要使用“ SET spark.sql.shuffle.partitions=[num_tasks]; ”控制post-shuffle的并行度,不能自动检测。
  • 仅元数据查询:对于可以通过仅使用元数据就能完成的查询,当前Spark SQL还是需要启动任务来计算结果。
  • 数据倾斜标记:当前Spark SQL不遵循Hive中的数据倾斜标记
  • jion中STREAMTABLE提示:当前Spark SQL不遵循STREAMTABLE提示
  • 为查询结果合并多个小文件:如果查询结果包含多个小文件,Hive能合并小文件为几个大文件,避免HDFS Metadata溢出。当前Spark SQL不支持这个功能。

你可能感兴趣的:(Spark-1.6.1 SQL与Apache Hive SQL的兼容性)