Hive安装
1.安装前提
基于上篇Hadoop完全分布式安装来安装,需要有HDFS环境
软件版本
- Hadoop 3.1.1
- Mysql 8
- Hive 3.1.2
-
安装 Mysql8到master
-
下载 Mysql JDBC JAR 包
MySQL :: Download MySQL Connector/J (Archived Versions)
解压后将 JAR 包上传至服务器 /opt/soft
软件 | master | slave1 | slave2 |
---|---|---|---|
Hadoop | ✓ | ✓ | ✓ |
Mysql | √ | ||
Hive | √ |
2.源数据授权
Mysql 创建并授权 Hive 账户
master
不满足策略则需要按上面方法修改密码策略
create user 'hive'@'%' identified by 'hive@123456';
# 将所有权限授权给 Hive 账户
grant all on *.* to 'hive'@'%';
# 刷新权限
flush privileges;
测试是否能成功登录 `mysql -uhive -phive@123456
3. 下载 Hive
master
下载 Hive(3.1.2) 并解压缩
cd /opt/soft
wget http://archive.apache.org/dist/hive/hive-3.1.2/apache-hive-3.1.2-bin.tar.gz
tar -zxvf apache-hive-3.1.2-bin.tar.gz -C /opt/module
mv apache-hive-3.1.2-bin.tar.gz hive
4.配置环境变量
vim /etc/profile
# HIVE
export HIVE_HOME=/opt/module/hive
export PATH=$PATH:$HIVE_HOME/bin
# 使其生效
source /etc/profile
5.配置Hive
配置Hadoop环境信息
hive-env.sh
export HADOOP_HOME=/opt/module/hadoop-3.1.1
export HIVE_CONF_DIR=/opt/module/hive/conf
创建 hive-site.xml 文件
cd /opt/module/hive/conf
vi hive-site.xml
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<!-- Hive 元数据的存放位置 -->
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://master:3306/metastore?createDatabaseIfNotExist=true&allowPublicKeyRetrieval=true&useSSL=false</value>
<description>JDBC connect String for a JDBC metastore</description>
</property>
<!-- 指定驱动程序 -->
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.cj.jdbc.Driver</value>
<description>Driver class name for a JDBC metastore</description>
</property>
<!-- 连接数据库的用户名 -->
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>hive</value>
<description>username to use against metastore database</description>
</property>
<!-- 连接数据库的密码 -->
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>hive@123456</value>
<description>password to use against metastore database</description>
</property>
</configuration>
移动 JDBC 文件至 lib 目录
cp mysql-connector-java.jar /opt/module/hive/lib
初始化元数据库
注意:当使用的 hive 是 2.x 之前的版本,不做初始化也是 OK 的,当 hive 第一次启动的 时候会自动进行初始化,只不过会不会生成足够多的元数据库中的表。在使用过程中会 慢慢生成。但最后进行初始化。如果使用的 2.x 版本的 Hive,那么就必须手动初始化元 数据库。使用命令:
schematool -dbType mysql -initSchema
5.Hive 常用属性配置
可以在 hive-site.xml 中增加以下常用配置,方便使用
数据存储位置
<property>
<!-- 数据默认存储位置(HDFS) -->
<name>hive.metastore.warehouse.dir</name>
<value>/user/hive/warehouse</value>
</property>
显示当前操作的 Database 库
<!-- 在命令行中显示当前操作的数据库 -->
<property>
<name>hive.cli.print.current.db</name>
<value>true</value>
</property>
显示表头属性
<property>
<!-- 在命令行中显示数据的表头 -->
<name>hive.cli.print.header</name>
<value>true</value>
</property>
本地模式
<property>
<!-- 操作小规模数据时,使用本地模式,提高效率 -->
<name>hive.exec.mode.local.auto</name>
<value>true</value>
</property>
备注:当 Hive 的输入数据量非常小时,Hive 通过本地模式在单台机器上处理所有的任务。对于小数据集,执行时间会明显被缩短。当一个 job 满足如下条件才能真正使用本地模式:
- job 的输入数据量必须小于参数:hive.exec.mode.local.auto.inputbytes.max (默认128MB)
- job 的 map 数必须小于参数:hive.exec.mode.local.auto.tasks.ma x(默认4)
- job 的 reduce 数必须为 0 或者 1
Hive Log4j 配置
cd /opt/module/hive/conf
cp hive-log4j2.properties.template hive-log4j2.properties
vim hive-log4j2.properties
5.验证Hive安装
hive --help
成功后如果出现 Log4j 版本冲突警告(可忽略),我们保留 Hadoop 的 Log4j,删除 Hive 中的 Log4j
rm /opt/module/hive/lib/log4j-slf4j-impl-2.6.2.jar
6.启动HIve
1. hive启动
hive
启动成功的话如上图所示,接下来便可以做 hive 相关操作
补充:
1、上面的 hive 命令相当于在启动的时候执行:hive --service cli
2、使用 hive --help,可以查看 hive 命令可以启动那些服务
3、通过 hive --service serviceName --help 可以查看某个具体命令的使用方式
2. HiveServer2/beeline
在现在使用的最新的 hive-2.3.3 版本中:都需要对 hadoop 集群做如下改变,否则无法使用
修改 hadoop 集群的 hdfs-site.xml 配置文件
加入一条配置信息,表示启用 webhdfs
<property>
<name>dfs.webhdfs.enabled</name>
<value>true</value>
</property>
修改 hadoop 集群的 core-site.xml 配置文件
加入两条配置信息:表示设置 hadoop 的代理用户
<property>
<name>hadoop.proxyuser.hadoop.hosts</name> ##注意是hadoop
<value>*</value>
</property>
<property>
<name>hadoop.proxyuser.hadoop.groups</name>
<value>*</value>
</property>
配置解析:
hadoop.proxyuser.hadoop.hosts 配置成*的意义,表示任意节点使用 hadoop 集群的代理用户 hadoop 都能访问 hdfs 集群,hadoop.proxyuser.hadoop.groups 表示代理用户的组所属
分发master的配置信息
scp core-site.xml hdfs-site.xml slave1:/opt/module/hadoop3.1.2/etc/hadoop
scp core-site.xml hdfs-site.xml slave2:/opt/module/hadoop3.1.2/etc/hadoop
以上操作做好了之后(最好重启一下HDFS集群),请继续做如下两步:
# 启动hiveserver2
nohup hive --service hiveserver2 &
# 启动metastore
nohup hive --service metastore &
启动 beeline 客户端去连
beeline -u jdbc:hive2//master:10000 -n hadoop
[hadoop@master ~]$ beeline
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/opt/module/hive/lib/log4j-slf4j-impl-2.10.0.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/opt/module/hadoop-3.1.1/share/hadoop/common/lib/slf4j-log4j12-1.7.25.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]
Beeline version 3.1.2 by Apache Hive
beeline> !connect jdbc:hive2://master:10000
Connecting to jdbc:hive2://master:10000
Enter username for jdbc:hive2://master:10000:
Enter password for jdbc:hive2://master:10000:
Connected to: Apache Hive (version 3.1.2)
Driver: Hive JDBC (version 3.1.2)
Transaction isolation: TRANSACTION_REPEATABLE_READ
0: jdbc:hive2://master:10000>
7.脚本启动hive
编辑hive启停shell脚本,https://www.isolves.com/it/wlyx/fwq/2021-07-28/42107.html
#!/bin/sh
if [ $# -ne 2 ] ;then
echo "please input two params,first is (metastore|hiveserver2),second is (start|stop)"
exit 0
fi
if [ "$1" == "metastore" ]; then
if [ "$2" == "start" ] ; then
echo "now is start metastore"
nohup /opt/module/hive/bin/hive --service metastore &
exit 0
elif [ "$2" == "stop" ] ; then
metastore_pid=`ps -ef|grep "HiveMetaStore"|grep "JAVA"|awk '{print $2}'`
kill ${metastore_pid}
echo "-------metastore has stop"
exit 0
else
echo "second param please input 'start' or 'stop'"
exit 0
fi
elif [ "$1" == "hiveserver2" ] ; then
if [ "$2" == "start" ]; then
echo "now is start hiveserver2"
nohup /opt/module/hive/bin/hive --service hiveserver2 &
exit 0
elif [ "$2" == "stop" ]; then
hiveserver2_pid=`ps -ef|grep "HiveServer2"|grep "java"|awk '{print $2}'`
kill ${hiveserver2_pid}
echo "-------hiveserver has stop"
exit 0
else
echo "second param please input 'start' or 'stop'"
exit 0
fi
else
echo "first param please input 'metastore' or 'hiveserver2'"
fi
8.测试
现有一个文件student.txt,将其存入hive中,student.txt数据格式如下:
1001,zhangshan
1002,lishi
1003,zhaoliu
创建一个数据库myhive
hive> create database myhive;
OK
使用新的数据库myhive
hive> use myhive;
OK
在数据库myhive创建一张student表
hive> create table student(id int, name string) row format delimited fields terminated by ",";
OK
往表中加载数据并查看
hive> load data local inpath "/home/hadoop/student.txt" into table student;
Loading data to table myhive.student
OK
Time taken: 1.34 seconds
hive> select * from student;
OK
1001 zhangshan
1002 lishi
1003 zhaoliu
Time taken: 0.684 seconds, Fetched: 3 row(s)
hive>
注意:如果遇到错误Could not find or load main class org.apache.hadoop.mapreduce.v2.app.MRAppMaster
则在 $HADOOP_HOME/etc/mapred-site.xml文件中,添加一下配置
<property>
<name>yarn.app.mapreduce.am.env</name>
<value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>
</property>
<property>
<name>mapreduce.map.env</name>
<value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>
</property>
<property>
<name>mapreduce.reduce.env</name>
<value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>
</property>
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· AI与.NET技术实操系列(六):基于图像分类模型对图像进行分类