Spark SQL 教程与Hive的兼容性
Posted 顧棟
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spark SQL 教程与Hive的兼容性相关的知识,希望对你有一定的参考价值。
文章目录
Compatibility with Apache Hive
Spark SQL 旨在与 Hive Metastore、SerDes 和 UDF 兼容。 目前 Hive SerDes 和 UDF 基于 Hive 1.2.1,Spark SQL 可以连接到不同版本的 Hive Metastore(从 0.12.0 到 2.1.1。另见与不同版本的 Hive Metastore 交互)。
Deploying in Existing Hive Warehouses
Spark SQL Thrift JDBC 服务器旨在与现有 Hive 安装“开箱即用”兼容。 您不需要修改现有的 Hive Metastore 或更改表的数据放置或分区。
Supported Hive Features
Spark SQL 支持绝大多数 Hive 功能,例如:
- Hive query statements, including:
SELECT
GROUP BY
ORDER BY
CLUSTER BY
SORT BY
- All Hive operators, including:
- Relational operators (
=
,⇔
,==
,<>
,<
,>
,>=
,<=
, etc) - Arithmetic operators (
+
,-
,*
,/
,%
, etc) - Logical operators (
AND
,&&
,OR
,||
, etc) - Complex type constructors
- Mathematical functions (
sign
,ln
,cos
, etc) - String functions (
instr
,length
,printf
, etc)
- Relational operators (
- User defined functions (UDF)
- User defined aggregation functions (UDAF)
- User defined serialization formats (SerDes)
- Window functions
- Joins
JOIN
{LEFT|RIGHT|FULL} OUTER JOIN
LEFT SEMI JOIN
CROSS JOIN
- Unions
- Sub-queries
SELECT col FROM ( SELECT a + b AS col from t1) t2
- Sampling
- Explain
- Partitioned tables including dynamic partition insertion
- View
- All Hive DDL Functions, including:
CREATE TABLE
CREATE TABLE AS SELECT
ALTER TABLE
- Most Hive Data types, including:
TINYINT
SMALLINT
INT
BIGINT
BOOLEAN
FLOAT
DOUBLE
STRING
BINARY
TIMESTAMP
DATE
ARRAY<>
MAP<>
STRUCT<>
Unsupported Hive Functionality
以下是我们尚不支持的 Hive 功能列表。 大多数这些功能很少用于 Hive 部署。
Major Hive Features
- Tables with buckets:bucket 是 Hive 表分区内的哈希分区。 Spark SQL 尚不支持存储桶。
Esoteric Hive Features
UNION
type- Unique join
- Column statistics collecting: Spark SQL 目前不搭载扫描来收集列统计信息,仅支持填充 hive Metastore 的 sizeInBytes 字段。
Hive Input/Output Formats
- File format for CLI:对于显示回 CLI 的结果,Spark SQL 仅支持 TextOutputFormat。
- Hadoop archive
Hive Optimizations
少数 Hive 优化尚未包含在 Spark 中。 由于 Spark SQL 的内存计算模型,其中一些(例如索引)不太重要。 其他的则用于 Spark SQL 的未来版本。
- 块级位图索引和虚拟列(用于构建索引)
- 自动确定joins和groupbys的reducer数量:目前在Spark SQL中,你需要使用“
SET spark.sql.shuffle.partitions=[num_tasks];
”来控制post-shuffle的并行度。 - 仅元数据查询:对于仅使用元数据可以回答的查询,Spark SQL 仍会启动任务来计算结果。
- 倾斜数据标志:Spark SQL 不遵循 Hive 中的倾斜数据标志。
- 连接中的
STREAMTABLE
提示:Spark SQL 不遵循STREAMTABLE
提示。 - 为查询结果合并多个小文件:如果结果输出包含多个小文件,Hive可以选择将小文件合并成较少的大文件,以避免溢出HDFS元数据。 Spark SQL 不支持。
Hive UDF/UDTF/UDAF
Spark SQL 并不支持 Hive UDF/UDTF/UDAF 的所有 API。 以下是不受支持的 API:
getRequiredJars
和getRequiredFiles
(UDF
和GenericUDF
)是自动包含此 UDF 所需的额外资源的函数。- 尚不支持
GenericUDTF
中的initialize(StructObjectInspector)
。 Spark SQL 当前仅使用不推荐使用的接口initialize(ObjectInspector[])
。 configure
(GenericUDF
、GenericUDTF
和GenericUDAFEvaluator
)是一个用MapredContext
初始化函数的函数,不适用于Spark。close
(GenericUDF
和GenericUDAFEvaluator
)是一个释放相关资源的函数。 任务完成后,Spark SQL 不会调用此函数。reset
(GenericUDAFEvaluator
)是一个重新初始化聚合以重用相同聚合的函数。 Spark SQL 目前不支持聚合复用。getWindowingEvaluator
(GenericUDAFEvaluator
)是一个通过在固定窗口上评估聚合来优化聚合的函数。
Incompatible Hive UDF
以下是 Hive 和 Spark 生成不同结果的场景:
SQRT(n)
如果 n < 0,Hive 返回 null,Spark SQL 返回 NaN。ACOS(n)
如果 n < -1 或 n > 1,Hive 返回 null,Spark SQL 返回 NaN。ASIN(n)
如果 n < -1 或 n > 1,Hive 返回 null,Spark SQL 返回 NaN。
以上是关于Spark SQL 教程与Hive的兼容性的主要内容,如果未能解决你的问题,请参考以下文章
Flume+Spark+Hive+Spark SQL离线分析系统
Flume+Spark+Hive+Spark SQL离线分析系统