2.4.1伪分布式环境搭建

环境需要:
linux系统(当前使用Centos6.5)、jdk、hadoop2.4.1、zookeeper-3.4.6、ssh

概念简单介绍

NameNode
Namenode 管理者文件系统的Namespace。它维护着文件系统树(filesystem tree)以及文件树中所有的文件和文件夹的元数据(metadata)。管理这些信息的文件有两个,分别是Namespace 镜像文件(Namespace image)和操作日志文件(edit log),这些信息被Cache在RAM中,当然,这两个文件也会被持久化存储在本地硬盘。Namenode记录着每个文件中各个块所在的数据节点的位置信息,但是他并不持久化存储这些信息,因为这些信息会在系统启动时从数据节点重建。
客户端(client)代表用户与namenode和datanode交互来访问整个文件系统。客户端提供了一些列的文件系统接口,因此我们在编程时,几乎无须知道datanode和namenode,即可完成我们所需要的功能。

DataNode
Datanode是文件系统的工作节点,他们根据客户端或者是namenode的调度存储和检索数据,并且定期向namenode发送他们所存储的块(block)的列表。
集群中的每个服务器都运行一个DataNode后台程序,这个后台程序负责把HDFS数据块读写到本地的文件系统。当需要通过客户端读/写某个 数据时,先由NameNode告诉客户端去哪个DataNode进行具体的读/写操作,然后,客户端直接与这个DataNode服务器上的后台程序进行通 信,并且对相关的数据块进行读/写操作。

DFSZKFailoverController
驱动整个ZKFC的运转,通过向HealthMonitor和ActiveStandbyElector注册回调函数的方式,subscribe HealthMonitor和ActiveStandbyElector的事件,并做相应的处理

ResourceManager
YARN中的资源管理器(Resource Manager)负责整个系统的资源管理和调度,并内部维护了各个应用程序的ApplictionMaster信息,NodeManager信息,资源使用信息等

NodeManager
NodeManager(NM)是YARN中每个节点上的代理,它管理Hadoop集群中单个计算节点,包括与ResourceManger保持通信,监督Container的生命周期管理,监控每个Container的资源使用(内存、CPU等)情况,追踪节点健康状况,管理日志和不同应用程序用到的附属服务(auxiliary service)。

JorunalNode
journalNode的作用是存放EditLog的,在MR1中editlog是和fsimage存放在一起的然后SecondNamenode做定期合并,Yarn在这上面就不用SecondNamanode了

QuorumPeerMain
zookeeper独立的进程

1.集群规划

主机 IP 软件 运行进程
server01 192.168.1.101 hadoop、ssh NameNode、DFSZKFailoverController(zkfc)
server02 192.168.1.102 hadoop、ssh NameNode、DFSZKFailoverController(zkfc)
server03 192.168.1.103 hadoop、ssh ResourceManager
server04 192.168.1.104 hadoop、ssh ResourceManager
server05 192.168.1.105 hadoop、ssh、zookeeper DataNode、NodeManager、JournalNode、QuorumPeerMain
server06 192.168.1.106 hadoop、ssh、zookeeper DataNode、NodeManager、JournalNode、QuorumPeerMain
server07 192.168.1.107 hadoop、ssh、zookeeper DataNode、NodeManager、JournalNode、QuorumPeerMain

