这篇文章对hive一个简介,以后会对各部分,使用,还有使用遇到的问题都会反应的。感谢大家支持

 

数据仓库和数据库

hive被称作数据仓库,逻辑上面和数据库一样,都是用来存取数据的。但是和数据库又有本质的区别。

W.H.Inmon关于数据仓库的定义:面向主题的、集成的、与时间相关且不可修改的数据集合。

面向主题是指数据仓库可能注重某一类型的数据,比如针对某一订单类型的数据,就是面向一个topic。这也从侧面说明数据仓库是要注重数据分析的。

而集成的可以想象成是数据是从数据库集成过来的。

与时间相关是指随之时间流逝,数据仓库可以不断往里面加东西。

不可修改,是一旦数据进去了,就不能进行修改,一般用来查询和分析。

通过这些可能还是不能明白数据仓库和数据库的区别

我用了传统的数据库和hive这个数据仓库后,给我的直观感觉就是,数据库可能偏向于对字段的操作,也就是对数据的修改,就是联机事务处理OLTP(On-Line Transaction Processing)。而数据仓库可能偏向于查询分析,联机分析处理OLAP(On-Line Analytical Processing),一般针对某些历史数据进行分析,数据量也一般比数据库要大。

 


什么是Hive


The Apache Hive ™ data warehouse software facilitates reading, writing, and managing large datasets residing in distributed storage using SQL. Structure can be projected onto data already in storage. A command line tool and JDBC driver are provided to connect users to Hive.

这是官网的说法,就是一个数据仓库而已,可以用来读数据,写入数据,可以用sql语句管理分布式大数据。一些数据结构可以以数据的方式存储到里里面去。就是一个命令行工具和jdbc驱动去链接hive。

有人说hive当初是为了解决mapreduce的编程麻烦,所以将hive设计出来,这样hql就可以直接转换成mapreduce,从而使开发人员在不用了解mapreduce的情况下,也可以通过hive进行开发。说是可以这么说,但是一个开发人员,如果不了解底层的东西,又怎么可以提升自己呢。

hive是数据库还是数据仓库 hive是一种数据仓库_hive

这是hive的工作原理图。

简单来说,就是hive可以去操作hadoop的数据,那么hive怎么操作,数据又是什么

我们知道hive是一个数据仓库,那么数据应该就是一种结构化的数据,或者说有一定规则的数据。

再hive里面,有一个元数据,即metastore,它存储了一些hive表的字段名字,表名,数据目录,这些数据都是存储在数据库中的。

整个工作逻辑,可以看成,当我们要访问hive的数据时,应该访问metastore的,得到表名,目录等等,然后去hdfs上操作这些数据。然而元数据可以存储在hive自带的derby,或者存储在mysql里面都可以。

Compliler:编译器,帮助HSQL编译解释成mapreduce,它可以根据hql从metastore获取表的元数据信息,从而解释成对应的mapreduce程序。

Execution:执行器,就是将mapreduce交给hadoop去执行了。再将结果返回给Driver。

其实中间还有优化器,可以优化他们。


用户接口


用户接口主要有三个:CLI,Client 和 WUI。其中最常用的是CLI,Cli启动的时候,会同时启动一个Hive副本。Client是Hive的客户端,用户连接至Hive Server。在启动 Client模式的时候,需要指出Hive Server所在节点,并且在该节点启动Hive Server。 WUI是通过浏览器访问Hive。

CLi:

就是Command line interface:命令行接口。一般就是配置环境变量后,直接执行hive的操作方法。

hive命令再hive包下的bin目录中

Client:

这个就是使用

hive --service hiveserver2

来提供远程服务的,其他主机可以连接这个服务来进行数据库操作。

它是基于thrift协议。

用这个比较正规

在客户端使用 beeline命令 来链接hive元数据服务 然后会提示你连接 使用 !connect jdbc:hive2://开启元数据服务的主机:10000 然后提示你输入用户名和密码,就可以连接成功了。

 

WUI:

hive --service hwi

通过这个命令后,就可以直接通过浏览器访问,但是这总方式用的好像并不多,默认端口9999

 

用户连接

1:单用户模式

hive是数据库还是数据仓库 hive是一种数据仓库_分布式存储_02

这个就是元数据在本地derby数据库。

直接使用命令hive就可以连接本地启动的服务。

前提配置必须使derby;

hive是数据库还是数据仓库 hive是一种数据仓库_hive是数据库还是数据仓库_03

2:多用户模式

hive是数据库还是数据仓库 hive是一种数据仓库_大数据_04

就是将元数据改成了mysql而已,而且别的机器也可以通过访问该mysql元数据,来启动hive,并且可以执行hql

hive是数据库还是数据仓库 hive是一种数据仓库_分布式存储_05

3:远程服务模式:

hive是数据库还是数据仓库 hive是一种数据仓库_大数据_06

hive是数据库还是数据仓库 hive是一种数据仓库_hive是数据库还是数据仓库_07

首先服务器的话要提供mysql远程服务,然后其他客户端的机器要配置的就是上面这两个东东,让他们通过thrift协议连接到对应的mysql服务器上面。