·EMR 中 Hive 安装在路径在 EMR 节点的 /usr/local/service/hive 路径下。
·关于 Hive 更多的介绍,可以参考Apache Hive页面。
一、Hive 服务角色
| 角色名称 | 说明 |
| HiveServer2 | Hive 的 ThriftServer 服务,用于接收客户端的查询请求并进行 SQL 编译及解析,支持多客户端并发以及身份验证。一个 EMR 集群可部署多个 HiveServer2,支持拓展至 Router 节点并配置负载均衡。 |
| Hive MetaStore | Hive 的元数据服务, 用于维护 Hive Database 和 Hive Table 的元数据信息。该模块的元数据管理能力也被 Spark 、Trino 等引擎所集成。一个 EMR 集群可部署多个 Hive MetaStore,支持拓展至 Router 节点。 |
| Hive Client | Hive 客户端,提供 Beeline、JDBC 等应用驱动,可以向 HiveServer2 提交 SQL 作业。部署 Hive 服务的节点均会进行安装。 |
| Hive WebHCat | WebHCat 是为 HCatalog 提供 REST API 的服务,提供 Rest 接口,通过 Rest 执行 Hive 命令,提交 MapReduce 任务。一个集群内可部署多个 WebHCat,支持拓展至 Router 节点。 |
二、Hive 内部表与外部表
·内部表:Hive 管理内部表的元数据以及表的实际数据,使用 DROP 语法删除内部表的时候,表的元数据及对应的数据都会被删除。创建内部表后会将 HDFS 的文件映射成 Table,然后 Hive 的数据仓库生成对应的目录,EMR 默认的仓库路径为 /usr/hive/warehouse/${tablename},这个路径在 HDFS 上面,其中 ${tablename} 是你创建的表名。
·外部表:Hive 中的外部表和内部表很类似,但是其数据不是放在自己表所属的目录中,而是存放到其他地方。这样的好处是如果你要删除这个外部表,此外部表所指向的数据是不会被删除的,它只会删除外部表对应的元数据。
三、Hive 语法
弹性 MapReduce 中的 Hive 完全兼容开源社区语法,可通过 HiveQL社区语法手册 进行查阅。