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 中的数据进行分析和管理。
创新互联网络公司拥有10年的成都网站开发建设经验,1000+客户的共同信赖。提供成都做网站、成都网站设计、网站开发、网站定制、买友情链接、建网站、网站搭建、自适应网站建设、网页设计师打造企业风格,提供周到的售前咨询和贴心的售后服务
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 mariadb
systemctl 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.gz
mv apache-hive-2.3.3-bin /usr/local/hive
# 创建目录
mkdir -p /home/hive/{log,tmp,job}
4、配置 Hive 环境变量
编辑文件/etc/profile.d/hive.sh
,修改为如下内容:
# HIVE ENV
export HIVE_HOME=/usr/local/hive
export 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.gz
cp 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/conf
mkdir template
mv *.template template
# 安排配置文件
cp template/hive-exec-log4j2.properties.template hive-exec-log4j2.properties
cp template/hive-log4j2.properties.template hive-log4j2.properties
cp template/hive-default.xml.template hive-default.xml
cp template/hive-env.sh.template hive-env.sh
4、配置 hive-env.sh(namenode01)
编辑文件/usr/local/hive/conf/hive-env.sh
,修改内容如下:
HADOOP_HOME=/usr/local/hadoop
export HIVE_CONF_DIR=/usr/local/hive/conf
export 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 ~]# jps
14512 NameNode
14786 ResourceManager
21348 RunJar
15894 HMaster
22047 Jps
[root@datanode01 ~]# jps
3509 DataNode
3621 NodeManager
1097 QuorumPeerMain
9930 RunJar
3935 HRegionServer
10063 Jps
2、hive shell
[root@namenode01 ~]# hive
SLF4J: 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: true
Hive-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;
OK
Time taken: 0.833 seconds
文章名称:Hadoop部署之Hive(五)
浏览地址:http://scyanting.com/article/ijpjep.html