Hive基础
背景:
我们在学习一门知识时需要先了解其背景。在过去的时间中传统的Hadoop构架在时代的检验中学者们也逐渐发现其中存在的一些问题。
-
MapReduce编程的不便
Hadoop中的MapReduce计算模型虽然能将计算任务切分成多个小单元,发布到各个节点去运行,从而降低计算机成本并提高扩展性,但使用MapReduce进行数据处理必须掌握Java编程,门槛比较高。
-
HDFS没有Schema,不能使用sql语句
Hadoop分布式文件系统(HDFS)中,数据存储在HDFS上是没有Schema(模式)概念的,<!--Schema相当于表里面的基本信息,如列、字段、字段名称、字段间的分隔符等。-->,也可称为Schema信息。在HDFS上的数据文件通常是纯文本文件。
因此,在上述两个大的背景下,能否让用户将数据文件从一个现有的数据框架转移到Hadoop上来?如果成功了,是否可以通过SQL的方式进行处理?针对这些挑战,Hive在Facebook诞生了。
Hive的概述
过往
Apache Hive(简称Hive)是一个由Apache软件基金会维护的开源项目,由Facebook贡献。前身是Apache Hadoop的一个子项目,现在已成为Apache顶级项目。
概念
-
Hive是一个基于Hadoop的数据仓库工具;
-
可以将结构化的数据文件映射为一张数据库表;(相当于Schema)
-
提供SQL查询功能;
-
可以将SQL语句转换为MapReduce作业进行运行。
数据仓库与数据库的区别:
在上述概念中提到了数据仓库一词,很多初学者会将其与数据库混为一谈,其实两者间还是有较大的区别,其中最主要的区别是:
【数据仓库】适合联机分析处理(OLAP),通常是对历史数据进行分析。
【数据库】适合联机事务处理(OLTP),通常是在数据库联机时对业务数据进行添加、删除、修改、查询等操作。
Hive被设计成数据仓库,其各版本在缺省情况下并不支持事务,并不适合OLTP。
Hive在Hadoop生态系统中的位置
因为Hive的概念都是基于Hadoop而运作的,所以Hive必须依赖Hadoop而存在,寄生于HDFS,它在Hadoop生态系统中的位置如下图所示。
从上图可以可以得出以下结论:
-
运行Hive的必要环境是Hadoop的核心:HDFS、MapReduce、YARN。
-
Hive执行的本质仍是MapReduce。
-
Hive运行时并没有直接编写MapReduce执行效率高。
Hive与传统关系型数据库
因为Hive的运行语言中类SQL的语言HQL(Hive的SQL方言的简称),使其与传统关系型数据库(RDBMS)有很多相同的地方,其中最主要的是两大功能:查询和分析,又因为Hive的整体框架区别与数据库也导致了两者间差异也较为明显,下表为Hive与RDBMS的对比表。
对比项 | Hive | RDBMS |
---|---|---|
查询语言 | HQL | SQL |
数据存储 | HDFS | 块设备、本地文件系统 |
执行 | MapReduce(需转换) | Executor |
执行延迟 | 高(分布到各节点) | 低(时实) |
处理数据规模 | 大 | 小 |
事务 | 0.14版本后加入 | 支持 |
索引(查找) | 0.8版本后加入 | 索引复杂 |
除了上述区别外,通常RDBMS可以用于在线应用中,而Hive主要进行离线的大数据分析。
Hive的特点与优势
特定 | 优势 |
---|---|
HQL与SQL有着相似的语法,大大提高了开发效率 | 可扩展:可以自由扩展集群规模 |
支持运行在不同的计算框架上 | 可延展:支持用户自定义函数 |
支持HDFS与Hbase上的ad-hoc | 可容错:星型节点 |
支持用户自定义函数、脚本等 | 避免了编写复杂的MapReduce任务 |
支持Java数据库连接与开放数据库连接驱动,建立自身与ETI、BI根据的通道 | 减少了开发人员的学习成本 |
Hive架构简要介绍
Hive架构包含三部分:
(1)Hive客户端:必须通过服务端与Hive交互。
(2)Hive服务端:包括CLI、Hive Server、Hive Web Interface、Drive、Metastore等组件。
(3)Hive存储与计算:
-
Hive的元数据使用RDBMS存储;
-
Hive的数据存储在HDFS中;
-
大部分查询由MapReduce完成。
Hive工作流程
Hive适用场景
-
非结构化数据的离线分析统计场景(如:用户画像、舆情监测、社交网络分析,主题提取、情感分析、关键词提取、疾病预测、药物研发、医疗知识图谱构建等)
-
对实时性要求不高的场景(历史数据)
-
适用于大数据处理的场景(企业数据)
最后,本篇章是基于我所学所知进行的知识总结,如有误论,虚心接受指正。参考文献是《Hadoop数据仓库实战》,感兴趣的小伙伴可以对其进行深入阅读。我最近对一句话感触颇深”知识如果不与时代同步,只会变成障碍“,这句话虽然不完全适用于所有行业,但是在现今社会,科技时代,科技占生活的大头,其中计算机行业的发展更是日新月异,吐故纳新应是我们所具备的。(2024/03/07)