
前言我们之前安装了Hive4.0.1但是Spark使用的是3.5.9和Hive4.0.1不太兼容所以现在安装Hive3.1.3稳定版。本地模式安装上传压缩包 /opt/modules解压tar -zxvf apache-hive-3.1.3-bin.tar.gz -C /opt/installs/重命名mv apache-hive-3.1.3-bin/ hive3.1.3配置环境变量vim /etc/profile.d/myenv.shexport HIVE_HOME/opt/installs/hive3.1.3 export PATH$PATH:$HIVE_HOME/binsource /etc/profile配置hive-env.shcd /opt/installs/hive3.1.3/conf cp hive-env.sh.template hive-env.sh修改hive-env.sh 中的内容export HIVE_CONF_DIR/opt/installs/hive3.1.3/conf export JAVA_HOME/opt/installs/jdk export HADOOP_HOME/opt/installs/hadoop export HIVE_AUX_JARS_PATH/opt/installs/hive3.1.3/lib export HADOOP_HEAPSIZE2048启动集群start-all.sh给hdfs创建文件夹hdfs dfs -mkdir -p /user/hive/warehouse hdfs dfs -mkdir -p /tmp/hive/ hdfs dfs -chmod 777 /user/hive/warehouse hdfs dfs -chmod 777 /tmp/hive使用本地模式的最大特点是将元数据从derby数据库变为mysql数据库并且支持多窗口同时使用。第一步检查你的mysql是否正常systemctl status mysqld第二步进入到conf 文件夹下创建这个文件hive-site.xml?xml version1.0 encodingUTF-8 standaloneno? ?xml-stylesheet typetext/xsl hrefconfiguration.xsl? configuration !--配置MySql的连接字符串-- property namejavax.jdo.option.ConnectionURL/name valuejdbc:mysql://bigdata001:3306/hive3.1.3?createDatabaseIfNotExisttrueamp;useUnicodetrueamp;characterEncodingutf-8/value descriptionJDBC connect string for a JDBC metastore/description /property !--配置MySql的连接驱动-- property namejavax.jdo.option.ConnectionDriverName/name valuecom.mysql.cj.jdbc.Driver/value descriptionDriver class name for a JDBC metastore/description /property !--配置登录MySql的用户-- property namejavax.jdo.option.ConnectionUserName/name valueroot/value descriptionusername to use against metastore database/description /property !--配置登录MySql的密码-- property namejavax.jdo.option.ConnectionPassword/name value123456/value descriptionpassword to use against metastore database/description /property !-- 以下两个不需要修改只需要了解即可 -- !-- 该参数主要指定Hive的数据存储目录 -- property namehive.metastore.warehouse.dir/name value/user/hive/warehouse/value /property !-- 该参数主要指定Hive的临时文件存储目录 -- property namehive.exec.scratchdir/name value/tmp/hive/value /property /configuration将mysql的驱动包上传至 hive 的lib 文件夹下初始化元数据本质就是在mysql中创建数据库并且添加元数据/opt/installs/hive3.1.3/bin/schematool --initSchema -dbType mysql初始化成功开启远程模式你想通过Dbeaver操作hive这个时候必须开启远程模式。创建临时目录cd /opt/installs/hive3.1.3/ mkdir iotmp chmod 777 iotmp前期准备工作hive-site.xml!--Hive工作的本地临时存储空间-- property namehive.exec.local.scratchdir/name value/opt/installs/hive3.1.3/iotmp/root/value /property !--如果启用了日志功能则存储操作日志的顶级目录-- property namehive.server2.logging.operation.log.location/name value/opt/installs/hive3.1.3/iotmp/root/operation_logs/value /property !--Hive运行时结构化日志文件的位置-- property namehive.querylog.location/name value/opt/installs/hive3.1.3/iotmp/root/value /property !--用于在远程文件系统中添加资源的临时本地目录-- property namehive.downloaded.resources.dir/name value/opt/installs/hive3.1.3/iotmp/${hive.session.id}_resources/value /propertyhive.downloaded.resources.dir:在 hdfs 上下载的一些资源会被存放在这个目录下hive 一定要小写否则报cause: java.net.URISyntaxException: Illegal character in path at index 26: /opt/installs/hive/iotmp/${Hive.session.id}_resources/json-serde-1.3.8-jar-with-dependencies.jar修改 core-site.xml【hadoop】的vim core-site.xmlproperty namehadoop.proxyuser.root.hosts/name value*/value /property property namehadoop.proxyuser.root.groups/name value*/value /property property namehadoop.http.staticuser.user/name valueroot/value /property !-- 不开启权限检查 -- property namedfs.permissions.enabled/name valuefalse/value /property开始配置远程服务两个配置hiveserver2服务修改hive-site.xmlproperty namehive.server2.thrift.bind.host/name valuebigdata01/value /property property namehive.server2.thrift.port/name value10000/value /property启动1. 该服务端口号默认是10000 2. 可以单独启动此服务进程供远程客户端连接此服务内置metastore服务。 3. 启动方式 方法1 直接调用hiveserver2。会进入监听状态不退出。 弊端是 ctrl c 窗口关闭之后服务就停止了 方法2 hive --service hiveserver2 # 进入后台启动 方法3 nohup hive --service hiveserver2 /dev/null 21 #信息送入黑洞。演示第一种启动方式hiveserver2可以使用beeline进行测试hive4.0 以后hive这个命令不让使用了而是需要使用beeline这个命令 连接方式 方式1 step1. beeline 回车 step2. !connect jdbc:hive2://bigdata001:10000 回车 step3. 输入用户名 回车 用户名 step4. 输入密码 可以不输入 方法2(直连) beeline -u jdbc:hive2://bigdata001:10000 -n 用户名 解析: hive2是Hive的协议名称 ip: Hiveserver2服务所在的主机IP。 10000是Hiveserver2的端口号 退出 Ctrl C 可以退出客户端开启另一个窗口而且当我们成功开启hiveserver2的时候使用jps查询会多出一个名叫RunJar的进程然后如果能找到这个进程里面的hiveserver2信息说明就成功了。如果想结束hiveserver2直接kill -9 进程号配置metastore 服务metastore服务意义为别人连接mysql元数据提供服务的。修改hive-site.xmlproperty namehive.metastore.uris/name valuethrift://bigdata001:9083/value /property解析thrift:是协议名称ip为metastore服务所在的主机ip地址9083是默认端口号启动方式方法1hive --service metastore 方法2nohup hive --service metastore 21 /dev/null #信息送入黑洞。解析21 /dev/null 意思就是把错误输出2重定向到标准输出1也就是屏幕标准输出进了“黑洞”也就是标准输出进了黑洞错误输出打印到屏幕。Linux系统预留可三个文件描述符0、1和2他们的意义如下所示0——标准输入stdin-- System.in1——标准输出stdout--System.out2——标准错误stderr --System.err可以看到2个RunJar并且详情里面可以分别看到hiveserver2和metastore这就代表启动成功使用dbeaver链接Hive使用下面命令测试--创建数据库 create database db01; --创建表 create table db01.t_user( id int, name string, age int, height double ) comment 这是一个学生表 row format delimited fields terminated by \t stored as textfile; --清空表 truncate table db01.t_user; --插入数据 INSERT INTO db01.t_user (id, name, age, height) values (1, 小米, 25, 180.2), (2, 小李, 30, 172.2); select * from db01.t_user;创建的数据库和表可以在hdfs目录看到一个启动命令经常启动metastore 以及hiveserver2这两个服务命令有点长为了长期使用可以编写一个命令#!/bin/bash # hive 服务控制脚本可以控制 Hive 的 metastore 和 hiveserver2 服务的启停 # 使用方式: hive-server-manager.sh [start|stop|status] [metastore|hiveserver2] # - start : 一键开启metastore和hiveserver2服务也可以指定服务开启 # - stop : 一键停止metastore和hiveserver2服务也可以指定服务停止 # - status : 一键查看metastore和hiveserver2服务也可以指定服务查看 help_info() { echo --------------------------------------------------------------------------------- echo | 本脚本可以一键控制 Hive 的 metastore 和 hiveserver2 服务 | echo | 使用方式: hive-server-manager.sh [start|stop|status] [metastore|hiveserver2] | echo --------------------------------------------------------------------------------- echo | 第一个参数用来指定操作命令可以选择 开始(start)、停止(stop)、状态查看(status) | echo | 第二个参数用来指定操作的服务可以选择 metastore、hiveserver2默认为全部 | echo --------------------------------------------------------------------------------- echo | - start : 一键开启metastore和hiveserver2服务也可以指定服务开启 | echo | - stop : 一键停止metastore和hiveserver2服务也可以指定服务停止 | echo | - status : 一键查看metastore和hiveserver2服务也可以指定服务查看 | echo --------------------------------------------------------------------------------- exit -1 } # 获取操作命令 op$1 # 获取操作的服务 server$2 # 检查参数是否正确 if [ ! $op ]; then help_info elif [ $op ! start -a $op ! stop -a $op ! status ]; then help_info fi # 检查进程状态 metastore_pidps aux | grep org.apache.hadoop.hive.metastore.HiveMetaStore | grep -v grep | awk {print $2} hiveserver2_pidps aux | grep proc_hiveserver2 | grep -v grep | awk {print $2} # 检查日志文件夹的存在情况如果不存在则创建这个文件夹 log_dir/var/log/my_hive_log if [ ! -e $log_dir ]; then mkdir -p $log_dir fi # 开启服务 start_metastore() { # 检查是否开启如果未开启则开启 metastore 服务 if [ $metastore_pid ]; then echo metastore 服务已经开启进程号: $metastore_pid已跳过 else nohup hive --service metastore $log_dir/metastore.log 21 echo metastore 服务已经开启日志输出在 $log_dir/metastore.log fi } start_hiveserver2() { # 检查是否开启如果未开启则开启 hiveserver2 服务 if [ $hiveserver2_pid ]; then echo hiveserver2 服务已经开启进程号: $hiveserver2_pid已跳过 else nohup hive --service hiveserver2 $log_dir/hiveserver2.log 21 echo hiveserver2 服务已经开启日志输出在 $log_dir/hiveserver2.log fi } # 停止服务 stop_metastore() { if [ $metastore_pid ]; then kill -9 $metastore_pid fi echo metastore 服务已停止 } stop_hiveserver2() { if [ $hiveserver2_pid ]; then kill -9 $hiveserver2_pid fi echo hiveserver2 服务已停止 } # 查询服务 status_metastore() { if [ $metastore_pid ]; then echo metastore 服务已开启进程号: $metastore_pid else echo metastore 服务未开启 fi } status_hiveserver2() { if [ $hiveserver2_pid ]; then echo hiveserver2 服务已开启进程号: $hiveserver2_pid else echo hiveserver2 服务未开启 fi } # 控制操作 if [ ! $server ]; then ${op}_metastore ${op}_hiveserver2 elif [ $server metastore ]; then ${op}_metastore elif [ $server hiveserver2 ]; then ${op}_hiveserver2 else echo 服务选择错误 help_info fi上传到环境变量的目录下选一个目录下没有脚本的 /usr/local/bincd /usr/local/bin chmod 777 hive-server-manager.sh