大数据笔记08--Hive原理和搭建

什么是Hive

hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供的sql查询功能,可以将sql语句转换为MapReduce任务进行运行。
其优点是学习成本低,可以通过类SQL语句快速实现简单的MapReduce统计,不必开发专门的MapReduce应用,十分适合数据仓库的统计分析。

Hive的架构

架构图

在这里插入图片描述

架构描述

  1. 用户接口主要有三个:CLI,Client 和 WUI。
  • 其中最常用的是CLI,Cli启动的时候,会同时启动一个Hive副本。
  • Client是Hive的客户端,用户连接至Hive Server。在启动 Client模式的时候,需要指出Hive Server所在节点,并且在该节点启动Hive Server。
  • WUI是通过浏览器访问Hive。
  1. Hive将元数据存储在数据库中,如mysql、derby。
    Hive中的元数据包括:表的名字、表的字段名和类型、分区及其属性,表的属性(是否为外部表等),表的数据所在目录、行分隔符,字段分隔符。
  2. 解释器、编译器、优化器完成HQL查询语句从词法分析、语法分析、编译、优化以及查询计划(策略选择、消耗模型)的生成。生成的查询计划存储在HDFS中,并在随后有MapReduce调用执行。
  3. Hive的数据存储在HDFS中,大部分的查询、计算由MapReduce完成(包含*的查询,比如select * from tbl不会生成MapRedcue任务)。

hql解析

ANTLR词法语法分析工具解析hql
在这里插入图片描述

搭建Hive

本地方式(内嵌derby)

步骤

  1. 解压
  2. 修改安装包内conf文件夹下的hive-default.xml.template,并重命名为hite-site.xml
<configuration>  
  
<property>  
  <name>javax.jdo.option.ConnectionURL</name>  
  <value>jdbc:derby:;databaseName=metastore_db;create=true</value>  
</property>  
   
<property>  
  <name>javax.jdo.option.ConnectionDriverName</name>  
  <value>org.apache.derby.jdbc.EmbeddedDriver</value>  
</property>  
   
<property>  
  <name>hive.metastore.local</name>  
  <value>true</value>  
</property>  
   
<property>  
  <name>hive.metastore.warehouse.dir</name>  
  <value>/user/hive/warehouse</value>  
</property>  
   
  
</configuration>  
  1. 将hive/lib目录下的jline jar包拷贝到hadoop的yarn lib下,并将原jar包删除或改名令其失效。
    否则会报版本不匹配的错误

问题

使用derby存储方式时,运行hive会在当前目录生成一个derby文件和一个metastore_db目录。
这种存储方式的弊端是在同一个目录下同时只能有一个hive客户端能使用数据库,多个用户登录时会报错。
(这是由于derby数据库的局限性造成的)

Local(mysql)

这种存储方式需要在本地运行一个mysql服务器,并作如下配置

步骤

  1. 安装一个mysql数据库
yum  install mysql-server -y

  1. 拷贝mysql驱动包到$HIVE_HOME\lib目录下
    在这里插入图片描述
  2. 修改hive-site,xml
<configuration>  
<property>  
  <name>hive.metastore.warehouse.dir</name>  
  <value>/user/hive_remote/warehouse</value>  
</property>  
   
<property>  
  <name>hive.metastore.local</name>  
  <value>true</value>  
</property>  
   
<property>  
  <name>javax.jdo.option.ConnectionURL</name>  
  <value>jdbc:mysql://localhost/hive_meta?createDatabaseIfNotExist=true</value>  
</property>  
   
<property>  
  <name>javax.jdo.option.ConnectionDriverName</name>  
  <value>com.mysql.jdbc.Driver</value>  
</property>  
   
<property>  
  <name>javax.jdo.option.ConnectionUserName</name>  
  <value>hive</value>  
</property>  
   
<property>  
  <name>javax.jdo.option.ConnectionPassword</name>  
  <value>123</value>  
</property>  
</configuration> 
  1. 启动sql服务
service mysqld start

设置开机启动
chkconfig mysqld on
  1. 修改root用户权限
#登录mysql
mysql -uroot

#修改权限
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123' WITH GRANT OPTION;

#刷新
flush privileges; 
  1. 添加用户并修改权限
#创建hive用户和密码
CREATE USER 'hive'@'%' IDENTIFIED BY '123';

#赋予权限
grant all privileges on hive_meta.* to hive@"%" identified by '123';
flush privileges; 
  1. 删除多余权限
#进入mysql数据库
use mysql;

#查看用户
select host,user,password from user;

#删除多余会对权限造成影响的数据
delete from user where...
  1. 将hive/lib目录下的jline jar包拷贝到hadoop的yarn lib下
  2. 配置HIVE_HOME,hive启动

问题

注意一个坑: 权限,虽然hive用户对hive_meta数据库是由操作权限的,但是这个数据库如果不存在,hive用户也是没有权限创建这个数据库,所以需要提前创建好hive_meta数据库

远程(remote)模式

当有多个客户端使用hive时,若使用各自本地的hive和mysql,会导致各端元数据不一致,不易于管理,可能会出现各种问题。
在一个基于本地mysql数据库的hive作为服务端,启动一个metastore服务,其他客户端通过thrift协议连接metastore使用服务端hive,从而使用同一份mysql内的元数据。

步骤

  1. 在一个搭建好基于mysql的hive的节点启动metastore服务作为服务端
hive --service metastore  
  1. 在客户端解压安装包并修改hive-site.xml
<configuration>  
<property>  
  <name>hive.metastore.warehouse.dir</name>  
  <value>/user/hive/warehouse</value>  
</property>  
   
<property>  
  <name>hive.metastore.local</name>  
  <value>false</value>  
</property>  
  
<property>  
  <name>hive.metastore.uris</name>  
  <value>thrift://192.168.23.134:9083</value>  
</property>  
  
</configuration>  
  1. 拷贝jline的jar包以及配置HIVE_HOME(同上)
  2. hive启动

问题

  • metastore的启动会一直启动在前台,可利用如下方法解决
hive --service metastore >> meta.log 2>&1 &

#将日志打印到meta.log 错误日志(2)重定向到正常日志(1) 
&表示后台执行
  • 这种方式服务端只提供元数据,客户端运行自己的hive
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。
经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。
经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值