大数据仓库之Hive的部署

2025-08-17 02:51:25

hive是facebook开源,并捐献给了apache组织,作为apache组织的顶级项目(hive.apache.org)。 hive是一个基于大数据技术的数据仓库(DataWareHouse)技术,主要是通过将用户(程序员)书写的SQL语句翻译成MapReduce代码,然后发布任务给Yarn执行,完成SQL 到 MapReduce的转换。可以将结构化的数据文件映射为一张数据库表,并提供类SQL查询功能。

Hive 的架构

1. 简介

HDFS:用来存储hive仓库的数据文件 yarn:用来完成hive的HQL转化的MR程序的执行 MetaStore:保存管理hive维护的元数据 Hive:用来通过HQL的执行,转化为MapReduce程序的执行,从而对HDFS集群中的数据文件进行统计。

2. 图

Hive的安装

虚拟机内存设置至少2G

# 步骤

1. HDFS

2. Yarn

3. MySQL

4. Hive

1. 安装mysql数据库

#参考MySQL安装文档

如果已经安装好了,但没有启动,可以执行下面的语句:

systemctl enable mysqld

systemctl start mysqld

systemctl status mysqld

#最后测试是否可用:

mysql -uroot -p123456

2. 安装Hadoop

# 配置hdfs和yarn的配置信息

#修改hadoop下的core-site.xml文件

hadoop.proxyuser.root.hosts

*

hadoop.proxyuser.root.groups

*

3. 安装hive

1 上传hive安装包到linux中

2 解压缩hive

[root@hadoop ~]# tar -zxvf apache-hive-3.1.2-bin.tar.gz -C /opt/installs

[root@hadoop ~]# mv apache-hive-3.1.2-bin hive3.1.2

3 配置环境变量

export HIVE_HOME=/opt/installs/hive3.1.2

export PATH=$PATH:$HIVE_HOME/bin

4 加载系统配置生效

[root@hadoop ~]# source /etc/profile

5 配置hive

hive-env.sh文件的具体内容如下所示:

# 拷贝一个hive-env.sh

[root@hadoop10 conf]# mv hive-env.sh.template hive-env.sh

# 配置hadoop目录

HADOOP_HOME=/opt/installs/hadoop3.1.4/

# 指定hive的配置文件目录

export HIVE_CONF_DIR=/opt/installs/hive3.1.2/conf/

hive-site.xml文件的具体配置如下所示:

拷贝得到hive-site.xml

[root@hadoop10 conf]# cp hive-default.xml.template hive-site.xml

javax.jdo.option.ConnectionURL

jdbc:mysql://hadoop10:3306/hive?useSSL=false

javax.jdo.option.ConnectionDriverName

com.mysql.cj.jdbc.Driver

javax.jdo.option.ConnectionUserName

root

javax.jdo.option.ConnectionPassword

123456

hive.cli.print.header

true

hive.cli.print.current.db

true

hive.server2.active.passive.ha.enable

true

登录mysql创建hive数据库(使用命令行创建)create database hive复制mysql驱动jar到hive的lib目录中驱动包在资料中的mysql驱动 文件夹下mysql-connector-java-8.0.26.jar放到/opt/installs/hive3.1.2/lib/

6.修改jar,防止jar包冲突

#将/opt/installs/hive3.1.2/lib下的guava-19.0.jar修改为guava-19.0.jar.bak

#jar包带上bak,jvm将不进行加载,相当于删除

cd /opt/installs/hive3.1.2/lib

mv guava-19.0.jar guava-19.0.jar.bak

#将hadoop下的guava-27.0-jre.jar 复制到hive的lib下

cp /opt/installs/hadoop3.1.4/share/hadoop/common/lib/guava-27.0-jre.jar /opt/installs/hive3.1.2/lib

#将/opt/installs/hive3.1.2/lib下的log4j-slf4j-impl-2.10.0.jar修改带上.bak

mv log4j-slf4j-impl-2.10.0.jar log4j-slf4j-impl-2.10.0.jar.bak

4 启动

1. 启动 hadoop

