首页 > 技术文章 > hive简介

dcx-1993 2019-04-16 17:43 原文

一.什么是hive

Hive最初是应Facebook每天产生的海量新兴社会网络数据进行管理和机器学习的需求而产生和发展的。

那么到底什么是hive呢?首先我们看看hive官网的wiki上是如何介绍hive的

wiki地址:(https://cwiki.apache.org/confluence/display/HIVE)

The Apache Hive™ data warehouse software facilitates reading, writing, and managing large datasets residing in distributed storage and queried using SQL syntax.

Built on top of Apache Hadoop™, Hive provides the following features:

Tools to enable easy access to data via SQL, thus enabling data warehousing tasks such as extract/transform/load (ETL), reporting, and data analysis.

A mechanism to impose structure on a variety of data formats

Access to files stored either directly in Apache HDFS™ or in other data storage systems such as Apache HBase™

Query execution via Apache Tez™, Apache Spark™, or MapReduce

Procedural language with HPL-SQL

上面英文的大致意思是:

Apache Hive™数据仓库软件可以方便地读取、写入和管理驻留在分布式存储中并使用SQL语法查询的大型数据集。

支持通过SQL轻松访问数据的工具,从而支持数据仓库任务,如提取/转换/加载(ETL)、报告和数据分析。

是一种将结构强加于各种数据格式的机制。

访问直接存储在Apache HDFS™或其他数据存储系统(如Apache HBase™)中的文件。

通过Apache Tez™、Apache Spark™或MapReduce执行查询。

使用pl - sql的过程语言。

那么,现在自己总结下:

1.Hive由Facebook实现并开源,贡献给apache基金会;

2.Hive是基于Hadoop的一个数据仓库工具;

hive底层仍然是hadoop,hive与hadoop分不了家,hive仅仅相当于一个hadoop上层的应用组件

相信很多人都用过数据库,那么,数据仓库和数据库的区别是什么呢:

1).概念上:

数据库:用于管理精细化数据 , 一般情况下存储计算结果数据,分库分表进行存储

数据仓库:更像咱们说的打包的过程,里面存储的数据并没有细化区分,仅仅是一个数据管理

2).用途上:

数据库:OLTP On-Line Transaction Processing 联机事务处理,支持增删改

数据仓库:OLAP On-Line Analytical Processing 联机事务分析处理 支持查询

hive上不支持修改的操作,支持插入

3).使用上:

数据库:写模式

数据仓库:读模式

3.可以将结构化的数据映射为一张数据库表

将结构化数据映射为二维表

mysql数据库 :将数据映射二维表

结构化数据:每一行上列比较规整的数据

例如:course name score

会将文本中的每一行数据映射为数据库的每一条数据

会将文本中的每一列数据映射为hive表字段

4.提供HQL(Hive SQL)查询功能

5.底层数据是存储在HDFS上的 ****

hive中最终的数据仍然存储在HDFS上,hive上建的表仅仅相当于对hdfs上的结构化数据进行映射管理

hive仅仅是一个管理数据的作用,而不会存储数据

hive想要管理hdfs上的数据就要建立一个关联关系, 关联hive上的表和hdfs上的数据路径,这个数据是依赖于一个元数据库记录的

一般情况下这个元数据库采用关系型数据库,真实生产中一般使用mysql作为hive的元数据库 hive中内置的默认的元数据库是derby

元数据:描述数据的数据

元数据记录的信息:

hive中的表和hdfs路径的映射关系 以及hive表属性(内部表 外部表 视图) 和字段信息(字段类型和字段顺序)

在hive中元数据非常重要, 元数据一旦丢失,整个hive中的库和表都会丢失

6.Hive的本质是将SQL语句转化为MapReduce任务运行

在hive的库中会存储很多编好的map和reduce 模板,当用户在执行一条SQL语句的时候,这个SQL语句会被翻译成mapreduce 任务进行执行

hive实质上就是一个hadoop上的工具,底层数据存在hdfs上 数据计算使用mr

HQL转化成MapReduce的大体流程如下:

想学大数据?要先了解hive,对hive你了解多少呢?

 

7.使不熟悉 MapReduce 的用户很方便地利用 HQL 处理和计算 HDFS 上的结构化的数据,适用于离线的批量数据计算。

整体上来说节省了开发成本 

二.为什么使用hive

直接使用 MapReduce 所面临的问题:

  1、人员学习成本太高

  2、真实开发项目周期要求太短,但是用 MapReduce开发会很长

  3、MapReduce实现复杂查询逻辑开发难度太大

为什么要使用 Hive:

  1、更友好的接口:操作接口采用类 SQL 的语法,提供快速开发的能力

  2、更低的学习成本:避免了写 MapReduce,减少开发人员的学习成本

  3、更好的扩展性:可自由扩展集群规模而无需重启服务,还支持用户自定义函数

三.Hive特点

优点:

1. 可扩展性,横向扩展,Hive 可以自由的扩展集群的规模,一般情况下不需要重启服务

1)纵向扩展:最早的时候,硬件资源不够的时候,就会向这台机器上添加硬件资源,也就是说会无限的增加一台机器的能力。纵向扩展是有瓶颈的。

2)横向扩展:节点规模 一台机器不够,可以增加2台,2台不够增加4台....从理论上来讲横向扩展是不会有瓶颈的。 是通过分担压力的方式扩展集群的规模。

2. 延展性,Hive 支持自定义函数,用户可以根据自己的需求来实现自己的函数。

3. 良好的容错性,hive的容错性也就是依赖于hdfs的容错性,hdfs底层数据是分块冗余存储的,可以保障即使有节点出现问题,SQL 语句仍可完成执行

缺点:

1.Hive 不支持记录级别的增删改操作,但是用户可以通过查询生成新表或者将查询结 果导入到文件中(当前选择的 hive-2.3.2 的版本支持记录级别的插入操作)

2.Hive 的查询延时很严重,因为hive最终将sql转换为mr任务, MapReduce Job 的启动过程消耗很长时间,所以不能 用在交互查询系统中。

3.Hive 不支持事务,因为他是数据仓库,仅仅用于数据管理,hive做的最多的是查询,所以没必要支持事务

四.Hive 和 RDBMS 的对比

hive与传统数据库的区别

想学大数据?要先了解hive,对hive你了解多少呢?

hive与传统数据库的区别

总结:hive具有SQL数据库的外表,但应用场景完全不同,hive只适合用来做海量离线数据分析统计,也就是数据仓库。

现在,你对hive了解了多少呢?如果想要更深入的了解hive,就请关注我吧,后期我会继续更新,讲解hive的知识,如有不足,还请大家提出宝贵意见!!!欢迎你的评论^^

 

推荐阅读