Apache Hive
The Apache Hive ™ is a distributed, fault-tolerant data warehouse system that enables analytics at a massive scale. Hive Metastore(HMS) provides a central repository of metadata that can easily be analyzed to make informed, data driven decisions, and therefore it is a critical component of many data lake architectures. Hive is built on top of Apache Hadoop and supports storage on S3, adls, gs etc though hdfs. Hive allows users to read, write, and manage petabytes of data using SQL.
Hive 由 Facebook 实现并开源,是基于 HDFS 的 MapReduce 计算框架,对存储在 HDFS 中的数据进行分析和管理。Hive的本质是将 SQL 语句转换为 MapReduce 任务运行,使不熟悉 MapReduce 的用户很方便地利用 HQL 处理和计算 HDFS 上的结构化的数据,适用于离线的批量数据计算。
Hive 特点
可扩展
Hive 可以自由的扩展集群的规模,一般情况下不需要重启服务。
延展性
Hive 支持用户自定义函数,用户可以根据自己的需求来实现自己的函数。
容错
良好的容错性,节点出现问题 SQL 仍可完成执行。
Hive 问题
不支持事务
数据库支持事务,可读可写;而hive不支持事务,一般用于读多写少的情况,不建议改动数据,因为数据存储在 HDFS 中,而 HDFS 的文件不支持修改;
*hive 在0.14以后的版本支持事务,前提是文件格式为 orc 格式,同时必须分桶,还必须显式声明 transactional=true
延迟
hive 延迟比较大,因其底层是 MapReduce,执行效率较慢。但当数据规模较大的情况下,hive的并行计算优势就体现出来了,数据库的效率就不如 hive 了
索引
hive 不支持索引,查询的时候是全表扫描,这也是其延迟大的原因之一
其它
hive 默认将元数据存储在 derby 数据库中,但其仅支持单线程操作。
而且当在切换目录后,重新进入 Hive 会找不到原来已经创建的数据库和表,因此一般用 MySQL 存储元数据。
分割符
Hive中默认的分割符为:
列:^A
行:\n
在数据文件中显示为:"1000^AHello, World!\n",数据中如果包含:"\001","\n"等分隔符,需要提前处理掉。
如果需要自定义分隔符,需要设置:
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '\t'
LINES TERMINATED BY '\n'