在一台服务器上搭建相对高可用HiveServer实践
2018-09-06 10:29
525 查看
本文来自网易云社区
作者:刘杰
问题及原因
组里之前搭建了一个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
https://www.geek-share.com/detail/2638351281.html
网易云大礼包:https://www.163yun.com/gift
本文来自网易云社区,经作者刘杰授权发布
相关文章:
【推荐】 Hi,这有一份风控体系建设干货
【推荐】 【专家坐堂】四种并发编程模型简介
相关文章推荐
- 在一台服务器上搭建相对高可用HiveServer实践
- HDP Hiveserver2搭建高可用
- 【本地服务器】json-server搭建本地https服务器(windows)
- SQL Server Report Services 的RS数据库移植到另外一台服务器,报“rsReportServerNotActivated”错误
- windows 中的“RPC Server is Unavailable”(RPC 服务器不可用)问题
- centos6.4下DNS+squid+nginx+mysql搭建高可用web服务器 推荐
- 用WSUS(Windows Server Update Services 3.0)搭建企业内部update服务器
- ffmpeg+ffserver搭建流媒体服务器
- 如何搭建一台深度学习服务器
- CentOS 6.3 64位 搭建SVNServer服务器
- VisualSVN Server搭建SVN服务器
- centos下ftp服务器搭建实践
- 使用VisualSVN Server搭建SVN服务器
- 如何搭建一台 通过SVN 提交代码自动发布的 nodeJs 服务器.
- Windows下使用VisualSVN Server搭建SVN服务器
- 在linux服务器上搭建相对安全的FTP服务器
- [置顶] 【FastDFS】搭建一台结构简单的FastDFS图片服务器
- 【就是快】10分钟搭建一台web服务器!