2022-07-23 Hive安装部署、客户端简单使用

准备资源:mysql-5.7.28-1.el7.x86_64.rpm-bundle.tar、apache-hive-3.1.2-bin.tar.gz、mysql-connector-java-5.1.37.jar

一、Hive的安装部署

1. 安装MySQL

MySQL建库注意事项:基础字符集使用utf8,排序规则使用utf8_general_ci(有必要的话)

(1) 删除Linux原装的MySQL或者mariaDB

rpm -qa | grep -E -i '(mysql|mariadb)' | xargs -n1 sudo rpm -e --nodeps

(2) 将mysql-5.7.28-1.el7.x86_64.rpm-bundle.tar上传至目录:/opt/software;并将其解包到:/opt/software/mysql-rpms

# 来到software目录下
cd /opt/software/
# 创建目录,用来存放解包出的rpm包
mkdir -p ./mysql-rpms
# 解包
tar -xvf mysql-5.7.28-1.el7.x86_64.rpm-bundle.tar -C ./mysql-rpms/

(3) 安装解出来的的rpm

# 如果之前mysql服务正在运行的时候卸载了mysql的话
# mysql会残留文件,删除这些残留文件使用下面命令
# cat /etc/my.cnf | awk -F'=' '/datadir/{print $2}' | xargs sudo rm -rf


# 安装MySQL需要的其他依赖
sudo yum install -y libaio
# mysql rpm包的安装顺序如下
sudo rpm -ivh mysql-community-common-5.7.28-1.el7.x86_64.rpm
sudo rpm -ivh mysql-community-libs-5.7.28-1.el7.x86_64.rpm
sudo rpm -ivh mysql-community-libs-compat-5.7.28-1.el7.x86_64.rpm
sudo rpm -ivh mysql-community-client-5.7.28-1.el7.x86_64.rpm
sudo rpm -ivh mysql-community-server-5.7.28-1.el7.x86_64.rpm

# 安装完之后,初始化数据库
sudo mysqld --initialize --user=mysql

# 启动mysql服务
sudo systemctl start mysqld.service

(4) 重新设置root用户的登录密码

# 获取mysql给root用户分配的临时密码
sudo cat -n /var/log/mysqld.log | grep -E  '.+password.*root@localhost:.+' | tr -s ' ' | awk '{gsub(" ","");gsub("\t"," ");print $0}' | sort -nrt ' ' -k1 | awk 'FNR==1{s="root@localhost:";i=index($0,s);print substr($0,i+length(s))}'

# 使用上面得到的密码登录mysql
# mysql的登录方式为:
# mysql -uroot -p (本地登录方式)
# mysql -uroot -p密码 -hlocalhost (远程登录方式)
# mysql安装好之后无法远程登录,先使用本地登录

# 重新设置root用户的登录密码
set password = password("123456");

(5) 其他配置

# 用root用户登录mysql

# 配置mysql允许远程登录
use mysql;
update user set host = "%" where user = "root";
flush privileges;

# 先查看哪些编码不是utf8,filesystem和dir无需关心
show variables like "character%";
# 修改字符编码为utf8
set global character_set_database=utf8;
set global character_set_server=utf8;

# 重新登录mysql

2. 安装Hive

(1) 将apache-hive-3.1.2-bin.tar.gz、mysql-connector-java-5.1.37.jar上传至目录:/opt/software;并将apache-hive-3.1.2-bin.tar.gz解压到:/opt/moudle

# 来到software目录下
cd /opt/software
# 解压
tar -zxvf ./apache-hive-3.1.2-bin.tar.gz -C ../moudle/
# 更名
mv ../moudle/apache-hive-3.1.2-bin ../moudle/hive-3.1.2

(2) 配置环境变量,并使配置的环境变量生效

# 编辑自己创建的环境变量文件
sudo vim /etc/profile.d/my-env.sh

# 添加的环境变量内容如下
#Hive环境变量
export HIVE_HOME=/opt/moudle/hive-3.1.2
export PATH=$PATH:$HIVE_HOME/bin

# 使环境变量生效
source /etc/profile

(3) 删除hive中可能引起冲突的jar包、将jdbc包放入lib目录中

# 删除冲突jar包
rm -rf $HIVE_HOME/lib/log4j-slf4j-impl*

# 放jdbc包
cp /opt/software/mysql-connector-java-5.1.37.jar $HIVE_HOME/lib

(4) 创建hive的配置文件,并向其中写入配置内容($HIVE_HOME/conf/hive-site.xml)

