[hive]搭建hive3.1.2hiveserver2高可用可hive metastore高可用

news2024/11/25 5:55:47

参考:

Apache hive 3.1.2从单机到高可用部署 HiveServer2高可用 Metastore高可用 hive on spark hiveserver2 web UI 高可用集群启动脚本_薛定谔的猫不吃猫粮的博客-CSDN博客

没用里头的hive on spark,测试后发现版本冲突 

一、Hive 集群规划(蓝色部分)

ck1ck2ck3
SecondaryNameNodeNameNode
DataNodeDataNodeDataNode
ResourceManager
yarn historyserver
NodeManagerNodeManagerNodeManager
MySQL
hiveServer2hiveServer2
hiveMetastorehiveMetastore
Spark
Spark JobHistoryServer

二、配置文件

记得向hive的lib导入mysql6以上的安装包,否则:

[hive]报错:Caused by: java.lang.ClassNotFoundException: com.mysql.cj.jdbc.Driver_胖胖学编程的博客-CSDN博客

1、ck3和ck2相同的

1)hive-env.sh 末尾添加3行:

# Set HADOOP_HOME to point to a specific hadoop install directory
HADOOP_HOME=/home/data_warehouse/module/hadoop-3.1.3

# Hive Configuration Directory can be controlled by:
export HIVE_CONF_DIR=/home/data_warehouse/module/hive-3.1.2/conf

# Folder containing extra libraries required for hive compilation/execution can be controlled by:
export HIVE_AUX_JARS_PATH=/home/data_warehouse/module/hive-3.1.2/lib

2)环境变量

#HIVE_HOME
export HIVE_HOME=/home/data_warehouse/module/hive-3.1.2
export PATH=$PATH:$HIVE_HOME/bin

2、ck3和ck2不同的

ck3

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://ck3:3306/metastore?useSSL=false</value>
  </property>
<!-- jdbc 连接的 Driver-->
  <property>
    <name>javax.jdo.option.ConnectionDriverName</name>
    <value>com.mysql.cj.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>
  <!-- 指定存储元数据要连接的地址
  <property>
    <name>hive.metastore.uris</name>
    <value>thrift://ck3:9083</value>
  </property> -->
<!-- Hive 默认在 HDFS 的工作目录 -->
  <property>
    <name>hive.metastore.warehouse.dir</name>
    <value>/user/hive/warehouse</value>
  </property>
  <property>
    <name>hive.cli.print.current.db</name>
    <value>true</value>
  </property>
  <property>
    <name>hive.cli.print.header</name>
    <value>true</value>
  </property>

  <property>
    <name>hive.server2.session.check.interval</name>
    <value>60000</value>
  </property>
  <property>
    <name>hive.aux.jars.path</name>
    <value>/home/data_warehouse/module/hive-3.1.2/lib</value>
  </property>

  <property>
    <name>hive.execution.engine</name>
    <value>mr</value>
  </property>

  <!--hive metastore高可用-->
  <property>
    <name>hive.metastore.uris</name>
    <value>thrift://ck2:9083,thrift://ck3:9083</value>
  </property>

  <!--hiveserver2高可用-->
  <property>
    <name>hive.server2.support.dynamic.service.discovery</name>
    <value>true</value>
  </property>
  <!-- <property>
    <name>hive.server2.active.passive.ha.enable</name>
    <value>true</value>
  </property> -->
  <property>
    <name>hive.server2.zookeeper.namespace</name>
    <value>hiveserver2_zk</value>
  </property>
  <property>
    <name>hive.zookeeper.quorum</name>
    <value>ck1:2181,ck2:2181,ck3:2181</value>
  </property>
  <property>
    <name>hive.zookeeper.client.port</name>
    <value>2181</value>
  </property>
  <!--填写节点, 如ck2,ck3 注意要填写本机的hostname-->
  <property>
    <name>hive.server2.thrift.bind.host</name>
    <value>ck3</value>
  </property>
  <property>
    <name>hive.server2.thrift.port</name>
    <value>10000</value>
  </property>
  <!--hiveserver2 webui-->
  <property>
      <name>hive.server2.webui.host</name>
      <value>ck3</value>
  </property>
  <property>
      <name>hive.server2.webui.port</name>
      <value>10002</value>
  </property>
  <!-- <property>
    <name>hive.server2.idle.session.timeout</name>
    <value>3600000</value>
  </property>  -->

</configuration>

