• hadoop2.2.0的ha分布式集群搭建


    hadoop2.2.0 ha集群搭建

    使用的文件如下:
        jdk-6u45-linux-x64.bin
        hadoop-2.2.0.x86_64.tar
        zookeeper-3.4.5.tar.gz
        hbase-0.96.2-hadoop2-bin.tar
        使用WinSCP工具将上述文件复制到linux的根目录的cloud文件夹下

    文件所在路径为:
        /cloud/jdk-6u45-linux-x64.bin
        /cloud/hadoop-2.2.0.x86_64.tar
        /cloud/zookeeper-3.4.5.tar.gz
        /cloud/hbase-0.96.2-hadoop2-bin.tar

    文件安装路径为:
        /cloud/jdk
        /cloud/hadoop

    1使用wmware创建6台虚拟机,这里不再一一叙述配置过程
        主机名    IP地址            安装的软件                                运行的进程
        hdp1    192.168.1.11    jdk1.6、hadoop2.2.0                        NameNode、DFSZKFailoverController
        hdp2    192.168.1.12    jdk1.6、hadoop2.2.0                        NameNode、DFSZKFailoverController
        hdp3    192.168.1.13    jdk1.6、hadoop2.2.0                        ResourceManager
        hdp4    192.168.1.14    jdk1.6、hadoop2.2.0、zookeeper3.4.5        DataNode、NodeManager、JournalNode、QuorumPeerMain
        hdp5    192.168.1.15    jdk1.6、hadoop2.2.0、zookeeper3.4.5        DataNode、NodeManager、JournalNode、QuorumPeerMain
        hdp6    192.168.1.16    jdk1.6、hadoop2.2.0、zookeeper3.4.5        DataNode、NodeManager、JournalNode、QuorumPeerMain
        
    2关闭防火墙
        关闭防火墙如下:      
        停止运行防火墙:service iptables stop  
        关闭防火墙自启动:chkconfig iptables off  
        验证防火墙是否关闭:chkconfig --list | grep iptables  
        
    3生成ssh免密码登录
        分别在每个节点上生成公钥私钥:
            cd /root/.ssh    
            ssh-keygen -t rsa三次回车  
            cp id_rsa.put authorized_keys
        将hdp2、hdp3、hdp4、hdp5、hdp6的私钥复制到hdp1节点上:
            在hdp2节点上执行:ssh-copy-id -i hdp1
            在hdp3节点上执行:ssh-copy-id -i hdp1
            在hdp4节点上执行:ssh-copy-id -i hdp1
            在hdp5节点上执行:ssh-copy-id -i hdp1
            在hdp6节点上执行:ssh-copy-id -i hdp1
        将hdp1节点上的authorized_keys复制给hdp2、hdp3、hdp4、hdp5、hdp6节点:
            在hdp1节点上执行:scp /root/.ssh/authorized_keys hdp2:/root/.ssh/
            在hdp1节点上执行:scp /root/.ssh/authorized_keys hdp3:/root/.ssh/
            在hdp1节点上执行:scp /root/.ssh/authorized_keys hdp4:/root/.ssh/
            在hdp1节点上执行:scp /root/.ssh/authorized_keys hdp5:/root/.ssh/
            在hdp1节点上执行:scp /root/.ssh/authorized_keys hdp6:/root/.ssh/
        验证ssh免密码登录(包括登录自己):
            在hdp1节点上执行:ssh hdp1、ssh hdp2、ssh hdp3、ssh hdp4、ssh hdp5、ssh hdp6
            在hdp2节点上执行:ssh hdp1、ssh hdp2、ssh hdp3、ssh hdp4、ssh hdp5、ssh hdp6
            在hdp3节点上执行:ssh hdp1、ssh hdp2、ssh hdp3、ssh hdp4、ssh hdp5、ssh hdp6
            在hdp4节点上执行:ssh hdp1、ssh hdp2、ssh hdp3、ssh hdp4、ssh hdp5、ssh hdp6
            在hdp5节点上执行:ssh hdp1、ssh hdp2、ssh hdp3、ssh hdp4、ssh hdp5、ssh hdp6
            在hdp6节点上执行:ssh hdp1、ssh hdp2、ssh hdp3、ssh hdp4、ssh hdp5、ssh hdp6
            
    4配置hdp1节点上的jdk-6u45-linux-x64.bin
        cd /cloud/目录下
            为jdk-6u45-linux-x64.bin赋予执行权限:chmod u+x jdk-6u45-linux-x64.bin
            在当前目录下解压jdk-6u45-linux-x64.bin:./jdk-6u45-linux-x64.bin(/cloud/文件夹下多了一个jdk1.6.0.45文件夹)
            重命名jdk1.6.0.45:mv jdk1.6.0.45 jdk
        配置jdk到环境变量:
            vi /etc/profile添加如下内容:
            export JAVA_HOME=/cloud/jdk
            export PATH=.:$JAVA_HOME/bin:$PATH
            保存退出
        使修改的环境变量立即生效:
            source /etc/profile
        验证jak:
            java -version
            
    5配置hdp1节点上的hadoop-2.2.0.x86_64.tar
        cd /cloud/目录下
            在当前目录下解压hadoop-2.2.0.x86_64.tar:tar -zxvf hadoop-2.2.0.x86_64.tar(/cloud/下多了个hadoop-2.2.0文件夹)
            重命名hadoop2.2.0:mv hadoop-2.2.0 hadoop
        配置hadoop到环境变量:
            vi /etc/profile添加如下内容:
            export HADOOP_HOME=/cloud/hadoop
            修改PATH变量为:export PATH=.:$HADOOP_HOME/bin:$JAVA_HOME/bin:$PATH
            保存退出
        使修改的环境变量立即生效:
            source /etc/profile
        修改位于hadoop/etc/hadoop下的配置文件(hadoop-env.sh、core-site.xml、hdfs-site.xml、mapred-site.xml、yarn-site.xml、slaves)如下:
            修改hadoop-env.sh的27行jdk
                export JAVA_HOME=/cloud/jdk
                
            修改core-site.xml
                <configuration>
                    <!-- 指定hdfs的nameservice为ns1 -->
                    <property>
                        <name>fs.defaultFS</name>
                        <value>hdfs://ns1</value>
                    </property>
                    <!-- 指定hadoop临时目录 -->
                    <property>
                        <name>hadoop.tmp.dir</name>
                        <value>/cloud/hadoop/data</value>
                    </property>
                    <!-- 指定zookeeper地址 -->
                    <property>
                        <name>ha.zookeeper.quorum</name>
                        <value>hdp4:2181,hdp5:2181,hdp6:2181</value>
                    </property>
                </configuration>
                
            修改hdfs-site.xml
                <configuration>        
                    <!--指定hdfs的nameservice为ns1,需要和core-site.xml中的保持一致 -->
                    <property>
                        <name>dfs.nameservices</name>
                        <value>ns1</value>
                    </property>
                    <!-- ns1下面有两个NameNode,分别是nn1,nn2 -->
                    <property>
                        <name>dfs.ha.namenodes.ns1</name>
                        <value>nn1,nn2</value>
                    </property>
                    <!-- nn1的RPC通信地址 -->
                    <property>
                        <name>dfs.namenode.rpc-address.ns1.nn1</name>
                        <value>hdp1:9000</value>
                    </property>
                    <!-- nn1的http通信地址 -->
                    <property>
                        <name>dfs.namenode.http-address.ns1.nn1</name>
                        <value>hdp1:50070</value>
                    </property>
                    <!-- nn2的RPC通信地址 -->
                    <property>
                        <name>dfs.namenode.rpc-address.ns1.nn2</name>
                        <value>hdp2:9000</value>
                    </property>
                    <!-- nn2的http通信地址 -->
                    <property>
                        <name>dfs.namenode.http-address.ns1.nn2</name>
                        <value>hdp2:50070</value>
                    </property>
                    <!-- 指定NameNode的元数据在JournalNode上的存放位置 -->
                    <property>
                        <name>dfs.namenode.shared.edits.dir</name>
                        <value>qjournal://hdp4:8485;hdp5:8485;hdp6:8485/ns1</value>
                    </property>
                    <!-- 指定JournalNode在本地磁盘存放数据的位置 -->
                    <property>
                        <name>dfs.journalnode.edits.dir</name>
                        <value>/cloud/hadoop/journal</value>
                    </property>
                    <!-- 开启NameNode失败自动切换 -->
                    <property>
                        <name>dfs.ha.automatic-failover.enabled</name>
                        <value>true</value>
                    </property>
                    <!-- 配置失败自动切换实现方式 -->
                    <property>
                        <name>dfs.client.failover.proxy.provider.ns1</name>
                        <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
                    </property>
                    <!-- 配置隔离机制 -->
                    <property>
                        <name>dfs.ha.fencing.methods</name>
                        <value>sshfence</value>
                    </property>
                    <!-- 使用隔离机制时需要ssh免登陆 -->
                    <property>
                        <name>dfs.ha.fencing.ssh.private-key-files</name>
                        <value>/root/.ssh/id_rsa</value>
                    </property>
                <configuration>
                
            修改mapred-site.xml
                <configuration>
                    <!-- 指定mr框架为yarn方式 -->
                    <property>
                        <name>mapreduce.framework.name</name>
                        <value>yarn</value>
                    </property>
                </configuration>

            修改yarn-site.xml
                <configuration>
                    <!-- Site specific YARN configuration properties -->
                    <!-- 指定resourcemanager地址 -->
                    <property>
                        <name>yarn.resourcemanager.hostname</name>
                        <value>hdp3</value>
                    </property>
                    <!-- 指定nodemanager启动时加载server的方式为shuffle server -->
                    <property>
                        <name>yarn.nodemanager.aux-services</name>
                        <value>mapreduce_shuffle</value>
                    </property>
                </configuration
                
            修改slaves
                hdp4
                hdp5
                hdp6
        由于core-site.xml中指定了hadoop数据存放的本地磁盘路径是/cloud/hadoop/data,而这个/cloud/hadoop/下data文件夹是不存在需要创建;
        由于hdfs-site.xml中指定了JournalNode在本地磁盘存放数据的位置是/cloud/hadoop/journal,而/cloud/hadoop/下的journal文件夹是不存在的需要创建。
        此上6个配置文件都是hdp1节点上的,修改完成后将配置好的环境变量/etc/profile文件、/cloud/jdk文件夹和/cloud/hadoop文件夹复制到其他节点:
            将/cloud/jdk文件夹和/cloud/hadoop文件夹复制到其他节点:
                在hdp1节点上执行:scp -r /cloud/ hdp2:/
                在hdp1节点上执行:scp -r /cloud/ hdp3:/
                在hdp1节点上执行:scp -r /cloud/ hdp4:/
                在hdp1节点上执行:scp -r /cloud/ hdp5:/
                在hdp1节点上执行:scp -r /cloud/ hdp6:/
            将环境变量/etc/profile文件复制到其他节点(在其他节点上要执行source /etc/profile使其修改立即生效):
                scp /etc/profile hdp2:/etc/
                scp /etc/profile hdp3:/etc/
                scp /etc/profile hdp4:/etc/
                scp /etc/profile hdp5:/etc/
                scp /etc/profile hdp6:/etc/

    6在hdp4节点配置zookeeper-3.4.5.tar.gz
        cd /cloud/目录下
            解压zookeeper-3.4.5.tar.gz:tar -zxvf zookeeper-3.4.5.tar.gz(当前目录下多了一个zookeeper-3.4.5文件夹)
            重命名zookeeper-3.4.5:mv zookeeper-3.4.5 zk
            cd到/cloud/zk/conf/目录下:cp zoo_sample.cfg zoo.cfg
            vi zoo.cfg
                修改:dataDir=/cloud/zk/data
                在最后面添加:
                server.1=hdp4:2888:3888
                server.2=hdp5:2888:3888
                server.3=hdp6:2888:3888
            在/cloud/zk/创建data文件夹,进入/cloud/zk/data下创建myid文件,内容为1
            将/cloud/zk文件夹复制到hdp5和hdp6下:
                在hdp4节点上执行:scp -r /cloud/zk hdp5:/cloud/
                在hdp4节点上执行:scp -r /cloud/zk hdp6:/cloud/
                
                在hdp5节点上修改/cloud/zk/data/myid为2
                在hdp6节点上修改/cloud/zk/data/myid为3
                
    7启动hdp4、hdp5和hdp6节点上的zk
        分别在每个节点上执行:
            cd /cloud/zk/bin目录下
            启动zk:zkServer.sh start
            查看状态:
                zkServer.sh status(leader或follower)
                jps后多出来个quorumpeerMain
            
    8在hdp1节点上启动journalnode(会启动所有journalnode)
        cd /cloud/hadoop/sbin目录下
        启动journalnode:hadoop-daemons.sh start journalnode(在hdp4、hdp5和hdp6节点上运行jps命令检验,多了JournalNode进程)        
            
    9在hdp1节点上格式化HDFS
        格式化HDFS:hadoop namenode -format
        将格式化后生成的hadoop的数据文件都在hdp1节点上,需要将hdp1节点上的数据同步到hdp2节点上,因为hdp1节点和hdp2节点是ha,这里我直接复制:scp -r /cloud/hadoop/data hdp2:/cloud/hadoop
        
    10在hdp1节点上格式化ZK
        格式化ZK:hdfs zkfc -formatZK
            
    11在hdp1节点上启动HDFS
        cd /cloud/hadoop/sbin目录下
        启动HDFS:start-dfs.sh

    12在hdp3节点上启动YARN
        cd /cloud/hadoop/sbin目录下
        启动YARN:start-yarn.sh
        
    验证:
        验证hdp1节点上的NameNode:jps或者http://hdp1:50070
        验证hdp2节点上的NameNode:jps或者http://hdp2:50070
        验证hdp3节点上的YARN:jps或者http://hdp3:8088/
        
        各个节点进程如下:
            hdp1
            5267 DFSZKFailoverController
            4990 NameNode
            5380 Jps
            hdp2
            4471 Jps
            4388 DFSZKFailoverController
            4285 NameNode
            hdp3
            3734 ResourceManager
            3982 Jps
            hdp4
            4214 DataNode
            2373 QuorumPeerMain
            4543 Jps
            4431 NodeManager
            4304 JournalNode
            hdp5
            4050 DataNode
            2458 QuorumPeerMain
            4267 NodeManager
            4374 Jps
            4140 JournalNode
            hdp6
            4437 NodeManager
            4220 DataNode
            4310 JournalNode
            4549 Jps
            2705 QuorumPeerMain
        
    完成

       

  • 相关阅读:
    什么是原型链
    ThreadLocal
    mongodb用户权限设置
    mongo数据库分片副本集增加访问控制
    YOLO系列梳理(一)YOLOv1YOLOv3
    一份热力图可视化代码使用教程
    ef core An attempt was made to use the context while it is being configured.
    考研经验
    c#委托的定义理解
    上飞机https://zhuzhu12.xyz/link/8YFX1tSR3sy3Wj2S?clash=1
  • 原文地址:https://www.cnblogs.com/mengyao/p/4105288.html
Copyright © 2020-2023  润新知