【博学谷学习记录】超强总结,用心分享 | hive
【博学谷IT技术支持】
一、介绍
hive
是基于hadoop
的数据仓库工具,用来进行数据的提取、转化、加载,是一种可以存储、查询和分析存储在hadoop
中的大规模数据机制。hive
将结构化的数据文件映射为一张数据库表,并提供SQL
查询功能,将SQL语句变成MapReduce
任务执行。
特征
数据仓库是面向主题的、集成的、稳定的、时变的数据集合,用以支持管理决策。
根据数据流入流出的过程,数据仓库架构可为三层:数据源、数据仓库、数据应用。同时数据仓库将数据从来源端经过抽取(extract)
、转换(transform)
、加载(load)
至目的端的过程称为ETL
。
为什么使用hive:
- 操作接口采用SQL语法,提供快速开发的能力
- 避免了写MR,减少了学习成本
- 功能扩展方便
hive的特点
- 通过类
SQL
分析数据 - 数据存储在
HDFS
上,本身不存储数据,可以使已经存储的数据结构化 - 因为
hive
语句最终会生产MapReduce
任务去计算,适用于离线分析 hive
能够存储很大的数据集,可以直接访问HDFS
或者其他数据存储系统中的文件hive
除了支持MR计算引擎,还支持Spark
和TeZ
这两种分布式计算引擎- 数据的存储格式有多种,比如二进制格式,普通文本格式
二、安装
安装方式
hive
有三种安装方式:内嵌模式
、本地模式
、远程模式
metastore作用是:客户端连接metastore服务,metastore再连接MySQL数据库来存取元数据。有了metastore服务,可以多个客户端同时连接,且不需要知道MySQL的用户命和密码,只需要连接metestore服务即可。
内嵌模式
配置简单,一次只能一个客户端连接,适用于实验,不适用于生产环境。解压hive安装包, bin/hive 启动即可使用。缺点:不同路径启动hive,每个hive都有自己的元数据,无法共享
本地模式
本地模式采用外部数据库来存储元数据,目前支持的数据库有MySQL、Postgres、Oracle、MS SQL Server。
本地模式启动时,用的是跟hive在同一个进程的metastore服务。
hive根据hive.metastore.uris
参数来判断,如果为空,则为本地模式。缺点:每启动一次hive服务,都内置启动了一个metastore.
远程模式
- 远程模式下,需要单独起metastore服务,每个客户端都在配置文件里配置连接该metastore服务。metastore服务和hive运行在不同的进程里。
- 远程模式同样需要配置
hive.metastore.uris
参数来指定metastore机器的ip和端口,且需要单独手动启动metastore服务。 - hiveserver2是Hive启动了一个server,客户端可以使用JDBC协议,通过IP+ Port的方式对其进行访问,达到并发访问的目的。
hive安装
// 上传压缩包到Linux目录
cd /export/software/
// 解压到server目录 这里的版本随意
tar -zxvf apache-hive-3.1.2-bin.tar.gz -C /export/server
// 移动到server目录并修改文件命
cd /export/server
mv apache-hive-3.1.2-bin hive-3.1.2
// 解决hadoop、hive之间guava版本差异
cd /hive-3.1.2/
rm -rf lib/guava-19.0.jar
cp /export/server/hadoop-3.3.0/share/hadoop/common/lib/guava-27.0-jre.jar ./lib/
// 添加mysql jdbc驱动到hive安装包的lib文件下
mysql-connector-java-5.1.47-bin.jar
// 修改hive环境变量文件 添加Hadoop_HOME
cd /hive-3.1.2/conf/
mv hive-env.sh.template hive-env.sh
vim hive-env.sh
HADOOP_HOME=/export/server/hadoop-3.3.0
export HIVE_CONF_DIR=/export/server/hive-3.1.2/conf
export HIVE_AUX_JARS_PATH=/export/server/hive-3.1.2/lib
export HADOOP_HEAPSIZE=4096
// 在conf目录新增hive-site.xml配置mysql等相关信息
vim hive-site.xml
<configuration>
<!-- 存储元数据mysql相关配置 -->
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value> jdbc:mysql://min-node3:3306/hive?createDatabaseIfNotExist=true&useSSL=false&useUnicode=true&characterEncoding=UTF-8</value>
</property>
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.jdbc.Driver</value>
</property>
// 用户名
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>root</value>
</property>
// 密码
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>123456</value>
</property>
<!-- H2S运行绑定host -->
<property>
<name>hive.server2.thrift.bind.host</name>
<value>min-node3</value>
</property>
<!-- 远程模式部署metastore 服务地址 -->
<property>
<name>hive.metastore.uris</name>
<value>thrift://min-node3:9083</value>
</property>
<!-- 关闭元数据存储授权 -->
<property>
<name>hive.metastore.event.db.notification.api.auth</name>
<value>false</value>
</property>
<!-- 关闭元数据存储版本的验证 -->
<property>
<name>hive.metastore.schema.verification</name>
<value>false</value>
</property>
</configuration>
// 配置环境变量
vim /etc/profile
export HIVE_HOME=/export/server/hive-3.1.2
export PATH=:$HIVE_HOME/bin:$PATH
source /etc/profile
// 初始化metadata
cd /hive-3.1.2/
schematool -initSchema -dbType mysql -verbos
// Metastore 和 Hiveserver2启动
nohup hive --service metastore 2>&1 &
nohup hive --service hiveserver2 2>&1 &