在现有的 Hive 仓库中部署
Shark 被设计为与现有的 Hive 安装 开箱即用。在集群中部署 Shark 时,无需修改现有的 Hive Metastore 或更改表的数据放置或分区。
支持的 Hive 功能
Shark 支持绝大多数 Hive 功能,例如:
- Hive查询语句,包括:
- 选择
- 通过...分组
- ORDER_BY
- CLUSTER_BY
- 排序方式
- 所有 Hive 操作员,包括:
- 关系运算符(=、⇔、==、<>、<、>、>=、<= 等)
- 算术运算符(+、-、*、/、% 等)
- 逻辑运算符(AND、&&、OR、|| 等)
- 复杂类型构造函数
- 数学函数(符号、ln、cos 等)
- 字符串函数(instr、length、prinf 等)
- 用户定义函数 (UDF)
- 用户定义的聚合函数 (UDAF)
- 用户定义的序列化格式 (SerDe's)
- 加入
- 工会
- 子查询
- SELECT col FROM (SELECT a + b AS col from t1) t2
- 采样
- 解释
- 分区表
- 所有 Hive DDL 函数,包括:
- 所有 Hive 数据类型,包括:
- 微信
- 小情报
- 情报局
- 大数据
- 布尔值
- 漂浮
- 双倍的
- 细绳
- 二进制
- 时间戳
- 数组<>
- 地图<>
- 结构<>
- 联合类型<>
不支持的 Hive 功能
下面是我们尚不支持的 Hive 功能列表。这些功能中的绝大多数很少用于 Hive 部署。
蜂巢的主要特点
- 带桶的表:桶是 Hive 表分区内的散列分区。鲨鱼不支持桶。
深奥的蜂巢功能
- 具有使用不同输入格式的分区的表:在 Shark 中,所有表分区都需要具有相同的输入格式。
- Non-equi outer join:对于使用具有非equi连接条件(例如条件“key <10”)的外部连接的不常见用例,Shark将为NULL元组输出错误结果。
- 唯一加入
- 单查询多插入
- 列统计信息收集:Shark 目前不会搭载扫描来收集列统计信息。
Hive 输入/输出格式
- CLI 的文件格式:对于显示回 CLI 的结果,Shark 仅支持 TextOutputFormat。
- Hadoop存档
Hive 优化 Spark 中还没有包含一些 Hive 优化。由于 Shark 的内存计算模型,其中一些(例如索引)不是必需的。其他的则用于 Spark 的未来版本。
- 块级位图索引和虚拟列(用于建立索引)
- 自动将连接转换为映射连接:对于连接一个大表和多个小表,Hive 会自动将连接转换为映射连接。我们将在下一个版本中添加此自动转换。
- 自动确定 join 和 groupbys 的 reducer 数量:目前在 Shark 中,您需要使用“set mapred.reduce.tasks=[num_tasks];”来控制 post-shuffle 的并行度。我们将在下一个版本中添加并行度的自动设置。
- 仅元数据查询:对于仅使用元数据可以回答的查询,Shark 仍会启动任务来计算结果。
- 倾斜数据标志:Shark 不遵循 Hive 中的倾斜数据标志。
- 连接中的 STREAMTABLE 提示:Shark 不遵循 STREAMTABLE 提示。
- 合并查询结果的多个小文件:如果结果输出包含多个小文件,Hive 可以选择性地将小文件合并为更少的大文件,以避免溢出 HDFS 元数据。鲨鱼不支持这一点。