# 启动HDFS

start-dfs.sh

# 启动yarn

start-yarn.sh

2. 初始化元数据

初始化元数据:schematool -dbType mysql -initSchema初始化mysql的hive database中的信息。如果初始化报错,在hive-site.xml文件中,将里面的注释删除()

3. hive本地启动

# 本地模式启动 【管理员模式】

# 启动hive服务器,同时进入hive的客户端。只能通过本地方式访问。

[root@hadoop10 ~]# hive

hive>

客户端操作之HQL(Hive Query language)

# 1. 查看数据库

hive> show databases;

# 2. 创建一个数据库

hive> create database test_hive;

# 3. 查看database

hive> show databases;

# 4. 切换进入数据库

hive> use test_hive;

# 5.查看所有表

hive> show tables;

# 6.创建一个表

hive> create table t_user(id string,name string,age int);

# 7. 添加一条数据(转化为MR执行--不让用,仅供测试)

hive> insert into t_user values('1001','zhangsan',20);

# 8.查看表结构

hive> desc t_user;

# 9.查看表的schema描述信息。(表元数据,描述信息)

hive> show create table t_user;

# 明确看到,该表的数据存放在hdfs中。

# 10 .查看数据库结构

hive> desc database test_hive;

# 11.查看当前库

hive> select current_database();

# 12 其他sql

select * from t_user;

select count(*) from t_user; (Hive会启动MapReduce)

4.hive的客户端和服务端

# 启动hive的服务器,可以允许远程连接方式访问。

// 前台启动

[root@hadoop10 ~]# hiveserver2

// 后台启动

[root@hadoop10 ~]# hiveserver2 &

beeline客户端

# 启动客户端

[root@hadoop10 ~]# beeline

beeline>!connect jdbc:hive2://hadoop10:10000

DBeaver客户端(图形化界面)

# 1: 解压

# 2: 准备dbeaver连接hive的依赖jar,建议将jar包放置在dbeaver安装目录中

# 3: 启动

# 4: 初次使用,需要在linux中执行 hdfs dfs -chmod -R 777 /

DataGrip客户端

5.hive -e

执行sql语句

hive -e sql语句

例如:hive -e "select * from [数据库名.]t_person"

6.hive -f

执行文件中的sql语句

hive -f sql脚本(脚本里面直接写sql语句)

例如:hive -f /opt/data/hive.sql

7. hive本地模式优化执行速度

-- 在hive的配置文件 hive-env.sh 中,将以下配置注释解开

export HADOOP_HEAPSIZE=1024

-- 在SQL会话中,执行以下语句:

set hive.exec.mode.local.auto=true;

8.编写hive启动和停止的脚本

nohup command >output.txt 2>&1 &

nohup 作用:终端结束,命令可以不挂起在后台继续运行

& 作用:后台运行

> output.txt 作用: command 产生的日志(控制台输出)重定向到该文件中

2>&1 作用:将错误的日志重定向到正确日志对应的输出

nohup command >/dev/null 2>&1 & 了解 >/dev/null 黑洞,其实就是扔掉日志

启动: nohup hiveserver2 >/opt/installs/hive3.1.2/output.txt 2>&1 &

停止: ps -ef | grep HiveServer2 | grep -v grep | awk '{print $2}' | xargs kill

[root@hadoop10 sbin]# cat start-hive.sh

#! /bin/bash

nohup hiveserver2 >/opt/installs/hive3.1.2/output.txt 2>&1 &

[root@hadoop10 sbin]# cat stop-hive.sh

#! /bin/bash

#ps -ef | grep HiveServer2 | grep -v grep | awk '{print $2}' | xargs kill

x1=`ps -ef | grep HiveServer2 | grep -v grep | awk '{print $2}'`

kill $x1

总结

生产环境必选项:

使用Remote模式 + MySQL元数据库。

启用HiveServer2的认证(如LDAP/Kerberos)。

性能优化:

调整hive.exec.reducers.bytes.per.reducer控制Reduce任务数。

使用ORC/Parquet格式存储数据。