• 搭建3节点hadoop集群


    前言

    我们使用hadoop2.6.0版本配置Hadoop集群,同时配置NameNode+HA、ResourceManager+HA,并使用zookeeper来管理Hadoop集群。

     

    (一)HDFS概述

    基础架构

    1、NameNode(Master)

    1)命名空间管理:命名空间支持对HDFS中的目录、文件和块做类似文件系统的创建、修改、删除、列表文件和目录等基本操作。

    2)块存储管理。

    HA架构

    hdfs架构图

    从上面的架构图可以看出,使用Active NameNode,Standby NameNode 两个节点可以解决单点问题,两个节点通过JounalNode共享状态,通过ZKFC 选举Active ,监控状态,自动备份。

    1、Active NameNode

    接受client的RPC请求并处理,同时写自己的Editlog和共享存储上的Editlog,接收DataNode的Block report, block location updates和heartbeat。

    2、Standby NameNode

    同样会接到来自DataNode的Block report, block location updates和heartbeat,同时会从共享存储的Editlog上读取并执行这些log操作,保持自己NameNode中的元数据(Namespcae information + Block locations map)和Active NameNode中的元数据是同步的。所以说Standby模式的NameNode是一个热备(Hot Standby NameNode),一旦切换成Active模式,马上就可以提供NameNode服务。

    3、JounalNode

    用于Active NameNode , Standby NameNode 同步数据,本身由一组JounnalNode节点组成,该组节点奇数个。

    4、ZKFC

    监控NameNode进程,自动备份。

     

    (二)YARN概述

    基础架构

    1、ResourceManager(RM)

    接收客户端任务请求,接收和监控NodeManager(NM)的资源情况汇报,负责资源的分配与调度,启动和监控ApplicationMaster(AM)。

    2、NodeManager

    节点上的资源管理,启动Container运行task计算,上报资源、container情况汇报给RM和任务处理情况汇报给AM。

    3、ApplicationMaster

    单个Application(Job)的task管理和调度,向RM进行资源的申请,向NM发出launch Container指令,接收NM的task处理状态信息。

    4、Web Application Proxy

    用于防止Yarn遭受Web攻击,本身是ResourceManager的一部分,可通过配置独立进程。ResourceManager Web的访问基于守信用户,当Application Master运行于一个非受信用户,其提供给ResourceManager的可能是非受信连接,Web Application Proxy可以阻止这种连接提供给RM。

    5、Job History Server

    NodeManager在启动的时候会初始化LogAggregationService服务, 该服务会在把本机执行的container log (在container结束的时候)收集并存放到hdfs指定的目录下. ApplicationMaster会把jobhistory信息写到hdfs的jobhistory临时目录下, 并在结束的时候把jobhisoty移动到最终目录, 这样就同时支持了job的recovery.History会启动web和RPC服务, 用户可以通过网页或RPC方式获取作业的信息。

    HA架构

    Yarn架构图

    ResourceManager HA 由一对Active,Standby结点构成,通过RMStateStore存储内部数据和主要应用的数据及标记。目前支持的可替代的RMStateStore实现有:基于内存的MemoryRMStateStore,基于文件系统的FileSystemRMStateStore,及基于zookeeper的ZKRMStateStore。 ResourceManager HA的架构模式同NameNode HA的架构模式基本一致,数据共享由RMStateStore,而ZKFC成为 ResourceManager进程的一个服务,非独立存在。

    (三)规划

    主机规划

    这里我们使用5 台主机来配置Hadoop集群。

     

    master

    slave1

    slave2

    namenode

    datanode

    resourcemanager

    journalnode

    zookeeper

    Journalnode和ZooKeeper保持奇数个,这点大家要有个概念,最少不少于 3 个节点。

    软件规划

    软件

    版本

    位数

    说明

    jdk

    jdk1.7

    64位

    最新稳定版本

    centos

    centos6.5

    64位

     

    zookeeper

    Apache zookeeper3.4.6

     

    稳定版本

    hadoop

    Apache hadoop2.6.0

     

    稳定版本

    •  
    •  

    用户规划

    每个节点的hadoop用户组和用户需要大家自己创建

     

    (四)集群安装前的环境检查

    时钟同步

    所有节点的系统时间要与当前时间保持一致。

    查看当前系统时间

    date
    Tue Nov  3 06:06:04 CST 2015
    

    如果系统时间与当前时间不一致,进行以下操作。

    1 [root@master~]# cd /usr/share/zoneinfo/
    2 [root@master zoneinfo]# ls        //找到Asia
    3 [root@master zoneinfo]# cd Asia/        //进入Asia目录
    4 [root@master Asia]# ls        //找到Shanghai
    5 [root@master Asia]# cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime        //当前时区替换为上海

    我们可以同步当前系统时间和日期与NTP(网络时间协议)一致。

     

    host文件检查

    禁用防火墙

    所有节点的防火墙都要关闭

    (五)配置SSH免密码通信

    使用命令:

    ssh-keygen -t rsa

    cat id_rsa.pub >> authorized_keys	

    所有节点都要执行以上操作

    将所有节点的authorized_keys合并

    大家通过ssh 相互访问,如果都能无密码访问,代表ssh配置成功。

    (六)脚本工具的使用

    runRemoteCmd.sh 用于统一执行命令
    deploy.sh远程复制文件脚本

    (七)jdk安装

    略 ,每个节点都要安装

    (八)Zookeeper安装

    修改Zookeeper中的配置文件。

    [hadoop@master app]$ cd /home/hadoop/app/zookeeper/conf/
    [hadoop@master conf]$ ls
    configuration.xsl  log4j.properties  zoo_sample.cfg
    [hadoop@master conf]$ cp zoo_sample.cfg zoo.cfg        //复制一个zoo.cfg文件
    [hadoop@master  conf]$ vi zoo.cfg
    dataDir=/home/hadoop/data/zookeeper/zkdata        //数据文件目录
    dataLogDir=/home/hadoop/data/zookeeper/zkdatalog        //日志目录
    # the port at which the clients will connect
    clientPort=2181        //默认端口号
    #server.服务编号=主机名称:Zookeeper不同节点之间同步和通信的端口:选举端口(选举leader)
    server.1=master:2888:3888
    server.2=slave1:2888:3888
    server.3=slave2:2888:3888

    通过远程命令deploy.sh将Zookeeper安装目录拷贝到其他节点上面。

    在所有节点上创建目录

    /home/hadoop/data/zookeeper/zkdata
    /home/hadoop/data/zookeeper/zkdatalog

    分别在所有节点上创建myid
    进入zkdata目录下,创建文件myid,里面的内容分别填充为:1、2、3

    配置zookeeper环境变量

    检查是否安装成功
    /home/hadoop/app/zookeeper/bin/zkServer.sh start


    (九)hadoop集群环境搭建

    解压

    修改配置文件 切换到/home/hadoop/app/hadoop/etc/hadoop/目录下。

    配置HDFS

    配置hadoop-env.sh

    export JAVA_HOME=/home/hadoop/app/jdk1.7.0_79

    配置core-site.xml

    <configuration>
        <property>
            <name>fs.defaultFS</name>
            <value>hdfs://cluster1</value>
        </property>
        < 这里的值指的是默认的HDFS路径 ,取名为cluster1>
        <property>
            <name>hadoop.tmp.dir</name>
            <value>/home/hadoop/data/tmp</value>
        </property>
        < hadoop的临时目录,如果需要配置多个目录,需要逗号隔开,data目录需要我们自己创建>
        <property>
            <name>ha.zookeeper.quorum</name>
            <value>master:2181,slave1:2181,slave2:2181</value>
        </property>
        < 配置Zookeeper 管理HDFS>
    </configuration>

    配置hdfs-site.xml

    <configuration>
        <property>
            <name>dfs.replication</name>
            <value>3</value>
        </property>
        < 数据块副本数为3>
        <property>
            <name>dfs.permissions</name>
            <value>false</value>
        </property>
        <property>
            <name>dfs.permissions.enabled</name>
            <value>false</value>
        </property>
        < 权限默认配置为false>
        <property>
            <name>dfs.nameservices</name>
            <value>cluster1</value>
        </property>
        < 命名空间,它的值与fs.defaultFS的值要对应,namenode高可用之后有两个namenode,cluster1是对外提供的统一入口>
        <property>
            <name>dfs.ha.namenodes.cluster1</name>
            <value>djt11,djt12</value>
        </property>
        < 指定 nameService 是 cluster1 时的nameNode有哪些,这里的值也是逻辑名称,名字随便起,相互不重复即可>
        <property>
            <name>dfs.namenode.rpc-address.cluster1.master</name>
            <value>master:9000</value>
        </property>
        < djt11 rpc地址>
        <property>
            <name>dfs.namenode.http-address.cluster1.master</name>
            <value>master:50070</value>
        </property>
        < djt11 http地址>
        <property>
            <name>dfs.namenode.rpc-address.cluster1.slave1</name>
            <value>slave1:9000</value>
        </property>
        < djt12 rpc地址>
        <property>
            <name>dfs.namenode.http-address.cluster1.slave1</name>
            <value>slave1:50070</value>
        </property>
    
        <property>
            <name>dfs.ha.automatic-failover.enabled</name>
            <value>true</value>
        </property>
        < 启动故障自动恢复>
        <property>
            <name>dfs.namenode.shared.edits.dir</name>
            <value>qjournal://master:8485;slave1:8485;slave2:8485/cluster1</value>
        </property>
        < 指定journal>
        <property>
            <name>dfs.client.failover.proxy.provider.cluster1</name>
            <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
        </property>
        < 指定 cluster1 出故障时,哪个实现类负责执行故障切换>
        <property>
            <name>dfs.journalnode.edits.dir</name>
            <value>/home/hadoop/data/journaldata/jn</value>
        </property>
        < 指定JournalNode集群在对nameNode的目录进行共享时,自己存储数据的磁盘路径 >
        <property>
            <name>dfs.ha.fencing.methods</name>
            <value>shell(/bin/true)</value>
        </property>
        <property>
            <name>dfs.ha.fencing.ssh.private-key-files</name>
            <value>/home/hadoop/.ssh/id_rsa</value>
        </property>
        <property>
            <name>dfs.ha.fencing.ssh.connect-timeout</name>
            <value>10000</value>
        </property>
        < 脑裂默认配置>
        <property>
            <name>dfs.namenode.handler.count</name>
            <value>100</value>
        </property>
    </configuration>

    配置 slave

    [hadoop@masterhadoop]$ vi slaves
    master
    slave1 slave2

    然后将配置好的hadoop分发到所有节点

    hdfs配置完毕后启动顺序

    1、启动所有节点上面的Zookeeper进程

    /home/hadoop/app/zookeeper/bin/zkServer.sh start

    2、启动所有节点上面的journalnode进程
    "/home/hadoop/app/hadoop/sbin/hadoop-daemon.sh start journalnode" all

    与此同时,需要在备节点(比如,slave1)上执行数据同步
    bin/hdfs namenode -bootstrapStandby	//同步主节点和备节点之间的元数据

    如果上面操作没有问题,我们可以一键启动hdfs所有相关进程
    [hadoop@masterhadoop]$ sbin/start-dfs.sh

    7、验证是否启动成功

    通过web界面查看namenode启动情况。

    http://master:50070


    YARN安装配置

    配置mapred-site.xml

    配置yarn-site.xml

    
    

    启动YARN

    1、在master节点上执行。

    [hadoop@masterhadoop]$ sbin/start-yarn.sh	
    		

    2、在slave1节点上面执行。

    [hadoop@slave1 hadoop]$ sbin/yarn-daemon.sh start resourcemanager

    如果上面执行没有异常,说明YARN安装成功。

    至此,hadoop 分布式集群搭建完毕。

  • 相关阅读:
    VIM
    函数指针
    《BOOST程序库完全开发指南》 第13章 编程语言支持
    《BOOST程序库完全开发指南》 第01章 Boost程序库总论
    gtest
    《BOOST程序库完全开发指南》 第04章 实用工具
    distcc配置
    《BOOST程序库完全开发指南》 第08章 算法
    Makefile
    《BOOST程序库完全开发指南》 第03章 内存管理
  • 原文地址:https://www.cnblogs.com/dadaxin/p/9022487.html
Copyright © 2020-2023  润新知