热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

HAProxy+Hive构建高可用数据挖掘集群

nsitionalENhttp:www.w3.orgTRxhtml1DTDxhtml1-transitional.dtd
Hive是facebook开源的一个非常伟大的工具,可以将Hadoop中的数据用sql方式进行查询,比自己写map/reduce程序要方便很多。但是在实际使用中发现hive其实不够稳定,极少数情况会出现端口不响应或者进程丢失的问题,所以考虑将hive做成负载均衡的方式。或者更严格的说,叫做失效备份,避免出现某台个别的服务器连接数过大造成的端口不响应或者服务器故障造成无法查询。

前提是有2-3台服务器作为hive server,一台放置HAProxy。

一、安装配置HAProxy

#wget http://haproxy.1wt.eu/download/1.4/src/haproxy-1.4.20.tar.gz
#tar zxf haproxy-1.4.20.tar.gz
#mv haproxy-1.4.20 /opt/modules/haproxy
#cd /opt/modules/haproxy
#make TARGET=linux26

这样就编译完成了。

然后来配置HAProxy为四层代理,仅作为端口转发器使用。

global
                daemon
                nbproc 1
                pidfile /var/run/haproxy.pid
                ulimit-n 65535

####################
defaults
                mode tcp                         #mode { tcp|http|health },tcp 表示4层,http表示7层(对我们没用),health仅作为健康检查使用
                retries 2                          #尝试2次失败则从集群摘除
                option redispatch              #如果失效则强制转换其他服务器
                option abortonclose           #连接数过大自动关闭
                maxconn 1024                  #最大连接数
                timeout connect 1d           #连接超时时间,重要,hive查询数据能返回结果的保证
                timeout client 1d               #同上
                timeout server 1d              #同上
                timeout check 2000           #健康检查时间
                log 127.0.0.1 local0 err #[err warning info debug]

################
listen    admin_stats                           #定义管理界面
                bind 0.0.0.0:1090               #管理界面访问IP和端口
                mode http                         #管理界面所使用的协议
                maxconn 10        #最大连接数
                stats refresh 30s                #30秒自动刷新
                stats uri /                         #访问url
                stats realm Hive\ Haproxy    #验证窗口提示
                stats auth admin:123456     #401验证用户名密码

########hive1#################
listen hive #hive后端定义
                bind 0.0.0.0:10000               #ha作为proxy所绑定的IP和端口
                mode tcp                            #以4层方式代理,重要
                balance leastconn                #调度算法 'leastconn' 最少连接数分配,或者 'roundrobin',轮询分配
                maxconn 1024                      #最大连接数
                server hive_215 192.168.1.49:10000 check inter 1000 rise 1 fall 2
#释义:server 主机代名(你自己能看懂就行),IP:端口 每1000毫秒检查一次。
                server hive_216 192.168.1.50:10000 check inter 1000 rise 1 fall 2
#同上,另外一台服务器。

用haproxy -f haproxy.conf启动。

比较重要的其实是timeout的前三个选项的时间定义,因为hive运算请求时间会比较长,通常都会超过一个tcp包正常的session响应时间。所以,hive需要一个长连接来等待数据返回,在TCP里面应该是TIME_WAIT我记得。如果设置太短了,SQL可以提交成功,但是你将不会获得任何返回值。因为被提交的session已经关闭了。所以普通的tcp代理转发并不适合hive的应用。这点在做定时任务的时候尤其重要,你可能会提交一个任务,但是不会获得任何返回,又查不出任何结果,就很头疼。作为hive的任务开发者,不了解tcp协议的工作情况,作为运维又不了解hive,所以如果这里出了错误,会很难发现。我写的1d是1天的意思,正常的话,当hive执行完毕,会自己发送关闭TCP的指令。这点倒是不用太担心累计连接数超过限定。

1d标志1天,类似的还有1h表示1小时,1s表示1秒,1ms表示1ms。

另外配合我之前写过的python daemon程序,稍加修改,用来监控hive的server进程,就基本可保证hive server集群的高可用了。

目前这个高可用方案在公司内部的phpHiveAdmin中已经可以使用了,查询和结果获取正常无误,thrift连接IP和端口只要指向到Haproxy的IP和端口就可以了。

