Hive简介
Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射成一张数据库表,并提供类SQL(HQL)查询功能,适用于离线的批量数据计算
Hive本身不存储和计算数据,它完全依赖于HDFS和MapReduce,它的表其实就是一个Hadoop的目录/文件(默认存放在Hive工作目录中)
Hive设计目的是让SQL技能良好,但Java技能较弱的分析师可以查询海量数据
Hive本质就是一个SQL解析引擎,它将SQL语句转译成M/R Job然后在Hadoop执行
Hive架构
Hive的执行原理
Hive 的核心是驱动引擎Driver, 驱动引擎由四部分组成:
解释器:将 HiveSQL 语句转换为抽象语法树(AST)
编译器:将语法树编译为逻辑执行计划
优化器:对逻辑执行计划进行优化
执行器:调用底层的运行框架执行逻辑执行计划
HQL 通过命令行或者客户端提交,Driver 组件对其进行词法分析,语法分析,编译,优化,最后生成逻辑执行计划。生成的逻辑执行计划存储在 HDFS 中,并随后由MapReduce 调用执行
Hive搭建模式
hive有三种搭建模式:内嵌模式,本地模式,远程模式
元数据:描述数据的数据,这里指存储在 Hive 中的数据的描述信息。元数据存储在关系型数据库中。
Hive 中的元数据通常包括:表的名字,表的列和分区及其属性,表的属性(内部表和 外部表),表的数据所在目录
内嵌模式:hive将源数据存储在HDFS中,而元数据默认存储在hive自带的数据库Derby中。但是Derby不支持多用户同时访问,所以这种模式仅供测试使用。
本地模式:使用mysql数据库替代Derby来存储元数据,以解决多用户并发访问问题
远程模式:以本地模式为基础,mysql数据库所在的节点提供metastore service服务,其他节点可以连接该服务来获取元数据信息
- 这里我们搭建一个远程模式,首先因为hive依赖于hadoop,所以需要先搭建好hadoop环境
- 搭建好hadoop环境后,随机选择一个节点作为 hive 远程模式的服务端,即mysql安装在该节点上,在该节点上首先安装mysql,然后配置hive,到这里这就是一个本地模式,最后开启metastore服务
- 服务端开启服务后,对客户端进行配置,仅配置hive即可
mysql在线安装
在线安装mysql数据库
yum install -y mysql-server
开启mysql服务
Service mysqld start
设置开机启动
chkconfig mysqld on
安装完毕数据库是没有密码的,输入以下命令进入mysql,提示输入密码时直接回车就ok
mysql -uroot -p
进入mysql后,设定权限,修改密码
修改root权限:
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123' WITH GRANT OPTION;
刷新:
flush privileges;
这里我们再添加一个新用户用来操作数据库,毕竟root权限太高
添加用户:
CREATE USER 'hive'@'%' IDENTIFIED BY '123';
授权用户:这里给hive用户操作hive_meta数据库的权限
grant all privileges on hive_meta.* to hive@"%" identified by '123';
刷新:
flush privileges;
设置完成后,我们为hive用户创建数据库 hive_mata,然后查看一下数据库
mysql> create databas