[B 站公开课] Hive 高可用架构如何设计?

教程 青牛 ⋅ 于 2023-12-19 11:47:53 ⋅ 148 阅读

公开课回放地址:https://www.bilibili.com/video/BV1FQ4y137nx

1.hive介绍

file

Hive是一个基于Hadoop的开源数据仓库工具,用于存储和处理海量结构化数据。它是Facebook 2008年8月开源的一个数据仓库框架,提供了类似于SQL语法的HQL(hiveSQL)语句作为数据访问接口。

1.1 hive架构

file

服务端组件:

Driver组件:该组件包括Complier(编译)、Optimizer(优化)和Executor(执行),它的作用是将HiveQL(类SQL)语句进行解析、编译优化,生成执行计划,然后调用底层的MapReduce计算框架。

Metastore组件:元数据服务组件,这个组件存取Hive的元数据,Hive的元数据存储在关系数据库里,Hive支持的关系数据库有Derby和Mysql。作用是:客户端连接metastore服务,metastore再去连接MySQL数据库来存取元数据。

HiveServer2服务:HiveServer2是Facebook开发的一个软件框架,它用来进行可扩展且跨语言的服务的开发,Hive集成了该服务,能让不同的编程语言调用Hive的接口。还可以做权限管理。

客户端组件:

CLI:Command Line Interface,命令行接口。

JDBC/ODBC:Hive架构的JDBC和ODBC接口是建立在HiveServer2客户端之上。

WEBGUI:Hive客户端提供了一种通过网页的方式访问Hive所提供的服务。这个接口对应Hive的HWI组件(Hive Web Interface),使用前要启动HWI服务

2.hive本地模式部署

2.1 配置metastore服务

file

hive metastore服务端配置

 <!-- 数据库 start -->
        <property>
          <name>javax.jdo.option.ConnectionURL</name>
          <value>jdbc:mysql://mysql1-96456:3306/hive_meta</value>
          <description>mysql连接</description>
        </property>

        <property>
          <name>javax.jdo.option.ConnectionDriverName</name>
          <value>com.mysql.jdbc.Driver</value>
          <description>mysql驱动</description>
        </property>

        <property>
          <name>javax.jdo.option.ConnectionUserName</name>
          <value>hive</value>
          <description>数据库使用用户名</description>
        </property>

        <property>
          <name>javax.jdo.option.ConnectionPassword</name>
          <value>12345678</value>
          <description>数据库密码</description>
        </property>

hive在hdfs数据存放目录

<!-- HDFS start -->
<property>
          <name>hive.metastore.warehouse.dir</name>
          <value>/hive/warehouse</value>
          <description>hive使用的HDFS目录</description>
 </property>

测试CLI命令行接口方式进行连接,创建 hainiu 数据库,发现可以成功创建

file

打开远程桌面,使用Dberver连接mysql,观察元数据是否存储成功

file

使用beeline测试连接,beeline连接走的是jdbc协议,需要开启Hiveserver2服务

2.2 配置hiveserver2服务

hiveserver2配置

<!-- hiveserver start -->
<property>
          <name>hive.server2.thrift.bind.host</name>
          <value>hive1-96456</value>
          <description>hive开启的thriftServer地址</description>
        </property>

        <property>
          <name>hive.server2.thrift.port</name>
          <value>10000</value>
          <description>hive开启的thriftServer端口</description>
        </property>

        <property>
          <name>hive.server2.enable.doAs</name>
          <value>true</value>
        </property>

启动hiveserver2服务

nohup hiveserver2 >/dev/null 2>&1 &

测试beeline连接

beeline -u jdbc:hive2://hive1-96456:10000 -n hadoop

file

2.3 用op机充当hive端进行连接

修改op机hive配置文件

<!-- 数据库 start -->
        <property>
          <name>javax.jdo.option.ConnectionURL</name>
          <value>jdbc:mysql://mysql1-96456:3306/hive_meta</value>
          <description>mysql连接</description>
        </property>

        <property>
          <name>javax.jdo.option.ConnectionDriverName</name>
          <value>com.mysql.jdbc.Driver</value>
          <description>mysql驱动</description>
        </property>

        <property>
          <name>javax.jdo.option.ConnectionUserName</name>
          <value>hive</value>
          <description>数据库使用用户名</description>
        </property>

        <property>
          <name>javax.jdo.option.ConnectionPassword</name>
          <value>12345678</value>
          <description>数据库密码</description>
        </property>
<!-- HDFS start -->
<!-- HDFS start -->
<property>
          <name>hive.metastore.warehouse.dir</name>
          <value>/hive/warehouse</value>
          <description>hive使用的HDFS目录</description>
 </property>