ck2

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://ck3:3306/metastore?useSSL=false</value>
  </property>
<!-- jdbc 连接的 Driver-->
  <property>
    <name>javax.jdo.option.ConnectionDriverName</name>
    <value>com.mysql.cj.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>
  <!-- 指定存储元数据要连接的地址
  <property>
    <name>hive.metastore.uris</name>
    <value>thrift://ck3:9083</value>
  </property> -->
<!-- Hive 默认在 HDFS 的工作目录 -->
  <property>
    <name>hive.metastore.warehouse.dir</name>
    <value>/user/hive/warehouse</value>
  </property>
  <property>
    <name>hive.cli.print.current.db</name>
    <value>true</value>
  </property>
  <property>
    <name>hive.cli.print.header</name>
    <value>true</value>
  </property>

  <property>
    <name>hive.server2.session.check.interval</name>
    <value>60000</value>
  </property>
  <property>
    <name>hive.aux.jars.path</name>
    <value>/home/data_warehouse/module/hive-3.1.2/lib</value>
  </property>

  <property>
    <name>hive.execution.engine</name>
    <value>mr</value>
  </property>

  <!--hive metastore高可用-->
  <property>
    <name>hive.metastore.uris</name>
    <value>thrift://ck2:9083,thrift://ck3:9083</value>
  </property>

  <!--hiveserver2高可用-->
  <property>
    <name>hive.server2.support.dynamic.service.discovery</name>
    <value>true</value>
  </property>
  <!-- <property>
    <name>hive.server2.active.passive.ha.enable</name>
    <value>true</value>
  </property> -->
  <property>
    <name>hive.server2.zookeeper.namespace</name>
    <value>hiveserver2_zk</value>
  </property>
  <property>
    <name>hive.zookeeper.quorum</name>
    <value>ck1:2181,ck2:2181,ck3:2181</value>
  </property>
  <property>
    <name>hive.zookeeper.client.port</name>
    <value>2181</value>
  </property>
  <!--填写节点, 如ck2,ck3 注意要填写本机的hostname-->
  <property>
    <name>hive.server2.thrift.bind.host</name>
    <value>ck2</value>
  </property>
  <property>
    <name>hive.server2.thrift.port</name>
    <value>10000</value>
  </property>
  <!--hiveserver2 webui-->
  <property>
      <name>hive.server2.webui.host</name>
      <value>ck2</value>
  </property>
  <property>
      <name>hive.server2.webui.port</name>
      <value>10002</value>
  </property>
  <!-- <property>
    <name>hive.server2.idle.session.timeout</name>
    <value>3600000</value>
  </property>  -->

</configuration>

三、运行hiveserver2和hive metastore服务的脚本(ck2,ck3相同,下面缺一不可)

将这两个脚本放在/home/data_warehouse/module/hive-3.1.2/bin下,并chmod 777

1、hiveservices.sh

#!/bin/bash
HIVE_LOG_DIR=$HIVE_HOME/logs
mkdir -p $HIVE_LOG_DIR
#检查进程是否运行正常,参数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 &"
    cmd=$cmd" sleep 4; hdfs dfsadmin -safemode wait >/dev/null 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

2、hive2server.sh

#!/bin/bash
if [ $# -lt 1 ]
then
    echo "No Args Input..."
    exit ;
fi
case $1 in
"start")
        echo " =================== ck3 启动 HiveServer2和Metastore服务  ==================="
        ssh ck3 "/home/data_warehouse/module/hive-3.1.2/bin/hiveservices.sh start"
        echo " =================== ck2 启动 HiveServer2和Metastore服务  ==================="
        ssh ck2 "/home/data_warehouse/module/hive-3.1.2/bin/hiveservices.sh start"
;;
"stop")
        echo " =================== ck3 停止 HiveServer2和Metastore服务  ==================="
        ssh ck3 "/home/data_warehouse/module/hive-3.1.2/bin/hiveservices.sh stop"
        echo " =================== ck2 停止 HiveServer2和Metastore服务  ==================="
        ssh ck2 "/home/data_warehouse/module/hive-3.1.2/bin/hiveservices.sh stop"
;;
"status")
        echo " =================== ck3 查看 HiveServer2和Metastore服务  ==================="
        ssh ck3 "/home/data_warehouse/module/hive-3.1.2/bin/hiveservices.sh status"
        echo " =================== ck2 查看 HiveServer2和Metastore服务  ==================="
        ssh ck2 "/home/data_warehouse/module/hive-3.1.2/bin/hiveservices.sh status"
