问题描述

  1. 由于Haproxy使用source调度算法,某个用户提交了大量的任务,导致其中一台HiveServer2负载很高,其他用户负载到该HiveServer2任务无法提交

  2. 使用source调度算法,是防止Hue查询得到过期结果等错误

image.png

解决方案

  1. 目前公司在生产上的实践就是安装四个HiveServer2,其中两个HiveServer2专门作为beeline用户提交任务,Haproxy负载算法为roundrobin,还有两个HiveServer2专供Hue来查询,用于验数等操作

问题解决

配置说明

  1. 将master和node2作为beeline专用的HiveServer2,Haproxy调度算法为roundrobin

  2. 将node1和node3作为Hue专用,Haproxy调度算法为source

    Haproxy配置

  3. 修改配置文件,需要注意的是下面监听的端口需要改为Haproxy所在主机没有被占用的端口,在最下面增加hive_server_hue ``` vim /etc/haproxy/haproxy.cfg

listen hive_server_hue bind 0.0.0.0:10005 mode tcp option tcplog balance source server hive_server_03 node1:10000 check server hive_server_04 node3:10000 check

  1. ![image.png](https://cdn.nlark.com/yuque/0/2020/png/2463114/1600928603149-b0c8ad4b-f217-403c-8b3b-087d64e3db92.png#align=left&display=inline&height=777&margin=%5Bobject%20Object%5D&name=image.png&originHeight=777&originWidth=1514&size=58891&status=done&style=none&width=1514)
  2. 2. 如果配置了Keepalived,还需要将配置文件同步至另一台Haproxy,并重启Haproxy
  3. ```shell
  4. systemctl restart haproxy

CM增加Role

  1. 通过CM进入Hive -> 配置 -> RoleGroup

image.png

  1. 点击Create Role Group

image.png

  1. 选择如下

image.png

配置Hive

  1. CM进入hive -> 配置,搜索load

image.png

  1. 点击编辑单个值

image.png

  1. for_hue中填入load:10005

image.png

配置Hue

  1. Cm进入Hue -> 配置,搜索hue_safety_valve.ini,填入

    [beeswax]
    hive_server_host=load
    hive_server_port=10005
    

    image.png

    测试

  2. 进入Haproxy监控页面

image.png

  1. 进入Hue WebUI查询数据,Haproxy中显示被负载到hive_server_hue组的一个HiveServer2

image.png

  1. 使用beeline连接,Haproxy显示被负载到hive_server组的一个HiveServer2中

    beeline -u "jdbc:hive2://load:10001/;principal=hive/load@FAYSON.COM"
    

    image.png

  2. 关闭一个供Hue使用的HiveServer2,在提交查询,在Haproxy中显示关闭的HiveServer2变为不可用,将连接负载到可用的HivServer2中

image.png