关于 Apache HIVE 的信息

Information on Apache HIVE

所以我想更好地理解 HIVE。我在以前的角色中曾短暂地使用过它,但我从来没有完全弄清楚它。我的问题是:

HIVE 是否也用于数据存储,或者严格来说是一种在 Hadoop 集群上查询数据的手段?换句话说,是否需要将数据移动到 HIVE database/environment 才能查询?还是HIVE可以直接查询到Hadoop集群?

谢谢!

简短回答: Hive 不是数据存储,它可以使用表(架构定义,SerDe 用于数据 serialization/deserialization 从存储中查询数据和数据位置在 create-table 语句中定义。

长答案:

数据存储在HDFS或其他S3(可完全脱离Hadoop集群)。

Hive 是一个数据库:它具有丰富的 SQL(DDL 和 DML)、包括统计信息和 tables 定义的元数据、访问授权、基于成本的优化器,并且可以使用不同的查询引擎: MR(MapReduce) 和 Tez。 Hive 与传统 RDBMS 的区别在于 Hive 使用 schema-on-read 概念:数据的存储方式和读取方式完全脱节,读取数据时应用 schema,数据文件可以通过一些外部进程添加进入 HDFS。

Hive 可以读取不同的结构化文件(如 JSON、Avro、CSV、Parquet、ORC 等)以及半结构化文件(使用 RegexSerDe 或任何其他甚至自定义 SerDe)。 Hive 还可以连接到其他 JDBC 源以便于集成并 read/write 连接到它们。

在 Hive 中,table 或分区是 HDFS 中存储数据文件的位置 + 元数据包含模式定义、SerDe、统计数据,访问授权.

您可以在某个现有位置之上创建 table,甚至可以在同一位置之上创建许多 table(即使具有不同的架构)。阅读关于 multiple tables on top of the same location and this answer: 关于 managed/external tables.

的回答

你可以直接把文件放到table位置或者使用HDFS命令删除文件,它会反映在Hive返回的数据集中,也支持LOAD INTO TABLE命令,它会把文件放到table 位置给你,你不需要知道位置路径。