file

beeline连接测试

file

3.hive远程模式部署

file

怎么判断是否是本地模式还是远程模式,看配置文件中是否配置metastore客户端参数,如果配了,则是远程模式,如果没有配则是本地模式。

hive metastore客户端配置

<property>
          <name>hive.metastore.uris</name>
          <value>thrift://hive1-96456:9083</value>
 </property>

测试,将op机看成客户端,hive机器看成服务端,修改op机hive的配置文件,删除metastore服务端配置,只保留客户端配置

file

测试连接:

hive连接

file

metastore服务单独启动:

nohup hive --service metastore > /dev/null 2>&1 &

file

测试:正常连接

file

4.hive高可用模式部署

file

4.1 测试将hiveserver2 服务停掉

file

连接被拒绝

file

4.2 将metastore服务停掉

file

发现报错

file

4.3 添加新机器,启动备用的hiveserver2服务和metastore服务

file

将hive,hadoop,jdk安装包,远程传输到新的机器

scp -r * linux-95950:/opt/

file

修改环境变量

export JAVA_HOME=/opt/jdk1.8.0_144
export HADOOP_HOME=/opt/hadoop-2.7.3
export HADOOP_COMMON_HOME=${HADOOP_HOME}
export HADOOP_HDFS_HOME=${HADOOP_HOME}
export HADOOP_MAPRED_HOME=${HADOOP_HOME}
export HADOOP_YARN_HOME=${HADOOP_HOME}
export HADOOP_CONF_DIR=${HADOOP_HOME}/etc/hadoop

export HDFS_CONF_DIR=${HADOOP_HOME}/etc/hadoop
export YARN_CONF_DIR=${HADOOP_HOME}/etc/hadoop
export LD_LIBRARY_PATH=$HADOOP_HOME/lib/native:/usr/lib64
export HIVE_HOME=/opt/apache-hive-2.1.1-bin
export HIVE_CONF_DIR=$HIVE_HOME/conf
PATH=$PATH:$HOME/bin:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$HIVE_HOME/bin:
export PATH

修改配置文件,将hiveserver2的服务和metastore客户端的配置ip进行修改

file

file

hiveserver2服务如果想要启动高可用,可以将hiveserver2服务记录到zookeeper中,使用zookeeper实现了Hive Server2的HA功能,Client端可以通过指定一个nameSpace来连接HiveServer2,而不是传统的指定某一个host和port

<property>
        <name>hive.server2.support.dynamic.service.discovery</name>
         <value>true</value>
  </property>
<property>
    <name>hive.server2.zookeeper.namespace</name>
    <value>hiveserver2_zk</value>
</property>
<property>
    <name>hive.zookeeper.quorum</name>
    <value>nn1-40247:2181,nn2-40247:2181,s1-40247:2181</value>
</property>
<property>
    <name>hive.zookeeper.client.port</name>
    <value>2181</value>
</property>

启动metastore服务和hiveserver2服务

nohup hive --service metastore > /dev/null 2>&1 &
nohup hiveserver2 >/dev/null 2>&1 &

配置op连接多个metestore设置

<property>
          <name>hive.metastore.uris</name>
          <value>thrift://hive1-96456:9083,thrift://linux-95950:9083</value>
 </property>

file

hive连接客户端查看元数据正常:

file

停掉metastore服务:

file

查看元数据依然可以查看:

file

通过指定一个nameSpace来连接hiveserver2

beeline -u "jdbc:hive2://nn1-40247:2181,nn2-40247:2181,s1-40247:2181/;serviceDiscoveryMode=zookeeper;zooKeeperNamespace=hiveserver2_zk"

建表成功

file

停掉一个hiverserver2服务

file

重启客户端:

file

版权声明:原创作品,允许转载,转载时务必以超链接的形式表明出处和作者信息。否则将追究法律责任。来自海汼部落-青牛,http://hainiubl.com/topics/76425
点赞
成为第一个点赞的人吧 :bowtie:
回复数量: 0
    暂无评论~~
    • 请注意单词拼写,以及中英文排版,参考此页
    • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`, 更多语法请见这里 Markdown 语法
    • 支持表情,可用Emoji的自动补全, 在输入的时候只需要 ":" 就可以自动提示了 :metal: :point_right: 表情列表 :star: :sparkles:
    • 上传图片, 支持拖拽和剪切板黏贴上传, 格式限制 - jpg, png, gif,教程
    • 发布框支持本地存储功能,会在内容变更时保存,「提交」按钮点击时清空
    Ctrl+Enter