<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
	<!-- jdbc连接的URL -->
	<property>
		<name>javax.jdo.option.ConnectionURL</name>
		<value>jdbc:mysql://hadoop101:3306/metastore?useSSL=false</value>
	</property>
	<!-- jdbc连接的Driver-->
	<property>
		<name>javax.jdo.option.ConnectionDriverName</name>
		<value>com.mysql.jdbc.Driver</value>
	</property>
	<!-- jdbc连接的username-->
	<property>
		<name>javax.jdo.option.ConnectionUserName</name>
		<value>root</value>
	</property>
	<!-- jdbc连接的password -->
	<property>
		<name>javax.jdo.option.ConnectionPassword</name>
		<value>123456</value>
	</property>
	<!-- Hive默认在HDFS的工作目录 -->
	<property>
		<name>hive.metastore.warehouse.dir</name>
		<value>/user/hive/warehouse</value>
	</property>
	<!-- Hive元数据存储的验证 -->
	<property>
		<name>hive.metastore.schema.verification</name>
		<value>false</value>
	</property>
	<!-- 元数据存储授权  -->
	<property>
		<name>hive.metastore.event.db.notification.api.auth</name>
		<value>false</value>
	</property>
	<!-- 指定由元数据服务代理hive操作mysql中的元数据 -->
	<property>
		<name>hive.metastore.uris</name>
		<value>thrift://hadoop101:9083</value>
	</property>
	<!-- 配置使用jdbc方式使用Hive -->
	<!-- 指定hiveserver2连接的host -->
	<property>
		<name>hive.server2.thrift.bind.host</name>
		<value>hadoop101</value>
	</property>
	<!-- 指定hiveserver2连接的端口号 -->
	<property>
		<name>hive.server2.thrift.port</name>
		<value>10000</value>
	</property>
	<!-- 配置使用hive原生方式客户端时,打印表头和库名 -->
	<property>
		<name>hive.cli.print.header</name>
		<value>true</value>
	</property>
	<property>
		<name>hive.cli.print.current.db</name>
		<value>true</value>
	</property>
</configuration>

(5) 配置hive的运行日志存放位置

# 先在hive安装目录下创建logs文件夹,用来存储日志
cd $HIVE_HOME
mkdiri -p logs

# 来到配置目录下
cd $HIVE_HOME/conf
# 修改hive存放配置文件目录下的hive-log4j2.properties.template文件名称为hive-log4j2.properties
mv hive-log4j2.properties.template hive-log4j2.properties
# 修改配置
vim  hive-log4j2.properties

# 修改内容为
property.hive.log.dir=/opt/moudle/hive-3.1.2/logs

(6) 配置执行hive脚本时,能够使用的内存大小,默认大小为256M,太小容易导致内存溢出

# 来到存放配置文件的目录下
cd $HIVE_HOME/conf

# 将hive-env.sh.template重名为hive-env.sh
mv hive-env.sh.template hive-env.sh

# 使用Vim打开,并执行替换
vim hive-env.sh

# 进入Vim环境后,摁:,输入以下内容一键替换,配置了1g的内存供使用
%s/# export HADOOP_HEAPSIZE=1024/export HADOOP_HEAPSIZE=1024/

# 退出保存

(7) 初始化元数据库

# 先登录mysql,创建数据库metastore
create database metastore;

# 退出mysql,执行下面的命令
schematool -initSchema -dbType mysql -verbose

3. 启停

(1) 编写启停脚本

# 脚本命名为hive.sh
vim ~/bin/hive.sh

