在一台服务器上搭建相对高可用HiveServer实践
本文来自网易云社区
作者:刘杰
问题及原因
组里之前搭建了一个hiveserver提供给猛犸上的ETL程序调用,hiveserver隔三差五地挂掉重启,网上查了些资料,也咨询了猛犸那边维护hiveserver周全同学,这是一个比较普遍的问题,原因基本上都是进程内存用爆引发的hiveserver奔溃,内存爆掉的原因大概有两个:
hiveserver2会加载大量的元数据,元数据多了,内存就oom了
连接hiverserver2的sql性能慢,查询时间超长,占用大量内存
解决方法
目前内存爆掉没有太好的解决方法,一般的解决方法监控和重启,使用探针程序定时监测hiveserver是否工作,如果不工作就重启。另外启动多个hiveserver,使用HA工具进行切换,本文中采用HAProxy,HAProxy是一个开源的HA工具,可以工作在TCP层和HTTP层。
实践方案
软硬件配置
16G内存服务器一台
Hive客户端
HAProxy
##使用不同的端口启动三个hiveserverhiveserver2 --hiveconf hive.server2.thrift.port=10000 &
hiveserver2 --hiveconf hive.server2.thrift.port=10001 &
hiveserver2 --hiveconf hive.server2.thrift.port=10004 &
##crontab定时执行的检查程序##探针程序,每分钟执行一次,检查hiveserver是否运行正常,任意执行一个sql即可,如果不工作了就重启java -jar HiveserverState-jar-with-dependencies.jar -Dport=10000if [ $? -ne 0 ]then##内存监控重定向到文件,查看hiveserver挂的那个时刻内存的快照ps -ef|grep "org.apache.hive.service.server.HiveServer2 --hiveconf
hive.server2.thrift.port=10000" | grep -v grep | awk '{print $2}' | xargs jstat -gcutil >> mem_stat.log
ps -ef|grep "org.apache.hive.service.server.HiveServer2 --hiveconf hive.server2.thrift.port=10000" | grep -v grep | awk '{print $2}' | xargs kill -9nohup hiveserver2 --hiveconf hive.server2.thrift.port=10000 &echo 'restart Hiveserver 10000 端口成功'fijava -jar HiveserverState-jar-with-dependencies.jar -Dport=10001if [ $? -ne 0 ]thenps -ef|grep "org.apache.hive.service.server.HiveServer2 --hiveconf hive.server2.thrift.port=10001" | grep -v grep | awk '{print $2}' | xargs jstat -gcutil >> mem_stat.log
ps -ef|grep "org.apache.hive.service.server.HiveServer2 --hiveconf hive.server2.thrift.port=10001" | grep -v grep | awk '{print $2}' | xargs kill -9nohup hiveserver2 --hiveconf hive.server2.thrift.port=10001 &echo 'restart Hiveserver 10001 端口成功'fijava -jar HiveserverState-jar-with-dependencies.jar -Dport=10004if [ $? -ne 0 ]thenps -ef|grep "org.apache.hive.service.server.HiveServer2 --hiveconf hive.server2.thrift.port=10004" | grep -v grep | awk '{print $2}' | xargs jstat -gcutil >> mem_stat.log
ps -ef|grep "org.apache.hive.service.server.HiveServer2 --hiveconf hive.server2.thrift.port=10004" | grep -v grep | awk '{print $2}' | xargs kill -9nohup hiveserver2 --hiveconf hive.server2.thrift.port=10004 &echo 'restart Hiveserver 10004 端口成功'fi
HA配置如下
listen hive #hive后端定义
bind 0.0.0.0:10003 #ha作为proxy所绑定的IP和端口
mode tcp #以4层方式代理,重要
balance leastconn #调度算法 'leastconn' 最少连接数分配,或者 'roundrobin',轮询分配
maxconn 10240 #最大连接数
server hive_1 server_ip:10000 check inter 180000 rise 1 fall 2
server hive_2 server_ip:10001 check inter 180000 rise 1 fall 2
server hive_3 server_ip:10004 check inter 180000 rise 1 fall 2
问题及改进
以上方法搭建的hiveserver只是相对高可用,应对组内的ETL任务已经足够了。因为只有一台机器,所以存在单点故障,在实际生产环境中,可以使用两台机器作为HAProxy,另外三台作为hiveserver。
作者
刘杰
谢非
参考文章
http://lanlian.blog.51cto.com/6790106/1305228
http://www.cnblogs.com/smartloli/p/4368676.html
网易云大礼包:https://www.163yun.com/gift
本文来自网易云社区,经作者刘杰授权发布
相关文章:
【推荐】 Hi,这有一份风控体系建设干货
【推荐】 【专家坐堂】四种并发编程模型简介
在一台服务器上搭建相对高可用HiveServer实践的更多相关文章
- 在一台服务器上搭建多个网站的方法(Apache版)
Apache的配置文件一般放置在/etc/httpd/conf文件夹下,httpd.conf是它的主配置文件,在进行配置时可以将虚拟主机的配置文件单独配置,如取名为vhost.conf,然后再http ...
- 基于CentOS 8服务器来搭建FastDFS高可用集群环境
服务器版本 我们在服务器的命令行输入如下命令来查看服务器的内核版本. [root@localhost lib]# cat /etc/redhat-release CentOS Linux releas ...
- 在一台服务器上搭建多个项目的SVN
需求:一台机子,多个项目,项目之间用户独立不可以相互访问文件 思路:在机子上设置多个代码仓库,用不同的端口号加一区分 实现: 首先安装SVN,我这里使用的是TortoiseSVN 首先创建多个SVN代 ...
- 【MySQL】一台服务器上搭建两个mysql节点
环境: CentOS 6.8 memory:1G Mysql 5.7 二进制安装包 1.安装相关的环境包 yum -y install gcc glibc libaio libstdc++ libs ...
- Microsoft Dynamics CRM 2011 面向Internet部署 (IFD) ADFS虚拟机环境搭建的步骤(CRM与ADFS装在同一台服务器上) 摘自网络
1: 安装windows server 2008 R2 中文版 (过程略) 安装完成后设置机器名和IP地址, 本过程机器名 crm5dev,192.168.0.110 dns: 192.168.0.1 ...
- 阿里云ECS服务器上搭建keepalived+mha+mysql5.6+gtid+一主两从+脚本判断架构踩的坑
最近,公司项目搭建了一套后端数据库架构,不是在RDS,是在阿里云的ECS服务器上搭建keepalived.mha.mysql5.6.gtid.一主两从架构,目前还没有实现读写分离,以后架构升级,可能代 ...
- 用Docker在一台笔记本电脑上搭建一个具有10个节点7种角色的Hadoop集群(上)-快速上手Docker
如果想在一台电脑上搭建一个多节点的Hadoop集群,传统的方式是使用多个虚拟机.但这种方式占用的资源比较多,一台笔记本能同时运行的虚拟机的数量是很有限的.这个时候我们可以使用Docker.Docker ...
- 从零开始搭建高性能高可用Tomcat服务器
目标: Tomcat+Nginx+Memcached Ubuntu 16.04 64位测试通过 动静分类.负载均衡.集群.Javolution序列化.高性能.高可用 配置环境(目前均为最新稳定版): ...
- 服务器上的 Git - 在服务器上搭建 Git
http://git-scm.com/book/zh/v2/%E6%9C%8D%E5%8A%A1%E5%99%A8%E4%B8%8A%E7%9A%84-Git-%E5%9C%A8%E6%9C%8D%E ...
随机推荐
- ATL项目编译注册dll的时候报权限错误:error MSB8011: Failed to register output. Please try enabling Per-user Redirection or register the component from a command prompt with elevated permissions.
atl工程在vs2013编译的时候会在编译成功之后去使用 regsvr32 去注册 生成的 .dll 偶尔在编译的时候会遇到下面的错误: error MSB8011: Failed to regist ...
- (转存 作者未知)深入理解HTML协议
深入理解HTML协议 http协议学 习系列 1. 基础概念篇 1.1 介绍 HTTP是Hyper Text Transfer Protocol(超文本传输协议)的缩写.它的发展是万维网协会(Worl ...
- iOS 上的蓝牙框架 - Core Bluetooth for iOS
原文: Core Bluetooth for iOS 6 Core Bluetooth 是在iOS5首次引入的,它允许iOS设备可以使用健康,运动,安全,自动化,娱乐,附近等外设数据.在iOS 6 中 ...
- shell编程——sed用法之参数详解
sed格式: sed 参数 '正则表达式' 文件名 sed的常见参数有以下几种: 1.-n, --quiet, --silent 取消自动打印模式 不加n默认打印整个文件: [root@localho ...
- 高性能Web服务器Nginx的配置与部署研究(13)应用模块之Memcached模块+Proxy_Cache双层缓存模式
通过<高性能Web服务器Nginx的配置与部署研究——(11)应用模块之Memcached模块的两大应用场景>一文,我们知道Nginx从Memcached读取数据的方式,如果命中,那么效率 ...
- Hibernate事务代码规范写法
----------------siwuxie095 事务相关概念 1.什么是事务 逻辑上的一组操作,构成这组操作的各个单元,要么一起成功, 要么一起失败 2.事务的四个特性 1)原子性 2)一致性 ...
- Python之多进程和多线程
目标: 1.os.fork简单示例 2.使用os.fork多进程测试IP是否在线 3.使用os.fork多进程解决tcpserver多客户端连接问题 4.多线程测试IP地址是否在线 1.os.fork ...
- 621. Task Scheduler CPU任务间隔分配器
[抄题]: Given a char array representing tasks CPU need to do. It contains capital letters A to Z where ...
- spring4-2-bean配置-1-依赖注入
配置 bean,本章节中主要介绍蓝色文字部分. 配置形式:基于 XML 文件的方式:基于注解的方式 Bean 的配置方式:通过全类名(反射).通过工厂方法(静态工厂方法 & 实例工厂方法).F ...
- 4款最受欢迎的Mac原型工具
原型工具中Wireframe, Mockup和prototype之间的有什么不同? 无论你是一名刚入行的UX/UI设计师,还是入行多年的老手,在制作原型的过程中一定接触或听说过其中很重要的三个原型术语 ...