hive的背景
Hive是基于Hadoop的一个数据仓库工具,它提供了以SQL语言为基础的数据处理和存储能力。Hive的目的是为了简化大数据的处理和分析过程,将结构化的数据转换成Hadoop上的分布式存储。Hive的底层技术是基于Hadoop的HDFS和MapReduce,通过这些技术,Hive能够实现数据查询、统计和分析等功能。
hive的特点
- 数据存储:Hive的数据存储是基于Hadoop的HDFS,所有的数据都会存储在HDFS中。
- 数据模型:Hive的数据模型主要分为表和分区。表是模仿关系型数据库的概念,而分区则是为了解决大数据量的问题,将数据按照不同的规则划分成多个区域。
- SQL语言:Hive支持类似于SQL的语言,称为HQL,通过HQL可以方便地进行数据查询、统计和分析。
- 数据映射:Hive可以将数据映射成不同的格式,比如文本、序列文件等,同时也支持自定义的映射函数。
hive的应用场景
- 数据仓库:Hive最适合的应用场景就是数据仓库。由于Hive能够支持海量的数据存储,并提供高效的数据查询和分析功能,使得它成为了数据仓库的首选工具。
- 数据报表:利用Hive的统计功能,可以生成各种数据报表,比如用户行为报表、营销效果报表等。
- 数据挖掘:Hive也适合进行数据挖掘的工作,通过Hive可以方便地对数据进行挖掘和分析,提取出有价值的信息。
hive的优势
- 成本低:Hive是基于Hadoop的,因此使用Hive进行大数据处理和分析时,无需购买昂贵的大型数据库,降低了成本。
- 可扩展性:由于Hive是基于Hadoop的,因此可以轻松地通过增加节点进行扩展,适应更大规模的数据处理需求。
- 数据安全:Hive支持数据加密和访问控制等安全机制,可以确保数据的安全性。
- 操作简便:使用HQL进行数据查询和分析,相对于复杂的MapReduce编程,更加简洁和易于理解。
hive的架构设计
Hive架构包含3个部分。
(1)Hive 客户端(Hive Clients)。Hive 为不同类型应用程序提供不同的驱动,使应用程序可通过Java、Python 等语言连接Hive并进行与RDBMS类似的SQL查询操作。对于Java应用程序,Hive 提供了JDBC驱动;对于其他应用程序,Hive提供了ODBC驱动。
(2)Hive 服务端(Hive Services)。客户端必须通过服务端与Hive交互,服务端主要包括CLI、Hive ServerHive Web Interface、Driver、Metastore等组件。
(3)Hive 存储与计算(Hive Storage and Computing)。Hive主要通过元数据存储数据库和Hadoop集群进红数据的存储与计算。Hive的元数据使用RDBMS存储,ive的据底储在HDES中外部分数据查询由MapReduce完成。
Hire的体验树如图1.2所示。
hive工作流程
1.(执行查询操作)Execute Query
命令行或Web UI之类的Hive接口将查询发送给Driver(任何数据库驱动程序,如JDBC,ODBC等)以执行。
2.(获取计划任务)Get plan
Driver借助查询编译器解析查询,检查语法和查询计划或查询需求。
3.(获取元数据信息)Get Metadata
编译器将元数据请求发送到Metastore(任何数据库)。
4.(发送元数据)
MetaStore将元数据作为对编译器的响应发送出去。
5.(发送计划任务)Send Plan
编译器检查需求并将计划重新发送给Driver。到目前为止,查询的解析和编译已经完成。
6.(执行计划任务)Execute Plan
Driver将执行计划发送到执行引擎。
7.(执行Job任务)Execute Job
在内部,执行任务的过程是MapReduce Job。执行引擎将Job发送到ResourceManager,(在这里注意,执行器在执行方案时,会判断:如果当前方案不涉及到MR组件,比如为表添加分区信息、比如字符串操作等,比如简单的查询操作等,此时就会直接和元数据库交互,然后去HDFS上去找具体数据。如果方案需要转化成MR job)ResourceManager位于Name节点中,并将job分配给datanode中的NodeManager。在这里,查询执行MapReduce任务.
7.1.(元数据操作)Metadata Ops 在执行的同时,执行引擎可以使用Metastore执行元数据操作。
8.(拉取结果集)Fetch Result 执行引擎将从datanode上获取结果集;
9.(发送结果集至driver)Send Results 执行引擎将这些结果值发送给Driver。
10.(driver将result发送至interface)Send Results Driver将结果发送到Hive接口