Hive - 简介

一 概要介绍

Hive最初是应Facebook每天产生的海量新兴社会网络数据进行管理和机器学习的需求而产生和发展的,是建立在
Hadoop 上的数据仓库基础构架。作为Hadoop的一个数据仓库工具,Hive可以将结构化的数据文件映射为一张数据库表,并提供简单的sql查询功能。

Hive 主要提供以下功能:

1. 它提供了一系列的工具,可用来对数据进行提取/转化/加载(ETL);

2. 是一种可以存储、查询和分析存储在HDFS(或者HBase)中的大规模数据的机制;

3. 查询是通过MapReduce来完成的(并不是所有的查询都需要MapReduce来完成,比如select * from XXX就不需要;

Hive设计目的就是用来管理和查询结构化数据,它屏蔽了底层将sql语句转换为MapReduce任务过程,为用户提供的简单的SQL语句,将用户从复杂的MapReduce编程中解脱出来。

Hive提供了一系列的工具,可以用来进行数据提取转化加载(ETL),这是一种可以存储、查询和分析存储在 Hadoop 中的大规模数据的机制。Hive 定义了简单的类 SQL 查询语言,称为 HQL,它允许熟悉 SQL
的用户查询数据。同时,这个语言也允许熟悉 MapReduce 开发者开发自定义的 mapper 和 reducer 来处理内建的 mapper 和 reducer 无法完成的复杂的分析工作。

Hive使用关系数据库中的表、行、列、模式等概念,学起来很容易。学习成本低,可以通过类SQL语句快速实现简单的MapReduce统计,不必开发专门的MapReduce应用,十分适合数据仓库的统计分析。

Hive与传统关系数据库的对比

二  Hive的体系架构

Hive的整体架构,如下图所示

Hive的主要部件如下:

用户接口:CLI(command-line
interface,命令行界面)、JDBC/ODBC、Broswer

Driver:  接受query的组件,该组件实现session的概念,以处理和提供基于JDBC/ODBC执行。

编译器: 该组件分析query,在不同的查询块和查询表达式上进行语义分析,并最终通过从metastore中查找表与分区的元信息生成执行计划。

Metastore:存储数据仓库里所有的各种表与分区的结构化信息,包括列与列类型信息,序列化器与反序列化器,从而能够读写hdfs中的数据。

Metastore 包含如下的部分:

Database 是表(table)的名字空间。默认的数据库(database)名为‘default’

Table      表(table)的原数据包含信息有:列(list of columns)和它们的类型(types),拥有者(owner),存储空间(storage)和SerDei信息

Partition 每个分区(partition)都有自己的列(columns),SerDe和存储空间(storage)。这一特征将被用来支持Hive中的模式演变(schema evolution)

 

注:Hive中的元数据包括表的名字,表的列和分区及其属性,表的属性(是否为外部表等),表的数据所在目录等。 由于Hive的元数据需要不断的更新、修改,而HDFS系统中的文件是多读少改的,这显然不能将Hive的元数据存储在HDFS中。目前Hive将元数据存储在数据库中,如Mysql、Derby中。

 执行引擎 此组件执行由compiler创建的执行计划。此计划是一个关于阶段的有向无环图。执行引擎管理不同阶段的依赖关系,并在合适的系统组件上执行这些阶段

Hive查询语言

HiveQL是一个类SQL的查询语言。它模仿SQL语法来创建表,读表到数据,并查询表。HiveQL也允许用户嵌入他们自定义的map-reduce脚本。这些脚本能用任何支持基于行的流式接口的语言写-从标准输入读入并写到标准输出。这种灵活性也有一定的代价:即字符串的转换带来的性能损失。尽管如此,我们看到用户似乎不介意于此,他们自己实现这些脚本。另一个特性是多表插入。在此构造下,用户可以在相同的数据上通过一条HiveQL执行多query。Hive优化这些query,从而能共享输入数据的扫描,这样就增加了这些query的几个数量级的吞吐量。

三 Hive 中的数据模型

Hive 没有专门的数据存储格式,也没有为数据建立索引,用户可以非常自由的组织 Hive 中的表,只需要在创建表的时候告诉
Hive 数据中的列分隔符和行分隔符,Hive 就可以解析数据。Hive 中所有的数据都存储在 HDFS 中,Hive 中包含以下数据模型:表(Table),外部表(External Table),分区(Partition),桶(Bucket)。

注:如果不指定分割符的话,hive默认的分隔符是\001 

              表=》分区=》桶,它们的对数据的划分粒度越来越小

Hive数据抽象结构图

Hive 中的 Table 和数据库中的 Table 在概念上是类似的,每一个 Table 在 Hive 中都有一个相应的目录存储数据。例如,一个表 pvs,它在 HDFS 中的路径为:/wh/pvs,其中,wh 是在 hive-site.xml 中由 ${hive.metastore.warehouse.dir} 指定的数据仓库的目录,所有的 Table 数据(不包括 External
Table)都保存在这个目录中。

分区

Partition 对应于数据库中的 Partition 列的密集索引,但是 Hive 中 Partition 的组织方式和数据库中的很不相同。在 Hive 中,表中的一个 Partition 对应于表下的一个目录,所有的 Partition 的数据都存储在对应的目录中。例如:pvs 表中包含 ds 和 city 两个 Partition,则对应于 ds = 20090801, ctry
= US 的 HDFS 子目录为:/wh/pvs/ds=20090801/ctry=US;对应于 ds = 20090801, ctry = CA 的 HDFS 子目录为;/wh/pvs/ds=20090801/ctry=CA

注意:表中可以不包括Partition字段

Buckets 对指定列计算 hash,根据 hash 值切分数据,目的是为了并行,每一个 Bucket 对应一个文件。例如将 user 列分散至 32 个 bucket,首先对 user 列的值计算 hash,对应 hash 值为 0 的 HDFS 目录为:/wh/pvs/ds=20090801/ctry=US/part-00000;hash 值为 20 的 HDFS 目录为:/wh/pvs/ds=20090801/ctry=US/part-00020

Table 的创建过程和数据加载过程(这两个过程可以在同一个语句中完成),在加载数据的过程中,实际数据会被移动到数据仓库目录中;之后对数据对访问将会直接在数据仓库目录中完成。删除表时,表中的数据和元数据将会被同时删除。

外部表, External Table 指向已经在 HDFS 中存在的数据,可以创建 Partition。它和 Table 在元数据的组织上是相同的,而实际数据的存储则有较大的差异。External Table 只有一个过程,加载数据和创建表同时完成(CREATE EXTERNAL TABLE ……LOCATION),实际数据是存储在 LOCATION 后面指定的 HDFS 路径中,并不会移动到数据仓库目录中。当删除一个
External Table 时,仅删除元数据,表中的数据不会真正被删

时间: 2024-08-06 03:44:47

Hive - 简介的相关文章

Hive简介

实验简介 我们本节课程主要介绍 Hive 的相关知识,将会涉及以下内容: Hive 的定义 Hive 的体系结构 Hive 与关系数据库的区别 Hive 的应用场景 Hive 的存储 一.什么是 Hive ? Hive 是一个基于 Hadoop 文件系统之上的数据仓库架构.它为数据仓库的管理提供了许多功能:数据 ETL (抽取.转换和加载)工具.数据存储管理和大型数据集的查询和分析能力.同时 Hive 还定义了类 SQL的语言 -- Hive QL. Hive QL 允许用户进行和 SQL 相似

Hive入门学习--Hadoop简介

现在想要应聘大数据分析或者数据挖掘岗位,很多都需要会使用Hive,Mapreduce,Hadoop等这些大数据分析技术.为了充实自己就先从简单的Hive开始吧.接下来的几篇文章是记录我如何入门学习Hive的. 一.Hive简介 Hive是一个数据仓库基础工具,架构在Hadoop之上,能够处理Hadoop中的结构化数据.简言之,Hive和SQL是一个数据分析和处理工具,它提供了SQL查询功能,可以将SQL语句转换为Mapreduce任务运行. 既然Hive是架构在Hadoop之上的,我们就有必要简

Hive入门到剖析(一)

1 Hive简介 1.1 Hive定义 Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供类SQL查询功能. 本质是将SQL转换为MapReduce程序. 1.2 为什么使用Hive 1.面临的问题 人员学习成本太高 项目周期要求太短 我只是需要一个简单的环境 MapReduce  如何搞定 复杂查询好难 Join如何实现 2.为什么要使用Hive 操作接口采用类SQL语法,提供快速开发的能力 避免了去写MapReduce,减少开发人员的学习成本 扩展

Hive与数据库的异同

http://www.cnblogs.com/Richardzhu/p/3364909.html 一.Hive简介 Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供完整的sql查询功能,可以将sql语句转换为MapReduce任务进行运行.其优点是学习成本低,可以通过类SQL语句快速实现简单的MapReduce统计,不必开发专门的MapReduce应用,十分适合数据仓库的统计分析. Hvie是建立在Hadoop上的数据仓库基础架构.它提供了一系列的工

HADOOP docker(四):安装hive

1.hive简介2.安装hive2.1 环境准备2.1.1 下载安装包2.1.2 设置hive用户的环境变量2.1.3 hive服务端配置文件2.1.4 hive客户端配置文件2.1.4 分发hive配置文件2.2 启动hive2.2.1 初始化数据库2.2.2 创建HDFS目录2.2.3 启动hive3.总结 getting start: https://cwiki.apache.org/confluence/display/Hive/GettingStarted hive wiki: htt

Hive基础知识

一.Hive简介什么是Hive为什么使用Hive面临的问题:为什么要使用Hive:二.Hive结构三.Hive支持的格式四.表的操作创建表删除表清空表修改表修改字段名与字段类型增加列修改列的顺序删除列替换表修改字段顺序其他操作查看表信息查看建表信息查看格式信息改变表文件格式查看函数五.数据操作1.插入数据从文件读取数据从其他结果集插入2.分区和分桶创建分区表查看分区插入分区数据添加分区重命名分区删除分区分区使用分桶六.复合类型ArrayMap七.创建视图和索引以及数据缓存视图创建视图删除视图索引

HADOOP docker(六):hive简易使用指南

前言1.hive简介1.1 hive组件与相应功能:1.2 hive的表类型1.3 分区表1.3 分隔符1.4 hive的数据存储2.数据类型2.1 基本数据类型2.1 复杂数据类型2.3 NULL3.基本操作3.1 数据库操作3.2 表操作3.3 视图3.4 数据导入导出3.hsql3.1 hsql基本操作3.2 hive内置函数3.2 自定义函数3.3 注册函数4.hive权限管理4.1 权限简介4.2 权限分类4.3 授权管理5.hive优化 前言 本手册介绍了hive的基本知识及工作中要

环境搭建 Hadoop+Hive(orcfile格式)+Presto实现大数据存储查询一

一.前言 以下简介摘自官方 Hadoop简介 Hadoop就是一个实现了Google云计算系统的开源系统,包括并行计算模型Map/Reduce,分布式文件系统HDFS,以及分布式数据库Hbase,同时Hadoop的相关项目也很丰富,包括ZooKeeper,Pig,Chukwa,Hive,Hbase,Mahout,flume等.接下来我们使用的是Hive Hive简介 Hive 是一个基于 Hadoop的开源数据仓库工具,用于存储和处理海量结构化数据.    它把海量数据存储于 hadoop 文件

hive的基本概念和安装

背景: NoSQL运动, Not Only SQL New SQL, SQL的逆袭 放弃SQL是最大的错误 Hive还不算是完整的数据库系统 Hive很缓慢 应用于即席查询场景 Hive: 数据仓库工具, 可以把Hadoop下的原始结构化数据变为Hive中的表 支持一种与SQL几乎完全相同的语言HiveQL.  除了不支持更新, 索引和事务, 几乎SQL的其他特征都能支持 可以看成是从SQL到Map-Reduce的映射器 提供shell, JDBC/ODBC, Thrift, Web等接口 Hi