首页 理论教育 Hive的兼容性问题探讨

Hive的兼容性问题探讨

时间:2023-06-21 理论教育 版权反馈
【摘要】:Spark SQL与Hive MetaStore、SerDes和UDFs相兼容。目前,Spark SQL基于Hive 0.12.0和Hive 0.13.1。Spark SQL Thrift JDBC Server设计上采用“开箱即用”的理念,与已安装的Hive兼容,即不需要修改现有的Hive MetaStore或改变数据位置、表的分区等。大多数Hive数据类型● TINYINT。主要的Hive功能● 有buckets的表:bucket是Hive表分区中的哈希分区。

Hive的兼容性问题探讨

Spark SQL与Hive MetaStore、SerDes和UDFs相兼容。目前,Spark SQL基于Hive 0.12.0和Hive 0.13.1。Spark SQL Thrift JDBC Server设计上采用“开箱即用”的理念,与已安装的Hive兼容,即不需要修改现有的Hive MetaStore或改变数据位置、表的分区等。

Spark SQL支持Hive如下的大部分功能。

(1)Hive查询语句

● SELECT。

● GROUP BY。

● ORDER BY。

● CLUSTER BY。

● SORT BY。

(2)Hive的所有操作符

● 关系操作(=,⇔,==,<>,<,>,>=,<=等)。

● 算数操作(+,-,*,/,%等)。

● 逻辑操作(AND,&&,OR,||等)。

● 复杂类型构造器。

数学函数(sign,In,cos等)。

● 字符串函数(instr,length,printf等)。

(3)用户自定义函数

(4)用户自定义聚集函数

(5)用户自定义序列化格式

(6)连接操作

● JOIN。

● {LEFT|RIGHT|FULL}OUTER JOIN。

● LEFT SEMI JOIN。

● CROSS JOIN。

(7)联合操作

(8)子查询

(9)采样操作

(10)解释操作

(11)分区表

(12)视图

(13)所有的Hive DLL函数

● CREATE TABLE。

● CREATE TABLE AS SELECT。

● ALTER TABLE。(www.xing528.com)

(14)大多数Hive数据类型

● TINYINT。

● CMALLINT。

● INT。

● BIGINT。

● BOOLEAN。

● FLOAT。

● DOUBLE。

● STRING。

● BINARY。

● TIMESTAMP。

● ARRAY<>。

● MAP<>。

● STRUCT<>。

下面列出了不支持的Hive功能,这些功能很少会在Hive部署的过程中使用。

(1)主要的Hive功能

● 有buckets的表:bucket是Hive表分区中的哈希分区。Spark SQL目前不支持buckets表。

(2)复杂Hive功能

● UNION类型。

● Unique join。

● 列统计信息收集:Spark SQL不扫描并收集列的统计信息,仅支持填充Hive MetaStore的sizeInBytes值。

(3)Hive输入/输出格式

● 输出到客户端的文件格式:Spark SQL只支持TextOutputFormat格式。

● Hadoop archive。

(4)Hive优化

● 块级位图索引和虚拟列(用于建立索引)。

● 自动将join操作转变为map join操作:当一个大表与多个小表进行join操作时,Hive会自动将join操作转变为map join操作,在下个版本中会加入这种自动转换机制。

● 对于join操作和groupby操作,Hive会自动决定reducer的数量:目前在Spark SQL中,需要使用命令“SET spark.sql.shuffle.partitions=[num_tasks]”来控制post-shuffle操作的并行度。

● 元数据可供查询:Hive可以通过只使用元数据来返回查询的结果,但Spark SQL仍然会启动任务来计算结果。

● 偏斜数据标志:Spark SQL并不遵循Hive中的偏斜数据标志。

● STREAMTABLE hint in join:Spark SQL不遵循STREAMTABLE的提示。

● 将查询得到的多个小文件合并:如果结果输出中包含很多小文件,Hive能够选择性地将这些小文件合并成几个大文件,这样可以避免HDFS中元数据的溢出,但Spark SQL并不支持此操作。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