;;

*)
    echo "Input Args Error...start|stop|status"
;;
esac

四、启动hiveserver2和metastire服务

1、启动 :在ck3或ck2上:hive2server.sh start

2、查看状态 :在ck3或ck2上:hive2server.sh status

3、关闭 :在ck3或ck2上:hive2server.sh stop

五、使用

依次输入下面两个命令

beeline
!connect jdbc:hive2://ck1,ck2,ck3/;password=123456;serviceDiscoveryMode=zooKeeper;zooKeeperNamespace=hiveserver2_zk  root

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1024198.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Meow

环境准备 操作系统:Kali Linux 或者 Windows工具:nmap,telnet nmap工具 [Kali 官网] 手册地址:https://www.kali.org/tools/nmap/ 摘要: Nmap is a utility for network exploration or security auditing. It supports ping scanning (determine which hosts are up), many…

Linux之动静态库

动静态库 动静态库的基本原理动静态库的认识动静态库特征静态库的打包与使用动态库的打包与使用 动静态库的基本原理 我们知道&#xff0c;生成一个可执行程序会经历以下四个步骤&#xff1a; 预处理&#xff1a;头文件展开&#xff0c;宏替换&#xff0c;去注释&#xff0c;…

iOS16新特性:实时活动-在锁屏界面实时更新APP消息 | 京东云技术团队

简介 之前在 《iOS16新特性:灵动岛适配开发与到家业务场景结合的探索实践》 里介绍了iOS16新的特性&#xff1a;实时更新&#xff08;Live Activity&#xff09;中灵动岛的适配流程&#xff0c;但其实除了灵动岛的展示样式&#xff0c;Live Activity还有一种非常实用的应用场景…

【Verilog教程】2.3 Verilog 数据类型

Verilog 最常用的 2 种数据类型就是线网&#xff08;wire&#xff09;与寄存器&#xff08;reg&#xff09;&#xff0c;其余类型可以理解为这两种数据类型的扩展或辅助。 线网&#xff08;wire&#xff09; wire 类型表示硬件单元之间的物理连线&#xff0c;由其连接的器件输…

脑网络图谱

前言 研究人脑面临的一个挑战是其多尺度组织和系统复杂性。我们对大脑组织的认识主要来源于离体组织学检查&#xff0c;如细胞结构映射。通过研究全脑微观结构特征的变化&#xff0c;可以划分为不同的脑区。然而&#xff0c;这种研究大脑组织的“局部”方法非常耗时、耗资源&a…

Python 图形化界面基础篇:创建工具栏

Python 图形化界面基础篇&#xff1a;创建工具栏 引言 Tkinter 库简介步骤1&#xff1a;导入 Tkinter 模块步骤2&#xff1a;创建 Tkinter 窗口步骤3&#xff1a;创建工具栏步骤4&#xff1a;向工具栏添加工具按钮步骤5&#xff1a;处理工具按钮的点击事件步骤6&#xff1a;启动…

window10下安装docker教程

要在Windows 10上安装Docker&#xff0c;您可以按照以下步骤进行操作&#xff1a; 在您的Web浏览器中&#xff0c;访问Docker官方网站&#xff1a;https://www.docker.com/get-started。然后&#xff0c;点击"Download Docker Desktop"按钮。 在下载页面上&#xff…

ruoyi-vue-pro 项目安装使用过程中的问题解决

ruoyi-vue-pro是功能比较多的一款前后端平台,因为刚接触ruoyi平台不久&#xff0c;为了更好了解ruoyi平台的相关功能&#xff0c;就本地部署了&#xff0c;作者主动屏蔽了部分功能&#xff0c;部分功能会提示功能能未启用&#xff0c;同时启用dev环境的时候是演示版本&#xff…

使用香橙派学习Linux udev的rules 并实现U盘的自动挂载

在之前编程首先语音刷抖音的博文里提到过udev&#xff0c;现在回顾一下&#xff1a; 什么是udev&#xff1f; udev是一个设备管理工具&#xff0c;udev以守护进程的形式运行&#xff0c;通过侦听内核发出来的uevent来管理/dev目录下的设备文件。udev在用户空间运行&#xff0c;…

SQL Server关于AlwaysOn的理解-读写分离的误区(一)

