转载表面上看,是一套基于B/S方式实现的分布式管理系统,但其实背后的架构是基于C/S完成的。你以为他是一只鞋吗?其实他是一个吹风机。作为界面化的系统,浏览器框架是不可或缺的,但更加重要的东西在Socket上面。
这个其实牵扯到一个通信协议的问题,各语言都有自己的socket,thread的库,直接调用即可。但是这个通信协议就需要自己来完成了。既不能太简单,太简单了,明码传输,如果别人获知了这个接口,就很容易执行一些令人讨厌的 *** 作。也不能太复杂,太复杂了等于是给自己找麻烦,所以简单的数据包编解码的工作或者用token验证的方式是需要的。通信协议起码要两种,一种是传输命令执行的协议,一种是传输文件的协议。
二、跨语言的socket通信
为什么要跨语言,主控端和代理端通信,用什么语言开发其实无所谓。但是为了给自己省事,尽可能使用服务器上已经有了的默认语言,Ambari前期采用phppuppet的方式管理集群,这不是不可以,puppet自己解决了socket通信协议和文件传输的问题,可你需要为了puppet在每台服务器上都安装ruby。我是个有点服务器和代码洁癖的人。光是为了一个puppet就装个ruby,我觉得心里特对不起服务器的资源。所以我自己写了一个python的代理端。python是不管哪个linux系统在安装的时候就都会有了。然后主控端的通信,可以用python实现,也可以用php实现,但是考虑到对于更多的使用者来说,改php可能要比改tornado简单许多,所以就没用python开发。hadoop分支版本众多,发布出去,用户要自己修改成安装适合自己的hadoop发行版,就势必要改源码,会php的明显比会python的多。php里面的model封装了所有的 *** 作,而python只是个 *** 作代理人的角色而已。
所以也延伸出一个问题,什么语言用来做这种分布式管理系统的代理端比较合适,我自己觉得,也就是python比较合适了, *** 作系统自带,原生的package功能基本够用。用java和php也可以写agent,但是你势必在各节点预先就铺设好jre或者php运行环境。这就跟为什么用python和java写mapred的人最多是一样的。没人拦着你用nodejs写mapred,也可以写,就是你得在每个节点都装v8的解释引擎,不嫌麻烦完全可以这样干。原理参看map/rece论文,不解释。perl也是 *** 作系统原生带的,但是perl的可维护性太差了,还是算了吧。
所以这就牵扯到一个跨语言的socket问题,理论上来说,这不存在什么问题。但这是理论上的,实际开发过程中确实存在问题,比如socket长连接,通信数据包在底层的封装方式不同。我没有使用xml-rpc的原因之一就是我听说php的xmlrpc跟其他语言的xmlrpc有不同的地方,需要修改才能用,我就没有用这种办法。最早是自己定义的 *** 作协议,这时就遇到了这些问题,所以后来直接采用了thrift方式。就基本不存在跨语言的socket通信问题了。
三、代理端执行结果的获取
无论命令还是文件是否在代理端执行成功,都需要获取到执行结果返回给中央端。所以这里也涉及一个读取节点上的stdout和stderr的问题。这个总体来说不是很难,都有现成的包。当然这个时候你需要的是阻塞执行,而不能搞异步回调。
还有个问题是,我要尽可能使用python默认就带的包,而尽量不让服务器去访问internet下载第三方的包。
还有代理端最重要的一点,就是python的版本兼容性。centos5用python24,centos6用python26,ubuntu基本默认都是27。所以一定要最大限度的保证语言的跨版本兼容性,要是每个 *** 作系统和每一个版本我都写一个代理,我一个人就累死了。
四、浏览器端的model,view,controller
这里面你要封装好所有的通信协议,以及需要在节点上面执行的脚本。发送文件的 *** 作和数据库 *** 作也要在model里面完成。
如果对tcl/tk很熟,也可以写基于 *** 作系统界面方式的管理,不用浏览器就是了。
view对我来说是最痛苦的事,都是现学的jQuery怎么用,前端的工作太可怕了。关于这方面,没有太多可描述的,html和js带给我的只有痛苦的回忆,万恶的undefined。
五、跨 *** 作系统的安装文件封装。
要适应不同的 *** 作系统也是个很麻烦的事情,需要用agent提前获知 *** 作系统的发行分支,版本号。然后去找到对应的安装文件去执行。你不能保证一个分布式系统的集群中所有的节点都可以访问internet,更多的情况是这些节点都存在在一个安全的内网中。只有个别几个节点是可以访问外网的。所以,我势必要把所有的安装文件以及他们的依赖尽可能集中起来。我不确定安装 *** 作系统的lzo,yum或者apt-get会去下什么鬼东西,甚至无论是yum还是apt-get,里面都没有hadoop-lzo的库文件。所以,最好的办法是自己编译打包rpm和deb包。直接安装就好了,别去找repo下载什么。
这就是第五步工作,把需要的依赖的东西自己编译打包成rpm和deb。
deb包很好解决,但是rpm就没那么好办了,需要学习rpm的编译文件如何编写,这块是挺麻烦的,但是这玩意用好了还是挺不错的。现在我自制的安装包里面就已经包含了自己编译的lzo和snappy两种压缩库,以及hadoop-gpl-packaging的rpm和deb。下一个发布的easyhadoop将直接支持centos5,6,suse,以及ubuntu/debian的系统上安装hadoop。已经自带了lzo和snappy以及lzop和snzip。
六、把这些所有东西,整合到一个系统里面。
关联这些所有事情间的联系,整合到一个浏览器界面里面去。写一个分布式的管理脚本不难,写一个界面也不难,但是也许是我的水平不行,这两件事结合起来让他们协同工作还是有点难度的。对我来说,写界面的工作可能更难一点。
Cloudera可能是十来个人在写Manager的东西,ambari也是放到github和apachesvn上面,apache基金会的各种committer在写。easyhadoop没他们功能那么强大,一年来只有我一个人设计架构,功能,各种语言的编码,测试,发布。Fortheloveofgod,WhathaveIdone(英文部分请站在山顶仰天长啸)T_T。从前台到后台,到hadoop和生态系统以及他们的依赖软件的单独patch、编译打包。(系统yum或者apt-get的包不如自己打的好使。)
从时间上来看,全球第一款开源的hadoop部署管理系统应该还是属于ambari,2011年8月开始写的,2012年9月底进入apache的incubator。我是大概2012年8月开始写的easyhadoop,全球第一没赶上,估计国内第一个开源的hadoop管理系统还是可以排上的。
FTP大家都不陌生吧?现在很多朋友都是ADSL路由+HUB上网,现在我就把自己建FTP的经验拿出来和大家一起分享一下!总的来说可分三个步骤:申请动态域名;进行端口映射;安装并设置FTP服务器。下面我就逐一说明:一、申请动态域名
如果您没有固定的IP,有的只是动态IP的话,那么这一步一定要做。目的是要申请注册一个动态域名,下载一个客户端软件并安装在您的计算机上。当然动态域名不光只是花生壳才有,您也可以申请其他的,如希网网络动态域名网站()的动态域名也是很好的,不用担心,他也是免费的。实践证明希网网络动态域名要比花生壳的速度快很多!动态域名解析服务的实现一般要依靠两个程序的协同工作,其一是服务端程序,该程序安装在动态域名解析服务网站上,最终的域名解析工作由它来完成;其二是客户端程序,它安装在拨号上网用户的计算机上,它的作用在于:一旦用户上网,它就取得当前的IP并传给服务器。
1、进入网域科技网站()
2 申请一个希网动态域名用户。
3、登陆并新建一个动态域名。
4、下载并安装客户端软件。
二、进行端口映射
这里以我自己用的MT800 软件版本为 V100R006C01B010SP01 为例:
在ADSL路由器中有NAT设置,NAT是网络地址映射。是内网的IP地址与外网地址的转换。这样可以有效节省IP地址资源,还可以保护内网。S
NAT简介NP
NAT-Network Address Translator的简称,(又叫网络地址转换),实现内网IP地址与公网IP地址之间的相互转换,其作用是让服务器把指定端口的请求转发到指定的IP上,让其它的机器来响应这些请求,而内网向外网发送的时候不再是像其它网关服务那样随机分配端口,而是用上面指定的端口。也就是说,NAT将多个内部地址映射为少数几个甚至一个公网地址,使整个局域网中的机器都能够连上Internet,同时它还有隐藏内部网络结构的作用,具有一定的安全性。但在SOHO应用中,当需要Internet上的其他用户能够访问Intranet上的服务如Web和FTP等,这就需要对NAT进行端口配置,以实现在NAT协议下的各种应用。vd
设置基础:NAT规则的添加和参数说明aM
添加NAT规则
在IE的地址栏中键入ADSL Modem的IP地址(默认的为19216811),输入用户名和密码(默认的用户名和均是admin),进入配置页面。在"其他设定"表单单击"NAT" 点击"添加"按钮,d出添加NAT规则的页面,在规则类型中选择"REDIRECT"REDIRECT:通过地址和端口的配置,使Internet上的用户可以通过访问路由器的广域网IP来访问内部网络提供的诸如Web Server或FTP Server服务。RDR方式允许你让你的局域网中的计算机做为如一个网站或FTP服务器,互联网上的用户不必向你请求便可以获得这台计算机的公网IP地址,在所有进入和输出的数据包中,这些计算机的私有IP地址都转换为你的公网IP地址。(这种方式只是做外网IP地址到内网IP地址和端口的映射,它不仅仅是地址的映射,而且是端口的映射)。
本地地址为需要进行映射的IP,不用多说哈!
全局起始地址: 使用规则的本地IP起始值,输入你想要转换的私有IP地址的开始,如果选择全部则填0000
全局终止地址: 使用规则的本地IP终结值,输入你想要转换的私有IP地址的结束,如果是单一IP,填入IP起始值。如果选择全部则填2552552550
起始目的端口和终止端口就看自己要做什么了啦 既然现在说的是FTP 那么我们就填上 21 ,当然,用猫的默认值也可以!保存,重启。
进行现端口映射后,我们回过头来再用Ping命令查看域名的解析情况,开始,运行输入命令Ping jxlw3322org(这个就是我的FTP啦,自己用,不经常开哈),如果通,那么恭喜你,就说明你已经成功了哦!
三、安装并设置FTP服务器
我用的Serv-U v61来架设FTP服务器。当然可以用ISS啦,呵呵 Serv-U安装很简单,完成后会有向导界面提示。写的太累了啊,Serv-U具体的 *** 作就不多说了,网上关于这个软件的教程太多了,安装完成的Serv-U还有帮助哦,其实看那个就足够了!
看到这里,你成功的拥有自己的FTP了吗?
服务器就是一台可共享主机,网络主机和局域网服务器本质上没有什么区别,只是使用范围以及带宽配置不同,在局域网内共享的主机服务器可以提供一个IP地址段内部访问以及文件 *** 作,包括共享打印机等等,方便网内设备的 *** 作。
最简单的办法:
找一台机器,把其中一个文件夹做成共享,guest权限全开,然后将该文件夹映射驱动器到每个人的电脑上,在他们的电脑上显示的就是一个本地硬盘一样。熟练一点的10分钟搭建完毕。
但是这个有个问题,局域网内每个人都能下载和修改文件,对文件安全性存在一定隐患。但是这个满足基本的存储和共享是没有问题的。
复杂一点的办法:
搭建专业服务器,不管是windows还是linux服务器都有专业的FTP服务器,网上搜一下什么教程啥的都出来了,但是这个不熟练的话,得花些时间搞定。但是这个对文件安全性绝对有保障,控制也更严格,容易管理。
目标:搭建完成两地DC和文件服务器
DC:搭建略
文件服务器:新建两台文件服务器,使用winServer ISCSI服务创建硬盘并集群。
这里需要建立2个ISCSI的盘一个Q和一个S:Q是中裁判,S是存储数据的盘
文件服务器连接ISCSI盘符
连接完成后,查看计算机管理,初始化盘并手动设置盘符
ISCSI完成,开始做群集,一般来说集群需要三个网络,心跳,传输,普通。(没截图就是走默认)
———————————————————————————————————————————————————————————
在S盘新建一个文件夹,共享everyone(读写)
测试
1是否正常连接
2随机关闭一台文件服务器后是否可以进行故障迁移
测试正常
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)