分布式运算总是离不开大集群,大量数据分析和存储构建跨域的异地集群也是非常正常的,所以今天在ec2上尝试了一下跨域的整体Hadoop集群配置。
性感阅读:Apache Hadoop初体验
使用5台机器分别位于两个不同的域:
域A:namenode.areaA 域B:datanode03.areaB
datanode01.areaA datanode04.areaB
datanode02.areaA
域A和域B可以是随意的两个域,但是要求有上级DNS服务可以使两个域网络互通,接下来讲各个节点的配置:
namenode.areaA 作为namenode 和 jobtracker,
core-site.xml中使用完整地址配置即 hdfs://namenode.areaA:9000,因为jobtracker会使用该配置来让tasktracker连接HDFS文件系统,如果只配置机器名会导致不同域的tasktracker无法连接到HDFS文件系统而无法正常工作;
mapred-site.xml中可以配置机器名或者完整地址 namenode:9001 或者 namenode.areaA:9001 都可以,namenode中的该配置文件只用于ssh到目标机器启动jobtracker进程,但是如果jobtracker使用独立的服务器而且在不同域的话,该配置文件需要配置完整的可通讯的地址;
masters 该文件是配置备份namenode的,一般情况下配置本机就行了,localhost namenode namenode.areaA 都不会有问题,但是同样的,如果是位于不同的第二namenode主节点,那么就需要配置完整的可通讯的地址;
slaves 该文件是配置所有的datanodes的,根据预设的环境,我们可以配置成:
datanode01
datanode02
datanode03.areaB
datanode04.areaB
在相同域中的可以只配置机器名,不同域中的就需要配置完整的地址,不过全部配置完整的地址当然也是不会错的,不过配置机器名可以避免上级DNS故障所造成的整体瘫痪。而且我在实验过程中明显感觉到使用公网域名比使用机器名通讯速度要慢很多,这个可能和网络环境也有关系;
namenode的配置这样就可以了。