本环境中,将有两个NameNode组成,一个处于Active状态,一个处于StandBy状态。Active NameNode将对外提供服务,StandBy NameNode不对外提供服务,仅同步Active NameNode的状态。当Active NameNode失败时,则进行切换(原处于Active状态的NameNode变成StandBy状态,另一个反之)
Hadoop2.0之后,提供了两种HDFS HA的解决方案,一种是NFS,另一种是QJM。本环境中使用QJM(市场使用较多)。在该方案中,主备NameNode通过一组JournalNode同步元数据信息,一条数据只要写入到JorunalNode即认为写入成功。一般配置奇数个JorunalNode。
本环境中还配置了一个zookeeper集群,用于ZKFC(DFSZKFailoverController)故障转移,当Acitve NameNode挂掉了,会自动切换StandBy状态的NameNode为Active状态
本环境中也配置了两个ResourceManager,一个是Active,一个是Standby,状态由zookeeper进行协调
2.安装步骤

    1.安装配置zooekeeper集群(在server05上)
    1.1解压
        tar -zxvf zookeeper-3.4.5.tar.gz -C /root/app/
        
    1.2修改配置
        cd /root/app/zookeeper-3.4.5/conf/
        cp zoo_sample.cfg zoo.cfg
        vi zoo.cfg
        修改:dataDir=/root/app/zookeeper-3.4.5/tmp
        在最后添加:
        server.1=server05:2888:3888
        server.2=server06:2888:3888
        server.3=server07:2888:3888
        保存退出
        然后创建一个tmp文件夹
        mkdir /root/app/zookeeper-3.4.5/tmp
        echo 1 > /root/app/zookeeper-3.4.5/tmp/myid
    1.3将配置好的zookeeper拷贝到其他节点
        scp -r /root/app/zookeeper-3.4.5/ root@server06:/root/app/
        scp -r /root/app/zookeeper-3.4.5/ root@server07:/root/app/
        
        注意:修改server06、server07对应/root/app/zookeeper-3.4.5/tmp/myid内容
        server06:
            echo 2 > /root/app/zookeeper-3.4.5/tmp/myid
        server07:
            echo 3 > /root/app/zookeeper-3.4.5/tmp/myid
    2.安装配置hadoop集群(在server01上操作)
    2.1解压
        tar -zxvf hadoop-2.4.1.tar.gz -C /root/app/
    2.2配置HDFS
        #将hadoop添加到环境变量中
        vim /etc/profile
        export JAVA_HOME=/usr/java/jdk1.7.0_55
        export HADOOP_HOME=/root/app/hadoop-2.4.1
        export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin
        
        #hadoop2.4.1的配置文件全部在$HADOOP_HOME/etc/hadoop下
        cd /root/app/hadoop-2.4.1/etc/hadoop
        
        2.2.1修改hadoo-env.sh
            export JAVA_HOME=/root/app/jdk1.7.0_55
            
        2.2.2修改core-site.xml
            
                
                
                    fs.defaultFS
                    hdfs://ns1/
                
                
                
                    hadoop.tmp.dir
                    /root/app/hadoop-2.4.1/tmp
                
                
                
                
                    ha.zookeeper.quorum
                    server05:2181,server06:2181,server07:2181
                
            
            
        2.2.3修改hdfs-site.xml
            
                
                
                    dfs.nameservices
                    ns1
                
                
                
                    dfs.ha.namenodes.ns1
                    nn1,nn2
                
                
                
                    dfs.namenode.rpc-address.ns1.nn1
                    server01:9000
                
                
                
                    dfs.namenode.http-address.ns1.nn1
                    server01:50070
                
                
                
                    dfs.namenode.rpc-address.ns1.nn2
                    server02:9000
                
                
                
                    dfs.namenode.http-address.ns1.nn2
                    server02:50070
                
                
                
                    dfs.namenode.shared.edits.dir
                    qjournal://server05:8485;server06:8485;server07:8485/ns1
                
                
                
                    dfs.journalnode.edits.dir
                    /root/app/hadoop-2.4.1/journaldata
                
                
                
                    dfs.ha.automatic-failover.enabled
                    true
                
                
                
                    dfs.client.failover.proxy.provider.ns1
                    org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider
                
                
                
                    dfs.ha.fencing.methods
                    
                        sshfence
                        shell(/bin/true)
                    
                
                
                
                    dfs.ha.fencing.ssh.private-key-files
                    /root/.ssh/id_rsa
                
                
                
                    dfs.ha.fencing.ssh.connect-timeout
                    30000
                
            
        
        2.2.4修改mapred-site.xml
            
                
                
                    mapreduce.framework.name
                    yarn
                
                
        
        2.2.5修改yarn-site.xml
            
                    
                    
                       yarn.resourcemanager.ha.enabled
                       true
                    
                    
                    
                       yarn.resourcemanager.cluster-id
                       yrc
                    
                    
                    
                       yarn.resourcemanager.ha.rm-ids
                       rm1,rm2
                    
                    
                    
                       yarn.resourcemanager.hostname.rm1
                       server03
                    
                    
                       yarn.resourcemanager.hostname.rm2
                       server04
                    
                    
                    
                       yarn.resourcemanager.zk-address
                       server05:2181,server06:2181,server07:2181
                    
                    
                       yarn.nodemanager.aux-services
                       mapreduce_shuffle
                    
            
        
            
        2.2.6修改slaves(slaves是指定子节点的位置,因为要在server01上启动HDFS、在server03启动yarn,所以server01上的slaves文件指定的是datanode的位置,server03上的slaves文件指定的是nodemanager的位置)
            server05
            server06
            server07

        2.2.7配置免密码登陆
            #首先要配置server01到server02、server03、server04、server05、server06、server07的免密码登陆
            #在server01上生产一对钥匙
            ssh-keygen -t rsa
            #将公钥拷贝到其他节点,包括自己
            ssh-coyp-id server01
            ssh-coyp-id server02
            ssh-coyp-id server03
            ssh-coyp-id server04
            ssh-coyp-id server05
            ssh-coyp-id server06
            ssh-coyp-id server07
            #配置server03到server04、server05、server06、server07的免密码登陆
            #在server03上生产一对钥匙
            ssh-keygen -t rsa
            #将公钥拷贝到其他节点
            ssh-coyp-id server04
            ssh-coyp-id server05
            ssh-coyp-id server06
            ssh-coyp-id server07
            #注意:两个namenode之间要配置ssh免密码登陆,别忘了配置server02到server01的免登陆
            在server02上生产一对钥匙
            ssh-keygen -t rsa
            ssh-coyp-id -i server01             
    
    2.4将配置好的hadoop拷贝到其他节点
        scp -r /root/app/hadoop-2.4.1/ root@server02:/root/app/
        scp -r /root/app/hadoop-2.4.1/ root@server03:/root/app/
        scp -r /root/app/hadoop-2.4.1/ root@server04:/root/app/
        scp -r /root/app/hadoop-2.4.1/ root@server05:/root/app/
        scp -r /root/app/hadoop-2.4.1/ root@server06:/root/app/
        scp -r /root/app/hadoop-2.4.1/ root@server07:/root/app/

