1、Hive的起源Hive起源于Facebook(一个美国的社交服务网络)。Facebook有着大量的数据,而Hadoop是一个开源的MapReduce实现,可以轻松处理大量的数据。但是MapReduce程序对于Java程序员来说比较容易写,但是对于其他语言使用者来说不太方便。此时Facebook最早地开始研发Hive,它让对Hadoop使用SQL查询(实际上SQL后台转化为了MapReduce)成为可能,那些非Java程序员也可以更方便地使用。hive最早的目的也就是为了分析处理海量的日志。 2、Hive是什么2.1、Hive是数据仓库数据仓库英文名DataWarehouse,可简写为DW或DWH。数据仓库 ,由数据仓库之父比尔·恩门(Bill Inmon)于1990年提出,主要功能仍是将组织透过资讯系统之联机事务处理(OLTP)经年累月所累积的大量资料,透过数据仓库理论所特有的资料储存架构,作一有系统的分析整理,以利各种分析方法如联机分析处理(OLAP)、数据挖掘(Data Mining)之进行,并进而支持如决策支持系统(DSS)、主管资讯系统(EIS)之创建,帮助决策者能快速有效的自大量资料中,分析出有价值的资讯,以利决策拟定及快速回应外在环境变动,帮助建构商业智能(BI)。往白了说数据仓库就是用来作为查询分析的数据库,很少用来插入,修改,删除
2.2、Hive是解释器、编译器、优化器、执行器简单的将就是说HQL会被Hive解释,编译,优化并生成查询计划,一般情况而言查询计划会被转化为MapReduce任务进而执行。
3、Hive架构
解释:
CLI命令行接口最常用,启动的时候会打开一个副本
Client 是 Hive 的客户端,用户连接至 Hive Server。在启动 Client 模式的时候,需要指出 Hive Server 所在节点,并且在该节点启动 Hive Server
WUI是浏览器访问Hive,一般很少使用,第一次使用的时候可能要部署网站。
Hive的元数据(比如表信息等)存储在关系型数据库如Derby、Mysql数据库,但是它的真实数据存储在HDFS文件系统之上,大部分操作都有MapReduce来执行。
图解Hive的架构和运行流程请打开网址(点击打开链接)
4、Hive的安装Hive有三种模式(内嵌模式、本地模式、远程模式)详细的安装方法请参照该博客(点击打开链接)
5、Hive的数据类型·基本类型:整数型、浮点型、布尔型、字符串型
·复杂数据类型:数组型、集合型、结构型
·时间型:Date、timestamp
下面我具体举几个建表例子,来看一下Hive的一些数据类型
----------array型---------------------------------------
create table student(
id int,
name string,
grade array<double>
)
------------map型----------------------------
create table student1(
id int,
name string,
grade map<string,float>
)
-------------复杂array型--------------------------
create table student2(
id int,
name string,
grade array<map<string,double>>
)
--------------复杂结构型------------------
create table student3(
id int,
massage struct<name:string,id:int,grade:map<string,float> >
)
6、Hive中表的分类
内部表:什么是内部表需要对比外部表来看
·删表时数据和表一起删除
外部表:
·数据已经存在于HDFS
·外部表只是走一个过程,加载数据和创建表同时完成,不会移动到数据仓库目录中,仅仅是和数据建立了一个连接
·删表数据不会删除数据
内部表外部表区分:
在导入数据到外部表,数据并没有移动到自己的数据仓库目录下,也就是说外部表中的数据并不是由它自己来管理的!而内部表表则不一样;在删除内部表的时候,Hive将会把属于表的元数据和数据全部删掉;而删除外部表的时候,Hive仅仅删除外部表的元数据,数据是不会删除的!
分区表:
·在Hive Select查询中,一般会扫描整个表内容,会消耗很多时间做没必要的工作。 分区表指的是在创建表时,指定partition的分区空间。扫描时可以只扫描某一个分区的数据
·分区表存储时分局所设立的分区分别存储数据(分区字段就是一个文件夹的标识)
桶表
·对于每一个表(table)或者分区,Hive可以进一步组织成桶,也就是说捅是更为细粒度的数据范困划分。
·桶表是对指定的分桶的列进行哈希运算,运算结果模(%)分桶的数量然后把数据根据运算结果分别放入这几个桶中
下面写几个建表小例子来对比一下
----------内部表---------------------------------------
create table student(
id int,
name string,
grade array<double>
)
-------------分区表---------------------
create table p_t(
id int,
age int
)partitioned by (gender string)
row format delimited fields terminated by ','
------外部表----------------------------------------------------------
create external table e_t(
id int,
name string,
age int) row format delimited fields terminated by ',' location '/lws/' --注意这里'/lws/'为HDFS上面的文件所在目录
--------桶表-----------------------------------------------------------------------
create table b_t(
id int,
name string,
age int
)clustered by (name) into 5 buckets row format delimited fields terminated by ','
其他的关于Hive内容请看下面链接 。如果本文对你有所帮助别忘了点赞哦
![]() |
|
来自: liang1234_ > 《大数据分布式》