这篇文章对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可以去操作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:单用户模式
这个就是元数据在本地derby数据库。
直接使用命令hive就可以连接本地启动的服务。
前提配置必须使derby;
2:多用户模式
就是将元数据改成了mysql而已,而且别的机器也可以通过访问该mysql元数据,来启动hive,并且可以执行hql
3:远程服务模式:
首先服务器的话要提供mysql远程服务,然后其他客户端的机器要配置的就是上面这两个东东,让他们通过thrift协议连接到对应的mysql服务器上面。