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并不支持此操作。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。