前言 很多人认为AlwaysOn在同步提交模式下数据是实时同步的&#xff0c;也就是说在主副本写入数据后可以在辅助副本立即查询到。因此期望实现一个彻底的读写分离策略&#xff0c;即所有的写语句在主副本上&#xff0c;所有的只读语句分离到辅助副本上。这是一个认知误区&#x…

jmeter基础压力教程

Jmeter基础压力测试教程 一、安装Jmeter&#xff1b; 安装需求&#xff1a;1. JDK 8.0.91安装包&#xff08;最新即可&#xff0c;配置环境变量&#xff09; 2. Badboy2.25脚本录制工具&#xff08;注&#xff1a;Jmeter3.0与badboy2.0不兼容&#xff09; Jmerter安装包…

玩玩“小藤”开发者套件 Atlas 200I DK A2 之环境准备

玩玩“小藤”开发者套件 Atlas 200I DK A2 之环境准备 0. 背景1. 烧录镜像2. 安装依赖3. 安装 Ascend-cann-toolkit 软件包4. 安装PyTorch5. 安装 PyTorch 插件 torch_npu6. 安装APEX混合精度模块 0. 背景 总所周知&#xff0c;英伟达的GPU供不应求&#xff0c;还各种限制。华…

Ae 效果:CC Bubbles

模拟/CC Bubbles Simulation/CC Bubbles CC Bubbles&#xff08;CC 气泡&#xff09;主要用于生成气泡以及模拟其运动的效果。 既可将效果应用到一个纯色图层&#xff0c;也可将其应用到一个图层的副本上或者调整图层上。CC Bubbles 效果生成的气泡在运动过程会与图层内容即时发…

现货白银的价格如何变动

只要是在正常的交易日&#xff0c;现货白银价格的走势&#xff0c;几乎全天24小时都处于波动之中&#xff0c;其行情走势会因为各种政治、经济因素的影响而发生改变&#xff0c;有时价格波动在一天内可以高达两三美元&#xff0c;有时却可以连续几周都处于窄幅波动&#xff0c;…

详解Nacos和Eureka的区别

文章目录 Eureka是什么Nacos是什么Nacos的实现原理 Nacos和Eureka的区别CAP理论连接方式服务异常剔除操作实例方式自我保护机制 Eureka是什么 Eureka 是Spring Cloud 微服务框架默认的也是推荐的服务注册中心, 由Netflix公司与2012将其开源出来,Eureka基于REST服务开发,主要用…

爬虫项目(四):抓取网页所有图片

文章目录 一、书籍推荐二、完整代码三、运行结果 一、书籍推荐 推荐本人书籍《Python网络爬虫入门到实战》 &#xff0c;详细介绍见&#x1f449;&#xff1a; 《Python网络爬虫入门到实战》 书籍介绍 二、完整代码 原理&#xff1a;抓取该链接中所有的图片格式。基于seleni…

分布式数据库(笔记)

课程链接&#xff1a;015_数据库系统的用户接口以及SQL语言&#xff08;一&#xff09;_哔哩哔哩_bilibili 1、分类 DDB&#xff1a;物理上分散&#xff0c;逻辑上集中 特点&#xff1a; 有统一的全局模式靠分布式数据库管理系统实现 DDBMS分布在网络的不同节点上 优点&am…

Responder

环境准备 操作系统:Kali Linux工具:responder,john,evil-winrm PS:输入以下命令解决靶场环境无法打开问题 #echo "<靶机IP> unika.htb">>/etc/hostsresponder工具 [Kali 官网] 手册地址:https://www.kali.org/tools/responder/ 摘要: This package c…

ubuntu 里根文件系统的扩容,/dev/ubuntu-vg/ubuntu-lv 文件系统扩充到整个分区

笔者安装了ubuntu服务器版软件&#xff0c;由于系统安装的时候没有划分好磁盘分区&#xff0c;只采用了1000G固态硬盘的 200G来安装系统&#xff0c;安装完毕后&#xff0c;用df -h 命令查看如下&#xff1a; 根文件系统仅占用了 196G&#xff0c;而本身硬盘的尺寸为1000G&…

C++笔记之std::forward

C笔记之std::forward 文章目录 C笔记之std::forward例一例二 std::forward的作用是在C中帮助实现完美转发&#xff08;perfect forwarding&#xff09;&#xff0c;它将传递给它的参数以原始类型和引用的方式传递给下一个函数&#xff0c;保持参数的值类别&#xff08;lvalue或…