HIVE 安装
# 下载
wget
# 解压
tar -xvf apache-hive-3.1.2-bin.tar.gz
mv apache-hive-3.1.2-bin hive
mv hive /usr/local/
# 配置环境变量
echo "export HIVE_HOME=/usr/local/hive" >> ~/.bashrc
source ~/.bashrc
echo "export PATH=$PATH:$HIVE_HOME/bin" >> ~/.bashrc
source ~/.bashrc
# 解决日志冲突
mv $HIVE_HOME/lib/log4j-slf4j-impl-2.10.0.jar $ hive _HOME/lib/log4j-slf4j-impl-2.10.0.jar.bak
# 解决guava.jar版本冲突(hadoop和hive)
mv $HIVE_HOME/lib/guava-19.0.jar $HIVE_HOME/lib/guava-19.0.jar.bak
cp $HADOOP_HOME/share/hadoop/common/lib/guava-27.0-jre.jar $HIVE_HOME/lib/
- 初始化元数据 bin/schematool -dbType derby -initSchema
mysql安装
# 拉取mysql镜像
docker pull mysql:5.7.35
# 运行mysql容器
docker run -itd --name mysql-server -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7.35
# 进入容器
docker exec -it mysql-server bash
# 连接mysql
mysql -h localhost -u root -p
Hive的元数据配置到mysql
- 拷贝mysql驱动到hive的lib下
# 拷贝mysql驱动到hive的lib下
cp /opt/software/mysql-connector-java-5.1.21.jar $HIVE_HOME/lib
- 在$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://192.168.10.105: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 元数据存储版本的验证 -->
<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 默认在 HDFS 的工作目录 -->
<property>
<name>hive. Meta store.warehouse.dir</name>
<value>/user/hive/warehouse</value>
</property>
</configuration>
- 在mysql中,创建hive的元数据库metastore
create database metastore;
初始化hive元数据库
schematool -initSchema -dbType mysql -verbose
启动hive
bin/hive
- 测试
create table test (id string);
insert into test values(1);
使用元数据服务的方式访问 Hive
- hive-site.xml配置如下:
<!-- 指定存储元数据要连接的地址 -->
<property>
<name>hive.metastore.uris</name>
<value>thrift://nn:9083</value>
</property>
- 启动metastore
hive --service metastore
注意: 启动后窗口不能再操作,需打开一个新的 shell 窗口做别的操作
- 启动 hive
bin/hive
使用JDBC访问hive
- 修改hive-site.xml配置
# hive-site.xml中添加如下配置:
<!-- 指定 hiveserver2 连接的 host -->
<property>
<name>hive.server2.thrift.bind.host</name>
<value>nn</value>
</property>
<!-- 指定 hiveserver2 连接的端口号 -->
<property>
<name>hive.server2.thrift.port</name>
<value>10000</value>
</property>
- 启动hive的元数据服务:hive –service metastore
- 启动hiveserver2服务:hive –service hiveserver2
- beeline连接hive:beeline -u jdbc:hive2://nn:10000 -n root
- 错误: java.lang.RuntimeException: org.apache.hadoop.ipc.RemoteException(org.apache. hadoop .security.authorize.AuthorizationException): User: root is not allowed to impersonate aaa (state=08S01,code=0)
修改hadoop的core-site.xml文件
<property>
<name> hadoop.proxyuser.root.hosts </name>
<value> * </value>
</property>
<property>
<name> hadoop.proxyuser.root.groups </name>
<value> * </value>
</property>
重启hdfs服务
hive启动脚本
编写脚本:vim $HIVE_HOME/bin/hiveservices.sh
#!/bin/bash
HIVE_LOG_DIR=$HIVE_HOME/logs
if [ ! -d $HIVE_LOG_DIR ]; then
mkdir -p $HIVE_LOG_DIR
fi
#检查进程是否运行正常,参数 1 为进程名,参数 2 为进程端口
function check_process() {
pid=$(ps -ef 2>/dev/null | grep -v grep | grep -i $1 | awk '{print
$2}')
ppid=$(
netstat -nltp 2>/dev/null | grep $2 | awk '{print $7}' | cut -d '/' -f 1
)
echo $pid
[[ "$pid" =~ "$ppid" ]] && [ "$ppid" ] && return 0 || return 1
}
function hive_start() {
metapid=$(check_process HiveMetastore 9083)
cmd="nohup hive --service metastore >$HIVE_LOG_DIR/metastore.log 2>&1
&"
[ -z "$metapid" ] && eval $cmd || echo "Metastroe 服务已启动"
server2pid=$(check_process HiveServer2 10000)
cmd="nohup hive --service hiveserver2 >$HIVE_LOG_DIR/hiveServer2.log 2>&1 &"
[ -z "$server2pid" ] && eval $cmd || echo "HiveServer2 服务已启动"
}
function hive_stop() {
metapid=$(check_process HiveMetastore 9083)
[ "$metapid" ] && kill $metapid || echo "Metastore 服务未启动"
server2pid=$(check_process HiveServer2 10000)
[ "$server2pid" ] && kill $server2pid || echo "HiveServer2 服务未启动"
}
case $1 in
"start")
hive_start
;;
"stop")
hive_stop
;;
"restart")
hive_stop
sleep 2
hive_start
;;
"status")
check_process HiveMetastore 9083 >/dev/null && echo "Metastore 服务运行
正常" || echo "Metastore 服务运行异常"
check_process HiveServer2 10000 >/dev/null && echo "HiveServer2 服务运
行正常" || echo "HiveServer2 服务运行异常"
;;
*)
echo Invalid Args!
echo 'Usage: '$(basename $0)' start|stop|restart|status'
;;
esac
打印当前库和表头
hive-site.xml中添加如下配置:
<property>
<name>hive.cli.print.header</name>
<value>true</value>
</property>
<property>
<name>hive.cli.print.current.db</name>
<value>true</value>
</property>
hive配置优先级
session内的set命令 > 命令行-hiveconf > hive-site.xml > hive-default.xml