4.3 部署Hive
下载地址
https://archive.apache.org/dist/hive/
https://hive.apache.org/downloads.html
这里我们下载hive-3.1.2这个版本
软件地址在这:
链接: https://pan.baidu.com/s/1sYvZsTc4Mz1d9QnwG8zu5A 提取码: jewn
--来自百度网盘超级会员v7的分享
部署
部署Mysql8.x
1.下载镜像
yum install wget wget https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm
2.安装镜像
rpm -ivh mysql80-community-release-el7-3.noarch.rpm
3.升级系统中的软件包
yum update mysql-server
4.安装mysql
yum -y install mysql-server
提示:
失败的软件包是:mysql-community-icu-data-files-8.0.30-1.el7.x86_64
GPG 密钥配置为:file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql
重新导入密钥并执行安装
rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2022 yum -y install mysql-server
安装完毕
5.修改文件权限
chown mysql:mysql -R /var/lib/mysql
6.初始化
mysqld --initialize
7.启动设置开机自启动
systemctl start mysqld.service systemctl enable mysqld.service systemctl daemon-reload
看到active状态表示正常
8.查看版本
mysqladmin --version
9.进入mysql
mysql -u root -p
权限错误
10.重置密码
#关闭服务 systemctl stop mysqld #跳过检查方式启动 mysqld --user=root --skip-grant-tables & #登录mysql mysql:mysql -u root -p #刷新权限 flush privileges; #修改密码 use mysql; ALTER USER 'root'@'localhost' IDENTIFIED BY '你的密码';
11.开启mysql远程
#登录 mysql -u root -p 你的密码 #查询数据库的用户 SELECT DISTINCT CONCAT('User: ''',user,'''@''',host,''';') AS query FROM mysql.user; #更新用户表 UPDATE user SET `Host` = '%' WHERE `User` = 'root' LIMIT 1; alter user 'root'@'%' identified with mysql_native_password by '你的密码'; #刷新权限 flush privileges;
12.使用Navicat测试连接
连接成功即可
备份快照
部署Hive
由于Hive本身属于Hadoop客户端工具,所以放在任意节点都可以
这里我们选择部署在客户机bigdata04上
1.上传安装包并解压:
2.进入conf目录 修改模板文件
mv hive-env.sh.template hive-env.sh mv hive-default.xml.template hive-site.xml
3.修改hive-env.sh配置文件内容并保存
vi hive-env.sh #添加如下三行内容 export JAVA_HOME=/data/soft/jdk1.8 export HIVE_HOME=/data/soft/apache-hive-3.1.2-bin export HADOOP_HOME=/data/soft/hadoop-3.2.0
4.修改hive-site.xml文件具体内容
- 指定元数据存放数据库为mysql
- 指定日志目录与资源目录
修改Hive中的hive-site.xml配置文件 vi hive-site.xml <property> <name>javax.jdo.option.ConnectionURL</name> <value>jdbc:mysql://mysqlIp:3306/hive?serverTimezone=Asia/Shanghai</value> </property> <property> <name>javax.jdo.option.ConnectionDriverName</name> <value>com.mysql.cj.jdbc.Driver</value> </property> <property> <name>javax.jdo.option.ConnectionUserName</name> <value>root</value> </property> <property> <name>javax.jdo.option.ConnectionPassword</name> <value>admin</value> </property> <property> <name>hive.querylog.location</name> <value>/data/hive_repo/querylog</value> </property> <property> <name>hive.exec.local.scratchdir</name> <value>/data/hive_repo/scratchdir</value> </property> <property> <name>hive.downloaded.resources.dir</name> <value>/data/hive_repo/resources</value> </property>
5.在bigdata01节点上修改Hadoop配置
这里配置的目的是处理beeline连接产生的错误信息
在Hadoop的core-site.xml文件中增加下面配置 vi core-site.xml <property> <name>hadoop.proxyuser.root.hosts</name> <value>*</value> </property> <property> <name>hadoop.proxyuser.root.groups</name> <value>*</value> </property>
6.同步bigdata01的core-site.xml到bigdata02和bigdata03
scp -rq /data/soft/hadoop-3.2.0/etc/hadoop/core-site.xml bigdata02:/data/soft/hadoop-3.2.0/etc/hadoop/ scp -rq /data/soft/hadoop-3.2.0/etc/hadoop/core-site.xml bigdata03:/data/soft/hadoop-3.2.0/etc/hadoop/
ps:bigdata04节点不需要修改此配置
8.重启Hadoop集群
stop-all.sh start-all.sh
重启完成
9.初始化Hive的Metastore
- 拷贝jdbc驱动包到hive lib目录下
- 打开hive-site.xml
- 删除hive.txn.xlock.iow对应的description标签
- 这个位置原始配置有问题
- 在MySQL下创建hive数据库
- 初始化:
bin/schematool -dbType mysql -initSchema
初始化成功标志
4.4 Hive基础
使用方式
- 命令行
- JDBC
命令行
- bin/hive 最基础的使用方式
- beeline:官方推荐的轻量级客户端工具
hive
在hive目录下 bin/hive进入
简单测试下
show tables; create table t1(id int,name string);
添加数据
insert into t1(id,name) values(1,"zs");
这里执行时会产生mapReduce任务
查询表数据
select * from t1;
查询时并没有产生mapReduce任务,针对select * from tableName这种操作,就跟我们在hdfs打开文件一样,不需要调用计算引擎,所以也就没有产生mapReduce任务。
删除表测试
drop table if exists t1;
退出
quit;
beeline
首先启动HiveServer2服务
bin/hiveserver2
这里必须要等待Hive2服务启动后再通过beeline去连接
等待Hive2输出完所有的Session ID 信息
一般是四行
hiveserver2默认会监听本机的10000端口
重新打开一个新的session会话
启动beeline
bin/beeline -u jdbc:hive2://localhost:10000
上述操作再来一遍
create table t1(id int,name string);
这里报错信息提示缺少写权限
先退出beeline,用root用户启动
bin/beeline -u jdbc:hive2://localhost:10000 -n root
再来一遍
create table t1(id int,name string); select * from t1;
可以看到beeline会对一些信息进行封装,显得更加好看和专业
官方推荐使用beeline,这个看个人喜好。
hive -e 执行hql语句
首先知道hive -e无需启动会话,就可以执行hive命令
测试如下
配置hive环境变量
vi /etc/profile export HIVE_HOME=/data/soft/apache-hive-3.1.2-bin source /etc/profile
JDBC方式
这里我们创建一个maven项目
com.bigdata.hive
添加Hive开发依赖
hive JDBC驱动如下
<dependency> <groupId>org.apache.hive</groupId> <artifactId>hive-jdbc</artifactId> <version>3.1.2</version> </dependency>
核心代码:
先启动hiveserver2服务
/** * JDBC代码操作 Hive */ public class HiveJdbcDemo { public static void main(String[] args) throws Exception{ //指定hiveserver2的连接 String jdbcUrl = "jdbc:hive2://192.168.197.104:10000"; //获取jdbc连接,这里的user使用root,就是linux中的用户名,password随便指定即 Connection conn = DriverManager.getConnection(jdbcUrl, "root", "any") //获取Statement Statement stmt = conn.createStatement(); //指定查询的sql String sql = "select * from t1"; //执行sql ResultSet res = stmt.executeQuery(sql); //循环读取结果 while (res.next()){ System.out.println(res.getInt("id")+"\t"+res.getString("name")); } } }
这里处理下log4j的信息
排除hive自带的log4j
<dependency> <groupId>org.apache.hive</groupId> <artifactId>hive-jdbc</artifactId> <version>3.1.2</version> <exclusions> <exclusion> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> </exclusion> </exclusions> </dependency>
资源目录下新增log4j.xml
重新打印,即可解决log4j报错信息问题
使用临时参数
在hive命令行中可以使用set命令临时设置一些参数的值
其实就是临时修改hive-site.xml中参数的值
通过set命令设置的参数只在当前会话有效,退出重新打开就无效了
在hive-site.xml中有一个参数是 hive.cli.print.current.db ,这个参数可以显示当前所在的数据库名 称,默认值为 false 。 在这里我们设置为true。
set hive.cli.print.current.db = true;
还有一个参数 hive.cli.print.header 可以控制获取结果的时候显示字段名称,这样看起来会比较清晰
set hive.cli.print.header = true;
修改 ~/.hiverc,保留配置仅对当前用户生效
vi ~/.hiverc set hive.cli.print.current.db = true; set hive.cli.print.header = true;
重新进入看下效果
配置Hive日志
删除重复的日志信息
hive中的一个日志依赖包和hadoop中的日志依赖包冲突
我们移除hive的日志依赖包
mv log4j-slf4j-impl-2.10.0.jar log4j-slf4j-impl-2.10.0.jar.bak
配置Hive日志信息目录
mv hive-log4j2.properties.template hive-log4j2.properties vi hive-log4j2.properties 配置信息如下 property.hive.log.level = WARN property.hive.root.logger = DRFA property.hive.log.dir = /data/hive_repo/log property.hive.log.file = hive.log property.hive.perflogger.log.level = INFO
这样后期分析日志就可以到 /data/hive_repo/log 目录下去查看了。