3.启动

    ###注意:严格按照下面的步骤
    2.5启动zookeeper集群(分别在server05、server06、server07上启动zk)
        cd /root/app/zookeeper-3.4.5/bin/
        ./zkServer.sh start
        #查看状态:一个leader,两个follower
        ./zkServer.sh status
        
    2.6启动journalnode(分别在在server05、server06、server07上执行)
        cd /root/app/hadoop-2.4.1
        sbin/hadoop-daemon.sh start journalnode
        #运行jps命令检验,server05、server06、server07上多了JournalNode进程
    
    2.7格式化HDFS
        #在server01上执行命令:
        hdfs namenode -format
        #格式化后会在根据core-site.xml中的hadoop.tmp.dir配置生成个文件,这里我配置的是/server/hadoop-2.4.1/tmp,然后将/server/hadoop-2.4.1/tmp拷贝到server02的/server/hadoop-2.4.1/下。
        scp -r tmp/ server02:/home/hadoop/app/hadoop-2.4.1/
        ##也可以这样,建议hdfs namenode -bootstrapStandby
    
    2.8格式化ZKFC(在server01上执行即可)
        hdfs zkfc -formatZK
    
    2.9启动HDFS(在server01上执行)
        sbin/start-dfs.sh

    2.10启动YARN(#####注意#####:是在server03上执行start-yarn.sh,把namenode和resourcemanager分开是因为性能问题,因为他们都要占用大量资源,所以把他们分开了,他们分开了就要分别在不同的机器上启动)
        sbin/start-yarn.sh

    
到此,hadoop-2.4.1配置完毕,可以统计浏览器访问:
    http://192.168.1.101:50070
    NameNode 'server01:9000' (active)
    http://192.168.1.102:50070
    NameNode 'server02:9000' (standby)

验证HDFS HA
    首先向hdfs上传一个文件
    hadoop fs -put /etc/profile /profile
    hadoop fs -ls /
    然后再kill掉active的NameNode
    kill -9 
    通过浏览器访问:http://192.168.1.202:50070
    NameNode 'server02:9000' (active)
    这个时候server02上的NameNode变成了active
    在执行命令:
    hadoop fs -ls /
    -rw-r--r--   3 root supergroup       1926 2017-02-06 15:36 /profile
    刚才上传的文件依然存在!!!
    手动启动那个挂掉的NameNode
    sbin/hadoop-daemon.sh start namenode
    通过浏览器访问:http://192.168.1.101:50070
    NameNode 'server01:9000' (standby)

验证YARN:
    运行一下hadoop提供的demo中的WordCount程序:
    hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.4.1.jar wordcount /profile /out

4.测试集群的简单命令

测试集群工作状态的一些指令 :
    bin/hdfs dfsadmin -report    查看hdfs的各节点状态信息
    bin/hdfs haadmin -getServiceState nn1        获取一个namenode节点的HA状态
    sbin/hadoop-daemon.sh start namenode  单独启动一个namenode进程
    ./hadoop-daemon.sh start zkfc   单独启动一个zkfc进程

你可能感兴趣的:(2.4.1伪分布式环境搭建)