# 下面为脚本内容
#!/bin/bash
function checkMetastore(){
	line=$(cat $HIVE_HOME/conf/hive-site.xml | awk '{\
		i=index($0, "hive.metastore.uris"); \
		if(i!=0){ \
			getline; \
			print $0 \
		} \
	}')
	line=${line##*:}
	port=${line%%</value>}
	if [[ $(sudo netstat -nlp | grep $port | wc -l) -eq 0 ]]
	then
		return 1
	else
		return 0
	fi
}

function checkServer2(){
	port=$(cat $HIVE_HOME/conf/hive-site.xml | awk '{\
		i=index($0, "hive.server2.thrift.port"); \
		if(i!=0){ \
			getline; \
			print $0 \
		} \
	}' | grep -E -o '[0-9]+')
	if [[ $(sudo netstat -nlp | grep $port | wc -l) -eq 0 ]]
	then
		return 1
	else
		return 0
	fi
}

function startMetastore(){
	checkMetastore
	if [[ $? -eq 1 ]]
	then
		nohup hive --service metastore &>>$HIVE_HOME/logs/metastore.log &
	fi
	for i in $(seq 1 100)
	do
		checkMetastore
		if [[ $? -eq 0 ]]
		then
			return 0
		fi
		sleep 1
	done
	return 1
}

function startServer2(){
	checkServer2
	if [[ $? -eq 1 ]]
	then
		nohup hive --service hiveserver2 &>>$HIVE_HOME/logs/hiveserver2.log &
	fi
	for i in $(seq 1 100)
	do
		checkServer2
		if [[ $? -eq 0 ]]
		then
			return 0
		fi
		sleep 1
	done
	return 1
}


function main(){
	if [[ $# -ne 1 ]]
	then
		echo "usage: hive.sh (open-hive|open-beeline:stop)"
		exit
	fi

	case $1 in
	"open-hive"|"open-beeline")
		startMetastore
		if [[ $? -eq 0 ]]
		then
			if [[ $1 == "open-hive" ]]
			then
				hive
			else
				startServer2
				if [[ $? -eq 0 ]]
				then
					username=$(\
					cat $HADOOP_HOME/etc/hadoop/core-site.xml | \
					awk '{ \
					i=index($0,"hadoop.http.staticuser.user"); \
					if(i!=0){ \
						getline; \
						begin=index($0,"<value>")+length("<value>"); \
						end=index($0,"</value>"); \
						print substr($0,begin,end-begin); \
					}\
					}' \
					)
					url=$(\
					cat $HIVE_HOME/conf/hive-site.xml | \
					awk -vORS=':' '{ \
					i=match($0,"(hive\.server2\.thrift\.bind\.host|hive\.server2\.thrift\.port)"); \
					if(i!=0){ \
						getline; \
						begin=index($0,"<value>")+length("<value>"); \
						end=index($0,"</value>"); \
						print substr($0,begin,end-begin); \
					} \
					}' \
					| grep -E -o '.+[^:]')
					beeline -u jdbc:hive2://$url -n $username
				else
					echo "hiveserver2 has something wrong when starting"
				fi
			fi
		else
			echo "metastore has something wrong when starting"
		fi
	;;
	"stop")
		line=$(cat $HIVE_HOME/conf/hive-site.xml | awk '{\
			i=index($0, "hive.metastore.uris"); \
			if(i!=0){ \
				getline; \
				print $0 \
			} \
		}')
		line=${line##*:}
		metastorePort=${line%%</value>}
		server2Port=$(cat $HIVE_HOME/conf/hive-site.xml | awk '{\
			i=index($0, "hive.server2.thrift.port"); \
			if(i!=0){ \
				getline; \
				print $0 \
			} \
		}' | grep -E -o '[0-9]+')
		sudo netstat -nlp | awk -vmetastorePort=$metastorePort -vserver2Port=$server2Port '{ \
		i=match($0,"("metastorePort"|"server2Port")"); \
		if(i!=0){ \
			split($7,arr,"/"); \
			print arr[1]; \
		} \
		}' | xargs -n1 kill -9
	;;
	*)
		echo "usage: hive.sh (open-hive|open-beeline:stop)"
		exit
	;;
	esac
}

main "$*"


# 为脚本添加可执行权限
chmod +x ~/bin/hive.sh

(2) 启动、停止

# 先启动hadoop集群。此处启动的方式是通过自定义的脚本
hadoop-ha.sh start

# 在第一次打开客户端的时候,脚本会负责启动hive相关进程

# 打开hive的原生客户端
# 退出客户端命令:quit;
hive.sh open-hive

# 打开beeline客户端,该客户端使用jdbc的方式操作hive
# 第一次打开花费时间较长,原因是因为hiveserver2服务启动的非常慢
# 退出客户端命令:!quit
hive.sh open-beeline

# 关闭hive所有服务
hive.sh stop

二、Hiveshell操作以及配置

1. Hive的客户端操作(仅针对于原生客户端)

(1) 客户端中操作hdfs文件系统

# 其他命令参照下面命令
# 只是不用写hdfs前缀而已,以及多加一个;
dfs -ls /;

(2) 客户端中操作本地文件系统

# 其他命令参照下面命令
# 只是多加一个!以及一个;
!ls /;

2.Hive命令 

(1) 不进入客户端,直接执行指定的sql语句

hive -e "sql 语句"

(2) 不进入客户端,直接执行文件中的sql语句

hive -f 文件路径

3. HIve相关配置

(1) 改配置文件

作用范围:对所有连接永久有效

hive-site.xml中修改

(2) 启动hive的时候进行配置修改(不是用自定义脚本)

# 作用范围:仅本次连接有效
hive -hiveconf 配置项名=值

(3) 客户端中修改配置

# 作用范围:仅本次连接有效
# 客户端中设置配置项
set 配置项名=值;


# 查看配置项值
set 配置项名;

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值