推荐阅读
  • 31.项目部署
    目录1一些概念1.1项目部署1.2WSGI1.3uWSGI1.4Nginx2安装环境与迁移项目2.1项目内容2.2项目配置2.2.1DEBUG2.2.2STAT ... [详细]
  • LVS实现负载均衡的原理LVS负载均衡负载均衡集群是LoadBalance集群。是一种将网络上的访问流量分布于各个节点,以降低服务器压力,更好的向客户端 ... [详细]
  • 搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的详细步骤
    本文详细介绍了搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的步骤,包括环境说明、相关软件下载的地址以及所需的插件下载地址。 ... [详细]
  • 本文介绍了Redis的基础数据结构string的应用场景,并以面试的形式进行问答讲解,帮助读者更好地理解和应用Redis。同时,描述了一位面试者的心理状态和面试官的行为。 ... [详细]
  • 本文介绍了RPC框架Thrift的安装环境变量配置与第一个实例,讲解了RPC的概念以及如何解决跨语言、c++客户端、web服务端、远程调用等需求。Thrift开发方便上手快,性能和稳定性也不错,适合初学者学习和使用。 ... [详细]
  • 计算机存储系统的层次结构及其优势
    本文介绍了计算机存储系统的层次结构,包括高速缓存、主存储器和辅助存储器三个层次。通过分层存储数据可以提高程序的执行效率。计算机存储系统的层次结构将各种不同存储容量、存取速度和价格的存储器有机组合成整体,形成可寻址存储空间比主存储器空间大得多的存储整体。由于辅助存储器容量大、价格低,使得整体存储系统的平均价格降低。同时,高速缓存的存取速度可以和CPU的工作速度相匹配,进一步提高程序执行效率。 ... [详细]
  • 本文介绍了计算机网络的定义和通信流程,包括客户端编译文件、二进制转换、三层路由设备等。同时,还介绍了计算机网络中常用的关键词,如MAC地址和IP地址。 ... [详细]
  • 本文介绍了在Linux下安装和配置Kafka的方法,包括安装JDK、下载和解压Kafka、配置Kafka的参数,以及配置Kafka的日志目录、服务器IP和日志存放路径等。同时还提供了单机配置部署的方法和zookeeper地址和端口的配置。通过实操成功的案例,帮助读者快速完成Kafka的安装和配置。 ... [详细]
  • 解决nginx启动报错epoll_wait() reported that client prematurely closed connection的方法
    本文介绍了解决nginx启动报错epoll_wait() reported that client prematurely closed connection的方法,包括检查location配置是否正确、pass_proxy是否需要加“/”等。同时,还介绍了修改nginx的error.log日志级别为debug,以便查看详细日志信息。 ... [详细]
  • Servlet多用户登录时HttpSession会话信息覆盖问题的解决方案
    本文讨论了在Servlet多用户登录时可能出现的HttpSession会话信息覆盖问题,并提供了解决方案。通过分析JSESSIONID的作用机制和编码方式,我们可以得出每个HttpSession对象都是通过客户端发送的唯一JSESSIONID来识别的,因此无需担心会话信息被覆盖的问题。需要注意的是,本文讨论的是多个客户端级别上的多用户登录,而非同一个浏览器级别上的多用户登录。 ... [详细]
  • 面试经验分享:华为面试四轮电话面试、一轮笔试、一轮主管视频面试、一轮hr视频面试
    最近有朋友去华为面试,面试经历包括四轮电话面试、一轮笔试、一轮主管视频面试、一轮hr视频面试。80%的人都在第一轮电话面试中失败,因为缺乏基础知识。面试问题涉及 ... [详细]
  • 负载均衡_Nginx反向代理动静分离负载均衡及rewrite隐藏路径详解(Nginx Apache MySQL Redis)–第二部分
    nginx反向代理、动静分离、负载均衡及rewrite隐藏路径详解 ... [详细]
  • 在单位的一台4cpu的服务器上部署了esxserver,挂载了6个虚拟机,目前运行正常。在安装部署过程中,得到了cnvz.net论坛精华区 ... [详细]
  • 篇首语:本文由编程笔记#小编为大家整理,主要介绍了SpringCloudRibbon部分源码相关的知识,希望对你有一定的参考价值。1:ribbon是提供通过servi ... [详细]
  • t-io 2.0.0发布-法网天眼第一版的回顾和更新说明
    本文回顾了t-io 1.x版本的工程结构和性能数据,并介绍了t-io在码云上的成绩和用户反馈。同时,还提到了@openSeLi同学发布的t-io 30W长连接并发压力测试报告。最后,详细介绍了t-io 2.0.0版本的更新内容,包括更简洁的使用方式和内置的httpsession功能。 ... [详细]
author-avatar
qwer
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有