hadoop跨域集群构建实验

来源:互联网 发布:php curl culopt 编辑:程序博客网 时间:2024/06/05 12:43
分布式运算总是离不开大集群,大量数据分析和存储构建跨域的异地集群也是非常正常的,所以今天在ec2上尝试了一下跨域的整体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的配置这样就可以了。

    域A中的两个datanode的配置直接拷贝namenode的core-site.xml和mapred-site.xml就可以了,并且core-site.xml中的配置可以直接使用机器名namenode而不必使用namenode.areaA,因为在datanode中该配置只用于datanode进程连接namenode,mapred-site.xml是用于tasktracker进程连接jobtracker的,所以还是一样,只要保证能与目标机器正常通讯就行;

    域B中的的两个datanode就必须要求在core-site.xml和mapred-site.xml中配置完整的地址namenode.areaA,不然datanode进程会无法连接namenode,而tasktracker也会连接不到jobtracker,然后这里还有一个需要注意的就是,tasktracker是需要连接HDFS文件系统的,而文件系统是jobtracker通过本机的core-site.xml的配置来确定的,所以jobtracker中core-site.xml的配置必须是要保证所有的节点都能够正常访问到的地址,否则tasktracker就无法访问HDFS文件系统,前面讲namenode配置的时候已经提到过这个问题,这里继续强调下。

  

   顺带最后讲一下hadoop集群中的各种角色 Roles

   namenode hadoop集群主节点,控制所有角色和进程的管理

   secondarynamenode 主节点的备份节点,当主节点失效时会接管所有资源

   jobtracker job主节点,用于创建job并将job分割成task,然后分发给tasktracker,最后reduce,也就是hadoop的核心 map/reduce

   datanode HDFS文件系统的数据存储节点

   tasktracker  任务节点,用于接收处理jobtracker分配的task,然后返回结果

   以上就是hadoop集群中所有的角色了,一般的小型配置就是namenode jobtracker secondarynamenode使用同一机器,然后剩下的所有机器每一台都同时作为datanode和tasktracker,datanode和tasktracker采用一一对应的方式有助于提高hadoop的运算效率,因为可以节省大量数据传输的时间