打算搞一个复杂的Hadoop 2.6集群,加上Zookeeper来搞HA,再部署上HBase,Hive等一系列的东西。发现机器多了,从建虚机到配置都不能再靠命令行一条一条的敲,需要搞脚本出来自动/半自动执行。
其实想想,这个部署的过程就是一个类似PaaS的任务。完全可以搞成可视化的部署工具。当年搞十八摸的中间件的部署就是有这样的工具。可以自己先定义所需要的系统拓扑,比如一个WAS ND的集群,要几个Deploy Manager,几个WAS App Server,后面跟着几个DB2的数据库实例。然后一个命令就全部虚机都部署出来了,相互间的连接配置也搞好了。管理的时候,就直接上WAS ND的页面管理。
现在的Hadoop之类的集群,动不动就是成百上千台机器,靠脚本的执行来管理,不是什么好方法。携程出现的问题就是个好的例子。相信BAT这样的巨头一定会有自己的PaaS部署和管理的系统。
自己搞的小集群就还是用脚本来吧。哪天系统出问题了,就直接虚机删除,然后再部署一套,来的方便快捷。
用户和用户权限的思考
首先看到很多网上的科普hadoop,zookeeper,HBase的安装配置的文章都用root来搞。科普简介还行,但是正常的开发、测试环境这就不行了,就更别说生产环境了。root什么都管了,危险太大。
还没搞完,不过觉得数据分析和管理应该分开,开发和测试环境可以都用一个帐号,比如我常用的hadoop帐号。基本思路是:
1. root用户是在虚机建立后才用的,可以写脚本来干几件事
- 创建大数据工具的各个帐号,创建/修改密码;
- 安装Java或者其他语言,这个是给所有用户使用的,应该是要root来安装;
- 保持各个工具需要的软件包,赋予不同用户对各自软件包的权限;
- 针对不同的用户,创建基础目录和临时目录,根据用户的需求赋予不同的权限
2. 管理相关的帐号,这里主要是指zookeeper帐号。3. DFS/Hadoop/相关的帐号。4. 数据应用的帐号,比如HBase、Hive、Spark等的帐号
2-4,在开发和测试环境可以用一个帐号全部管理,省去很多麻烦。比如hadoop要求的master到slave和slave之间需要能无密码的ssh登陆,设置N×N之间能无密码ssh登陆是很烦的事,一旦新增节点,将要求大家都来一遍,多帐号就会很麻烦。
终于又有时间来继续这个项目。今天碰到的一个问题是到底hadoop 2.6里面SSH的作用是什么,到底需要配置谁和谁之间无需密码的SSH登录。
《Hadoop权威指南》v3版里面说的是只需要Master到Slave单向需要配置SSH无密码登录,以方便控制脚本来启动全集群的操作。还特别强调不是java的进程需要SSH。但并没有细化到到底node级别。对于一个NameNode,Resource Manager都分离的环境,这个问题就比较的复杂了,需要考虑下面的几种情况:
- NameNode 和 Data Nodes间的配置;
- Resource Manager -> Node Managers的配置
- 主NameNode和从NameNode间的配置;
- 主ResMgr和从ResMgr间的配额制;
- DataNode间的配置;
- NodeMgr间的配置;
以上这些都涉及到双向的问题。又google了一圈,看到讲解清楚的还真的很少。有一个StackOver上面说道了这样的观点:
- 和《指南》的说法一样,Master们一定要能SSH到Slaves上去,才好启动。所以NameNode>DataNodes和ResMgr>NodeMgr是一定要配置的,单向!
- Slaves直接的通信是通过TCP/IP加上RCP协议来实现的,所以不用SSH。
但是,在我的3节点环境中,曾经发生过slave之间必须要能SSH才能跑通程序的情况,所以上述说法还有待验证。
由于没找到标准的原理解释部分,我暂且认为StackOver上的关于Master到Slave的观点正确。由于主从节点之间也没有找到原理文章,我现阶段决定先按StackOver的说法配置我的7节点环境:
账号都采用hadoop;
只配置NameNode>DataNodes和ResMgr>NodeMgr的SSH无密码登录;
其他情况现在都不配置。在实际安装配置中来发现问题,再改进。
(关于这个话题就谈到这里,以后就实际出席的问题再修改此帖里的SSH原理部分。关于我的7节点的hadoop ha环境,另开新帖讨论)