来源:千峰科技王从明老师
第三节:Hive的简介
3.1 什么是Hive
Hive是一个数据仓库的工具,它可以将一个分布式文件系统上的有结构的文件映射成一张表,可以使用类sql语言
进行对文件的查询、管理等操作。这种类sql语言,我们称之为Hql。Hive其实就是封装了MR,当我们使用hql语言进行查询时,底层代码会将hql翻译成MR的程序。
Hive也可以使用spart引擎,默认使用mr引擎。
3.2 Hive的优缺点
1)Hive的优点
--1. 学习成本低, 简单,易用,不需要单独再学习java语言或者Mapreduce,只需要会hql
--2. 扩展性好
--3. 延展性好,可以自定义函数
--4. 统一管理映射关系的元数据
2)Hive的缺点
--1.表达能力有限
--特别的复杂的算法不能实现
--2. 调优困难,粒度粗糙
3.3 Hive的架构和工作原理
[图片上传失败...(image-31e90b-1576409230209)]
上图是Hive的体系架构图
第一层:客户端接口,包括命令行接口,jdbc接口,web接口
Thrift server:第三方服务接口,供Jdbc接口来连接的
元数据库:metastore, 存储的是映射关系的元数据信息,文件名和表名、字段、用户,数据库、权限等映射关系
驱动器:
-- 编译器,将hql编译成mr程序代码,包括抽象树表达语法等
-- 优化器,优化mr程序
-- 执行器,提交mr程序,提交到hdfs,用yarn来管理资源的使用
hadoop: 包括hdfs、mapreduce、yarn
[图片上传失败...(image-fc25aa-1576409230209)]
上图是Hive的工作原理(工作流程)
--1. 用户将hql语句提交给Driver驱动器
--2. Driver驱动器将hql提交给Comppiler编译器,进行翻译成MR程序
--3. 编译器跟原数据库进行交互
--4. 获取对应的元数据信息,再次编译MR程序、进行优化操作
--5. 将mr程序提交给Driver驱动器
--6. 由驱动器将mr程序提交给执行引擎
--7. 执行引擎将mr的job作业提交到hadoop
--7.1 如果由元数据信息更新,会于原数据库进行交互
--8. hadoop将处理结果返回给执行器
--9. 执行器将数据发送给驱动器Driver
--10.Driver将结果返回给客户端
第四节:Hive的安装
4.1 说明:
Hive的安装方式有三种
-- 内嵌模式:使用自带的derby数据来存储元数据,只支持一个session
-- 本地模式:元数据库使用mysql,支持多session. hive的相关服务在同一台机器上,并且不是单独启动相关服务,而是内置在hive指令中
-- 远程模式:hive的相关服务是单独启动的,比如hiveserver2,metastore这样的服务都是单独启动。
[图片上传失败...(image-3ab70d-1576409230209)]
4.2 安装
1)环境要求:
-- jdk环境 1.7+
-- hadoop环境
-- mysql数据库
2)mysql数据库的安装
mysql是单独的进程,只要metastore服务可以连上即可,因此mysql可以安装到任意一台机器上
--1. minimal版本没有以下软件,需要手动安装
yum -y install perl
yum -y install libaio
yum -y install numactl
--2. 查询是否已经安装过mysql相关的内容,如果有,先卸载
[root@worker2 software]# rpm -qa | grep mysql
mysql-libs-5.1.71-1.el6.x86_64
[root@worker2 software]# rpm -e mysql-libs-5.1.71-1.el6.x86_64 --nodeps
--3.安装common
[root@worker2 software]# tar -xvf mysql-5.7.21-1.el6.x86_64.rpm-bundle.tar
[root@worker2 software]# rpm -ivh mysql-community-common-5.7.21-1.el6.x86_64.rpm
--4.安装libs
[root@worker2 software]# rpm -ivh mysql-community-libs-5.7.21-1.el6.x86_64.rpm
--5.安装client
[root@worker2 software]# rpm -ivh mysql-community-client-5.7.21-1.el6.x86_64.rpm
--6.安装server
[root@worker2 software]# rpm -ivh mysql-community-server-5.7.21-1.el6.x86_64.rpm
--7. 开启mysql服务
[root@worker2 software]# service mysqld start ,失败再开启一次
--8. 查找提供的默认密码
当开启服务后,会在/var/log/目录下生成一个服务日志文件mysqld.log,这里有密码
[root@worker2 software]# cat /var/log/mysqld.log | grep password
--9.进入mysql服务,修改密码
alter user 'root'@localhost identified by '123456'; # by 后的字符串是新密码
--10. 进行授权远程连接
grant all privileges on *.* to 'root'@'%' identified by '123456' with grant option;
3)安装hive
3.1 环境搭建
--1.上传,解压
[root@master04 software]# tar -zxvf apache-hive-1.2.1-bin.tar.gz -C /opt/apps/
--2. 更名操作
[root@master04 software]# cd ../apps/
[root@master04 apps]# mv apache-hive-1.2.1-bin/ hive
--3. 配置环境变量
[root@master04 apps]# vi ~/.bash_profile
........省略......
#hive environment
export HIVE_HOME=/opt/apps/hive
export PATH=$HIVE_HOME/bin:$PATH
--4. 使之生效
[root@master04 apps]# source ~/.bash_profile
3.2)配置hive-env.sh
[root@master04 hive]# cd $HIVE_HOME/conf
[root@master04 conf]# cp hive-env.sh.template hive-env.sh
[root@master04 conf]# vi hive-env.sh
........省略......
找到以下内容,修改hadoop_home,添加java_home
# Set HADOOP_HOME to point to a specific hadoop install directory
HADOOP_HOME=/opt/apps/hadoop
JAVA_HOME=/opt/apps/jdk
........省略......
3.3)配置hive-site.xml
[root@master04 conf]# cp hive-default.xml.template hive-site.xml
javax.jdo.option.ConnectionDriverName
com.mysql.jdbc.Driver
Driver class name for a JDBC metastore
javax.jdo.option.ConnectionURL
jdbc:mysql://worker2:3306/hive?createDatabaseIfNotExist=true&characterEncoding=latin1
JDBC connect string for a JDBC metastore
javax.jdo.option.ConnectionUserName
root
Username to use against metastore database
javax.jdo.option.ConnectionPassword
123456
password to use against metastore database
3.4) 将mysql的连接jar包放入hive的lib下
mysql-connector-java-5.1.28-bin.jar
3.5)如果想使用metastore服务的远程连接需要在作为服务节点的hive-site.xml中配置以下属性信息
hive.metastore.uris
thrift://ip:9083
解析:thrift:是协议名称
ip为metastore服务所在的主机ip地址
9083是默认端口号
3.6)单独启动metastore服务
[root@master04 conf]# hive --service metastore & 2>&1 >/dev/null
3.7)测试
--1. 首先要开启hdfs和yarn
--2. 输入hive
3.8)如果在启动hive时报错
java.net.URISyntaxException: Relative path in absolute URI:
${system:java.io.tmpdir%7D/$%7Bsystem:user.name%7D
创建一个目录
[root@master04]# mkdir /opt/apps/hive_config/tmp/
修改hive配置文件
[root@master04 conf]# vi hive-env.sh
查找${system:java.io.tmpdir}
进入vi后按下/,输入要查找的关键字,按n下一个,按N上一个
替换为 /opt/apps/hive_config/tmp/
查找${system:user.name}
替换为${user.name}