Hadoop 部署之 Hive (五)
一、Hive 简介
1、什么是 Hive
- Hive 由 Facebook 实现并开源,是基于 Hadoop 的一个数据仓库工具,可以将结构化的数据映射为一张数据库表,并提供 HQL(Hive SQL)查询功能,底层数据是存储在 HDFS 上。
- Hive 的本质是将 SQL 语句转换为 MapReduce 任务运行,使不熟悉 MapReduce 的用户很方便地利用 HQL 处理和计算 HDFS 上的结构化的数据,适用于离线的批量数据计算。
- Hive 依赖于 HDFS 存储数据,Hive 将 HQL 转换成 MapReduce 执行,所以说 Hive 是基于 Hadoop 的一个数据仓库工具,实质就是一款基于 HDFS 的 MapReduce 计算框架,对存储在 HDFS 中的数据进行分析和管理。
2、为什么使用 Hive
直接使用 MapReduce 所面临的问题:
1、人员学习成本太高
2、项目周期要求太短
3、MapReduce实现复杂查询逻辑开发难度太大
为什么要使用 Hive:
1、更友好的接口:操作接口采用类 SQL 的语法,提供快速开发的能力
2、更低的学习成本:避免了写 MapReduce,减少开发人员的学习成本
3、更好的扩展性:可自由扩展集群规模而无需重启服务,还支持用户自定义函数
3、Hive 的特点
- 优点:
1、可扩展性,横向扩展,Hive 可以自由的扩展集群的规模,一般情况下不需要重启服务 横向扩展:通过分担压力的方式扩展集群的规模 纵向扩展:一台服务器cpu i7-6700k 4核心8线程,8核心16线程,内存64G => 128G
2、延展性,Hive 支持自定义函数,用户可以根据自己的需求来实现自己的函数
3、良好的容错性,可以保障即使有节点出现问题,SQL 语句仍可完成执行
- 缺点:
1、Hive 不支持记录级别的增删改操作,但是用户可以通过查询生成新表或者将查询结 果导入到文件中(当前选择的 hive-2.3.2 的版本支持记录级别的插入操作)
2、Hive 的查询延时很严重,因为 MapReduce Job 的启动过程消耗很长时间,所以不能 用在交互查询系统中。
3、Hive 不支持事务(因为不没有增删改,所以主要用来做 OLAP(联机分析处理),而 不是 OLTP(联机事务处理),这就是数据处理的两大级别)。
4、Hive 的架构
二、Hive 安装
1、MySQL 安装(datanode01)
Hive 的元数据存储在 RDBMS 中,除元数据外的其它所有数据都基于 HDFS 存储。默认情 况下,Hive 元数据保存在内嵌的 Derby 数据库中,只能允许一个会话连接,只适合简单的 测试。实际生产环境中不适用,为了支持多用户会话,则需要一个独立的元数据库,使用 MySQL 作为元数据库,Hive 内部对 MySQL 提供了很好的支持。
yum install mariadb-server
2、MySQL 启动
启动数据库
systemctl start mariadbsystemctl enable mariadb
3、Hive 下载安装
# 下载安装包wget https://mirrors.aliyun.com/apache/hive/hive-2.3.3/apache-hive-2.3.3-bin.tar.gz# 解压安装包tar xf apache-hive-2.3.3-bin.tar.gzmv apache-hive-2.3.3-bin /usr/local/hive# 创建目录mkdir -p /home/hive/{log,tmp,job}
4、配置 Hive 环境变量
编辑文件/etc/profile.d/hive.sh
,修改为如下内容:
# HIVE ENVexport HIVE_HOME=/usr/local/hiveexport PATH=$PATH:$HIVE_HOME/bin
使HIVE环境变量生效。
source /etc/profile.d/hive.sh
三、Hive 配置
1、配置 metastore(datanode01)
mysql> grant all privileges on *.* to 'hive'@'%' identified by 'hive123456' with grant option;mysql> grant all privileges on *.* to 'hive'@'datanode01' identified by 'hive123456' with grant option;mysql> grant all privileges on *.* to 'thbl_prd_hive'@'%' identified by 'hive123456' with grant option;mysql> grant all privileges on *.* to 'hive'@'localhost' identified by 'hive123456' with grant option;mysql> grant all privileges on *.* to 'thbl_prd_hive'@'localhost' identified by 'hive123456' with grant option;mysql> flush privileges;
2、配置 jdbc(datanode01)
wget http://mirrors.163.com/mysql/Downloads/Connector-J/mysql-connector-java-5.1.45.tar.gz tar xf mysql-connector-java-5.1.45.tar.gzcp mysql-connector-java-5.1.45/mysql-connector-java-5.1.45-bin.jar /usr/local/hive/lib/
3、备份template配置文件(namenode01)
cd /usr/local/hive/confmkdir templatemv *.template template# 安排配置文件cp template/hive-exec-log4j2.properties.template hive-exec-log4j2.propertiescp template/hive-log4j2.properties.template hive-log4j2.propertiescp template/hive-default.xml.template hive-default.xmlcp template/hive-env.sh.template hive-env.sh
4、配置 hive-env.sh(namenode01)
编辑文件/usr/local/hive/conf/hive-env.sh
,修改内容如下:
HADOOP_HOME=/usr/local/hadoopexport HIVE_CONF_DIR=/usr/local/hive/confexport HIVE_AUX_JARS_PATH=/usr/local/hive/lib
5、配置数据仓库 hive-site.xml(namenode01)
编辑文件/usr/local/hive/conf/hive-site.xml
,修改内容为如下:
hive.exec.local.scratchdir /home/hive/job hive的本地临时目录,用来存储不同阶段的map/reduce的执行计划 hive.downloaded.resources.dir /home/hive/tmp/${hive.session.id}_resources hive下载的本地临时目录 hive.querylog.location /home/hive/log/${system:user.name} hive运行时结构化日志路径 hive.hwi.war.file lib/hive-hwi-2.1.1.war HWI war文件路径, 与 ${HIVE_HOME}相关. hive.server2.logging.operation.log.location /home/hive/log/${system:user.name}/operation_logs 日志开启时的,操作日志路径 hive.metastore.local false datanucleus.schema.autoCreateAll true 启动时自动创建必要的schema hive.metastore.warehouse.dir /hive/warehouse Hive数据仓库在HDFS中的路径 hive.metastore.uris thrift://datanode01:9083 远程metastore的 Thrift URI,以供metastore客户端连接metastore服务端 javax.jdo.option.ConnectionDriverName com.mysql.jdbc.Driver JDBC驱动名 javax.jdo.option.ConnectionURL jdbc:mysql://datanode01:3306/hive_db?createDatabaseIfNotExist=true JDBC连接名 javax.jdo.option.ConnectionUserName hive 连接metastore数据库的用户名 javax.jdo.option.ConnectionPassword hive123456 连接metastore数据库的密码 hive.metastore.schema.verification false 强制metastore schema的版本一致性
6、配置权限(namenode01)
scp /usr/local/hive/conf/* datanode01:/usr/local/hive/conf/chmod 755 /usr/local/hive/conf/*
四、Hive 启动
1、在namenode01,启动hiveserver2
hive --service hiveserver2 &
2、在datanode01,启动metastore
hive --service metastore &
五、Hive 检查
1、JPS
[root@namenode01 ~]# jps14512 NameNode14786 ResourceManager21348 RunJar15894 HMaster22047 Jps[root@datanode01 ~]# jps3509 DataNode3621 NodeManager1097 QuorumPeerMain9930 RunJar3935 HRegionServer10063 Jps
2、hive shell
[root@namenode01 ~]# hiveSLF4J: Class path contains multiple SLF4J bindings.SLF4J: Found binding in [jar:file:/usr/local/hive/lib/log4j-slf4j-impl-2.6.2.jar!/org/slf4j/impl/StaticLoggerBinder.class]SLF4J: Found binding in [jar:file:/usr/local/hadoop/share/hadoop/common/lib/slf4j-log4j12-1.7.10.jar!/org/slf4j/impl/StaticLoggerBinder.class]SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.SLF4J: Actual binding is of type [org.apache.logging.slf4j.Log4jLoggerFactory]Logging initialized using configuration in file:/usr/local/hive/conf/hive-log4j2.properties Async: trueHive-on-MR is deprecated in Hive 2 and may not be available in the future versions. Consider using a different execution engine (i.e. spark, tez) or using Hive 1.X releases.hive> show tables;OKTime taken: 0.833 seconds