Hive没远程,等于hive没远程
一、材料
已经安装hive本地模式虚拟机
二、搭建准备
1.创建临时文件 在hive安装位置
cd /opt/installs/hive/ #hive安装地址
mkdir iotmp #创建临时文件
chmod 777 iotmp
2.修改hive-site.xml
将下列配置添加到<configuration>之中,追加到其它配置的后边
<!--Hive工作的本地临时存储空间-->
<property>
<name>hive.exec.local.scratchdir</name>
<value>/opt/installs/hive/iotmp/root</value>
</property>
<!--如果启用了日志功能,则存储操作日志的顶级目录-->
<property>
<name>hive.server2.logging.operation.log.location</name>
<value>/opt/installs/hive/iotmp/root/operation_logs</value>
</property>
<!--Hive运行时结构化日志文件的位置-->
<property>
<name>hive.querylog.location</name>
<value>/opt/installs/hive/iotmp/root</value>
</property>
<!--用于在远程文件系统中添加资源的临时本地目录-->
<property>
<name>hive.downloaded.resources.dir</name>
<value>/opt/installs/hive/iotmp/${hive.session.id}_resources</value>
</property>
3.修改 Hadoop 的 core-site.xml,【Hadoop】
依旧添加到添加到<configuration>之中,追加到其它配置的后边
<property>
<name>hadoop.proxyuser.root.hosts</name>
<value>*</value>
</property>
<property>
<name>hadoop.proxyuser.root.groups</name>
<value>*</value>
</property>
<property>
<name>hadoop.http.staticuser.user</name>
<value>root</value>
</property>
<!-- 不开启权限检查 -->
<property>
<name>dfs.permissions.enabled</name>
<value>false</value>
</property>
4.修改集群后的core-site.xml【Hadoop】,需要同步到集群的全部虚拟机
xsync.sh core-site.xml #一个小脚本,可以把文件发送的集群的全部虚拟机相同位置
#没有可以使用 scp 命令,我别的文档有总结
stop-dfs.sh #重启一下集群
start-dfs.sh
三、配置测试远程服务
1.修改hive-site.xml 【在hive文件夹下】
依旧添加到<configuration>之中,追加到其它配置的后边
<property>
<name>hive.server2.thrift.bind.host</name>
<value>bigdata01</value>
</property>
<property>
<name>hive.server2.thrift.port</name>
<value>10000</value>
</property>
2.测试**启动hiveserver2**
这里向讲解最基础的一种,有别的简便方法后边会替换
# 开启一个新的连接启动服务,服务启动窗口就不能使用了
hiveserver2 #启动命令
ctrl + c #终止命令,窗口恢复
有 4 个Hive Session ID 就可以连接了,需要慢慢等待,新开一个窗口测试登录
3.新窗口 beeline 登录
beeline #登录界面
!connect jdbc:hive2://mybd:10000 #mybd要替换你自己的数据库名
username:root #用户名
password: #不用输入直接回车
*****可能会出现的登录小问题*****
登录失败,我这个问题是我配置过了metastore,已经配置过的metastore,之后每次启动服务必须开启
开启一下metastore服务就能 解决 ,下面会教你怎么开,第一次一般不会出现这个问题
解决:
4.配置metastore 服务
这个不是必须,目的是为了解决内存问题,一般都会顺手配置,配了之后必须每次启动
第一步:修改hive-site.xml,追加配置
注意:想要连接metastore服务的客户端必须配置如下属性和属性值
<property>
<name>hive.metastore.uris</name>
<value>thrift://mydb:9083</value>
</property>
解析:thrift是协议名称
ip为metastore服务所在的主机ip地址
9083是默认端口号
配好,保存退出
第二步:启动
方法1:
hive --service metastore &
方法2:
nohup hive --service metastore 2>&1 >/dev/null & #信息送入黑洞
解析:2>&1 >/dev/null 意思就是把错误输出2重定向到标准输出1,也就是屏幕,标准输出进了“黑洞”,错误输出打印到屏幕
朴实无华,就两步
四、常用的远程数据库工具
常见的Hive连接工具有:IDEA、DBeaver、DataGrap、Beeline
推荐使用DataGrap
原因:好用
一跃从元谋人升级为21世纪新青年
使用方法不赘述,需要安装驱动
一般安不了,可以离线安装
补偿你一个插件包,文章开头下载(歪日today,我自己上传的下载还要钱呢,好样的CSDN)
解压放在C:\Users\Administrator\AppData\Roaming\JetBrains\DataGrip2023.1\jdbc-drivers
良心交一下,点赞(๑′ᴗ‵๑)I Lᵒᵛᵉᵧₒᵤ❤
补充:脚本 hive-server-manager.sh
给经常反复启动 metastore 以及hiveserver2这两个服务的小伙伴的福利,方便使用
cd /usr/local/bin #进目录
vi hive-server-manager.sh #创建
chmod u+x hive-server-manager.sh #授权
#!/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_pid=`ps aux | grep org.apache.hadoop.hive.metastore.HiveMetaStore | grep -v grep | awk '{print $2}'`
hiveserver2_pid=`ps 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 2>&1 &
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 2>&1 &
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
真的好用