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

與Apache Hive的兼容性#

Spark SQL 被設(shè)計(jì)成與Hive Metastore(元數(shù)據(jù)), SerDes 和UDFs兼容. 目前Spark SQL里的 Hive SerDes 和 UDFs 是基于Hive 1.2.1, 同時(shí) Spark SQL 可以連接不同版本的Hive Metastore (從 0.12.0 到 1.2.1. 可以查看Interacting with Different Versions of Hive Metastore ).

在Hive數(shù)據(jù)倉庫中部署Spark SQL#

Spark SQL Thrift JDBC 服務(wù)是設(shè)計(jì)成與現(xiàn)有的Hive設(shè)備是"開箱即用"的兼容。你不需要修改現(xiàn)有Hive的Metastore(元數(shù)據(jù))或更改數(shù)據(jù)的位置或表的分區(qū)等。

Spark SQL支持的Hive特性#

Spark SQL支持絕大多數(shù)的Hive特性,例如:

  • 支持的Hive查詢語句,包括:

    • SELECT
    • GROUP BY
    • ORDER BY
    • CLUSTER BY
    • SORT BY
  • 所有Hive運(yùn)算符,包括

    • 比較操作符(=, ?, ==, <>, <, >, >=, <=, etc)
    • 算術(shù)運(yùn)算符(+, -, *, /, %, etc)
    • 邏輯運(yùn)算符(AND, &&, OR, ||, etc)
    • 復(fù)雜類型構(gòu)造器
    • 數(shù)學(xué)函數(shù)(sign,ln,cos,etc)
    • 字符串函數(shù)(instr,length,printf,etc)
  • 用戶自定義函數(shù)(UDF)

  • 用戶自定義聚合函數(shù)(UDAF)

  • 用戶自定義序列化格式器(SerDes)

  • 窗口函數(shù)

  • 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

  • 表分區(qū),包括動態(tài)分區(qū)插入

  • 視圖

  • 所有的Hive DDL函數(shù),包括:

    • CREATE TABLE
    • CREATE TABLE AS SELECT
    • ALTER TABLE
  • 大部分的Hive數(shù)據(jù)類型,包括:

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

不支持的Hive功能#

下面是當(dāng)前不支持的Hive特性,其中大部分特性在實(shí)際的Hive使用中很少用到。

主要Hive特性

  • Tables with buckets:bucket是在一個(gè)Hive表分區(qū)內(nèi)進(jìn)行hash分區(qū)。Spark SQL當(dāng)前不支持。

底層Hive特性

  • UNION type
  • Unique join
  • Column statistics collecting:當(dāng)期Spark SQL不支持掃描收集列統(tǒng)計(jì)信息,只支持填充Hive Metastore的sizeInBytes列。

Hive 輸入/輸出格式

  • File format for CLI(命令行文件格式化): 這個(gè)功能用于在CLI顯示返回結(jié)果,Spark SQL只支持TextOutputFormat
  • Hadoop archive(特殊的檔案格式)

Hive優(yōu)化
部分Hive優(yōu)化還沒有添加到Spark中。沒有添加的Hive優(yōu)化(比如索引)對Spark SQL這種in-memory計(jì)算模型來說不是特別重要。下列Hive優(yōu)化將在后續(xù)Spark SQL版本中慢慢添加。

  • 塊級別位圖索引和虛擬列(用于建立索引)
  • 自動檢測joins和groupbys的reducer數(shù)量:當(dāng)前Spark SQL中需要使用“ SET spark.sql.shuffle.partitions=[num_tasks]; ”控制post-shuffle的并行度,不能自動檢測。
  • 僅元數(shù)據(jù)查詢:對于可以通過僅使用元數(shù)據(jù)就能完成的查詢,當(dāng)前Spark SQL還是需要啟動任務(wù)來計(jì)算結(jié)果。
  • 數(shù)據(jù)傾斜標(biāo)記:當(dāng)前Spark SQL不遵循Hive中的數(shù)據(jù)傾斜標(biāo)記
  • jion中STREAMTABLE提示:當(dāng)前Spark SQL不遵循STREAMTABLE提示
  • 為查詢結(jié)果合并多個(gè)小文件:如果查詢結(jié)果包含多個(gè)小文件,Hive能合并小文件為幾個(gè)大文件,避免HDFS Metadata溢出。當(dāng)前Spark SQL不支持這個(gè)功能。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容