Hadoop2.6HA 高可靠部署 (2017.03修正,图文解说)

    xiaoxiao2021-03-25  51

    1.修改Linux主机名 2.修改IP 3.修改主机名和IP的映射关系 ######注意######如果你们公司是租用的服务器或是使用的云主机(如华为用主机、阿里云主机等) /etc/hosts里面要配置的是内网IP地址和主机名的映射关系 4.关闭防火墙 5.ssh免登陆 6.安装JDK,配置环境变量等

     

    集群IP,角色信息   

    nn =namenode

    rm= resourcemanager

    nm =nodemanager

    dn= datanode

    zk=zookeeper

    jn=jonrnalnode 

    172.16.11.221   mach40     nn     rm     zk

    172.16.11.222   mach41     nn     rm      zk

    172.16.11.223   mach42     dn      nmzk jn

    172.16.11.224   mach43     dn      nm              jn

    172.16.11.225   mach44     dn      nmjn

     

    复制代码

     

    说明:

    1.在hadoop2.0中通常由两个NameNode组成,一个处于active状态,另一个处于standby状态。Active NameNode对外提供服务,而Standby NameNode则不对外提供服务,仅同步active namenode的状态,以便能够在它失败时快速进行切换。 hadoop2.0官方提供了两种HDFS HA的解决方案,一种是NFS,另一种是QJM。这里我们使用简单的QJM。在该方案中,主备NameNode之间通过一组JournalNode同步元数据信息,一条数据只要成功写入多数JournalNode即认为写入成功。通常配置奇数个JournalNode 这里还配置了一个zookeeper集群,用于ZKFC(DFSZKFailoverController)故障转移,当Active NameNode挂掉了,会自动切换Standby NameNode为standby状态

     

     

    安装步骤: 1.安装配置zooekeeper集群(在mach40,mach41,mach42上) 1.1解压

    1. [root@mach41]#tar -zxvf    zookeeper-3.4.6.tar.g-C /usr/local/

    2. [root@mach41]#mv zookeeper-3.4.6/ zookeeper

    复制代码

    1.2修改配置

    1. [root@mach41]#cd /usr/local/zookeeper/conf/

    2. [root@mach41]#cp zoo_sample.cfg zoo.cfg

    3. [root@mach41l]#vim zoo.cfg

    复制代码

    修改:

    1. dataDir=/itcast/zookeeper/zkData

    复制代码

    在最后添加:

    server.1=mach40:2888:3888

    server.2=mach41:2888:3888

    server.3=mach42:2888:3888

    复制代码

    保存退出 然后创建一个tmp文件夹

    1. [root@mach41]#mkdir /usr/local/zookeeper/zkData

    复制代码

    再创建一个空文件

    1. [root@mach41]#touch /usr/local/zookeeper/zkData/myid

    复制代码

    最后向该文件写入ID

    1. [root@mach41]#echo 1 > /usr/local/zookeeper/zkData/myid

     

    记得其他俩个zk服务器myid分别写入  2   、3  

    1.3将配置好的zookeeper拷贝到其他节点(首先分别在Slave5、Slave6根目录:/usr/local/)

    1. [root@mach41]#scp -r /usr/local/zookeeper/ mach40:/usr/local/

    2. [root@mach41]#scp -r /usr/local/zookeeper/ mach42:/usr/local/

    复制代码

    注意:修改Slave5、Slave6对应/usr/local/zookeeper/zkData/myid内容

    1. Slave5:

    2. [root@Master local]#echo 2 > /usr/local/zookeeper/zkData/myid

    3. Slave6:

    4. [root@Master local]#echo 3 > /usr/local/zookeeper/zkData/myid

     

    2.安装配置hadoop集群(在Master上操作) 2.1解压

    1. [root@mach40]#tar -zxvf hadoop-2.6.0.tar.gz -C /usr/local/

    复制代码

    2.2配置HDFS(hadoop2.0所有的配置文件都在$HADOOP_HOME/etc/hadoop目录下) #将hadoop添加到环境变量中

    1. [root@mach40]#vim /etc/profile

    2. export JAVA_HOME=/usr/jdk1.7

    3. export HADOOP_HOME=/home/hadoop2.6

    4. export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin

    复制代码

    #hadoop2.0的配置文件全部在$HADOOP_HOME/etc/hadoop下

    1. [root@mach40]#cd /usr/local/hadoop-2.6.0/etc/hadoop

    复制代码

    2.2.1修改hadoo-env.sh

    1. export JAVA_HOME=/usr/local/jdk1.7

    复制代码

     

    特此声明:下面《配置文件》的IP地址 ,主机名,集群名字都是改过的,和转载原文不一样,你们要改的地方也一样(红色字体为重要地方)。

     

    2.2.2修改core-site.xml

    <configuration>

    <!-- 指定hdfs的nameservice为masters -->

    <property>

    <name>fs.defaultFS</name>

    <value>hdfs://Machenmaster</value>

    </property>

    <!-- 指定hadoop临时目录-->

    <property>

    <name>hadoop.tmp.dir</name>systemctl start zookeeper

    <value>/home/hadoop2.6/tmp</value>

    </property>

    <!-- 指定zookeeper地址-->

    <property>

    <name>ha.zookeeper.quorum</name>

    <value>172.16.11.223:2181,172.16.11.224:2181,172.16.11.225:2181</value>

    </property>

    </configuration>

    复制代码

    2.2.3修改hdfs-site.xml

    <configuration>

            <!--指定hdfs的nameservice为masters,需要和core-site.xml中的保持一致-->

            <property>

                    <name>dfs.nameservices</name>

                    <value>Machenmaster</value>

            </property>

            <!-- Master下面有两个NameNode,分别是Master,Slave1 -->

            <property>

                    <name>dfs.ha.namenodes.Machenmaster</name>

                    <value>m1,m2</value>

            </property>

            <!-- Master的RPC通信地址-->

            <property>

                    <name>dfs.namenode.rpc-address.Machenmaster.m1</name>

                    <value>172.16.11.221:9000</value>

            </property>

            <!-- Master的http通信地址-->

            <property>

                    <name>dfs.namenode.http-address.Machenmaster.m1</name>

                    <value>172.16.11.221:50070</value>

            </property>

            <!-- Slave1的RPC通信地址-->

            <property>

                    <name>dfs.namenode.rpc-address.Machenmaster.m2</name>

                    <value>172.16.11.222:9000</value>

            </property>

            <!-- Slave1的http通信地址-->

            <property>

                    <name>dfs.namenode.http-address.Machenmaster.m2</name>

                    <value>172.16.11.222:50070</value>

            </property>

            <!-- 指定NameNode的元数据在JournalNode上的存放位置-->

            <property>

                    <name>dfs.namenode.shared.edits.dir</name>

                    <value>qjournal://172.16.11.221:8485;172.16.11.222:8485;172.16.11.223:8485/Machenmaster</value>

            </property>

            <!-- 指定JournalNode在本地磁盘存放数据的位置-->

            <property>

                    <name>dfs.journalnode.edits.dir</name>

                    <value>/home/hadoop2.6/journal</value>

            </property>

            <!-- 开启NameNode失败自动切换-->

            <property>

                    <name>dfs.ha.automatic-failover.enabled</name>

                    <value>true</value>

            </property>

            <!-- 配置失败自动切换实现方式-->

            <property>

                    <name>dfs.client.failover.proxy.provider.Machenmaster</name>

                    <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>

            </property>

            <!-- 配置隔离机制方法,多个机制用换行分割,即每个机制暂用一行-->

            <property>

                    <name>dfs.ha.fencing.methods</name>

                    <value>sshfence</value>       //这里我要说一下,有些文档说要加入/bin/shell   没有必要

            </property>

            <!-- 使用sshfence隔离机制时需要ssh免登陆-->

            <property>

                    <name>dfs.ha.fencing.ssh.private-key-files</name>

                    <value>/root/.ssh/id_rsa</value>

            </property>

            <!-- 配置sshfence隔离机制超时时间-->

            <property>

                    <name>dfs.ha.fencing.ssh.connect-timeout</name>

                    <value>30000</value>

            </property>

    </configuration>

    复制代码

    2.2.4修改mapred-site.xml

    <configuration>

    <!-- 指定mr框架为yarn方式-->

    <property>

    <name>mapreduce.framework.name</name>

    <value>yarn</value>

    </property>

    </configuration>

    复制代码

    2.2.5修改yarn-site.xml

    <property>

     

    <name>yarn.resourcemanager.ha.enabled</name>

     

    <value>true</value>

     

    </property>

     

    <property>

     

    <description>Enable automatic failover.By default, it is enabled only when HA is enabled</description>

     

    <name>yarn.resourcemanager.ha.automatic-failover.enabled</name>

     

    <value>true</value>

     

    </property>

     

    <property>

     

    <name>yarn.resourcemanager.ha.rm-ids</name>

     

    <value>rm1,rm2</value>

     

    </property>

     

    <property>

     

    <name>yarn.resourcemanager.zk-address</name>

     

    <value>172.16.11.221:2181,172.16.11.222:2181,172.16.11.223:2181</value>

     

    </property>

     

    <property>

     

    <name>yarn.resourcemanager.hostname.rm1</name>

     

    <value>mach40</value>

     

    </property>

    <property>

     

    <name>yarn.resourcemanager.hostname.rm2</name>

     

    <value>mach41</value>

     

    </property>

     

    <property>

     

    <name>yarn.resourcemanager.recovery.enabled</name>

     

    <value>true</value>

     

    </property>

     

    <property>

     

    <name>yarn.resourcemanager.store.class</name>

     

    <value>org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore

     

    </value>

     

    </property>

     

    <property>

     

    <name>yarn.resourcemanager.cluster-id</name>

     

    <value>yarn-cluster</value>

     

    //下面的可以不写,我是想自己指定端口,所以写上去了

     

    </property>

    <property>

    <name>yarn.resourcemanager.address.rm1</name>

    <value>mach40:8132</value>

    </property>

    <property>

    <name>yarn.resourcemanager.address.rm2</name>

    <value>mach41:8132</value>

    </property>

    <property>

    <name>yarn.resourcemanager.scheduler.address.rm1</name>

    <value>mach40:8130</value>

    </property>

    <property>

    <name>yarn.resourcemanager.scheduler.address.rm2</name>

    <value>mach41:8130</value>

    </property>

    <property>

    <name>yarn.resourcemanager.resource-tracker.address.rm1</name>

    <value>mach40:8131</value>

    </property>

    <name>yarn.resourcemanager.resource-tracker.address.rm2</name>

    <value>mach41:8131</value>

    </property>

    <property>

    <name>yarn.resourcemanager.webapp.address.rm1</name>

    <value>mach40:8088</value>

    </property>

    <property>

    <name>yarn.resourcemanager.webapp.address.rm2</name>

    <value>mach41:8088</value>

    </property>

     

    2.2.6修改slaves(slaves是指定子节点的位置,因为要在Master上启动HDFS、在Slave2启动yarn,所以Master上的slaves文件指定的是datanode的位置,slave2上的slaves文件指定的是nodemanager的位置)

     

    mach42

    mach43

    mach44

    复制代码

    2.2.7配置免密码登陆   <简单的偷懒版,慎重点的可以百度,这里我的很简单>

    #配置mach40 。。mach44之间的免密码登陆 #在Master上生产一对钥匙

    1. [root@mach40]#ssh-keygen -t rsa

    复制代码

    #将公钥拷贝到其他节点,包括自己

    1. [root@mach40]# ssh-copy-id -i /root/.ssh/id_rsa.pub mach40

    2. [root@mach40]# ssh-copy-id -i /root/.ssh/id_rsa.pub mach41

    3. [root@mach40]# ssh-copy-id -i /root/.ssh/id_rsa.pub mach42

    4. [root@mach40]# ssh-copy-id -i /root/.ssh/id_rsa.pub mach43

    5. [root@mach40]# ssh-copy-id -i /root/.ssh/id_rsa.pub mach44

     

    其他节点重复上述动作,虽然手指头疼,但是简单粗暴!

     

    2.4将配置好的hadoop拷贝到其他节点

     

    1. [root@mach40l]#scp -r /home/hadoop2.6/  mach41:/home

    [root@mach40l]#scp -r /home/hadoop2.6/  mach42:/home

    [root@mach40l]#scp -r /home/hadoop2.6/  mach43:/home

    [root@mach40l]#scp -r /home/hadoop2.6/  mach44:/home

     

     

     

     

    复制代码

    ###注意:严格按照下面的步骤2.5启动zookeeper集群(分别在Slave4、Slave5、Slave6上启动zk)

    1. [root@mach40]#cd /home/zookeeper/bin/

    2. [root@mach40]#./zkServer.sh start

    复制代码

    #查看状态:一个leader,两个follower

     

    1. [root@mach40]#./zkServer.sh status

     

    2.6启动journalnode(分别在mach42,mach43,mach44上执行)

    1. [root@mach42]#cd /home/hadoop2.6/sbin

    2. [root@mach42]#sbin/hadoop-daemon.sh start journalnode

    复制代码

    #运行jps命令检验,mach42,mach43,mach44上多了JournalNode进程

     

    2.7格式化ZK(在mach40上执行即可)

    1. [root@mach40]#hdfs zkfc -formatZK

    复制代码

    --------------------------------------------------------------------------------------------------------

    【第一种方式直接格式化,手动拷贝相关tmp文件 】

    2.8 格式化HDFS   #在mach40上执行命令:

    1. [root@mach40]#hdfs namenode -format

    此处坑爹指数  五颗星!  :

    有可能第一次初始化没弄好   肯定不对 如果想第二次初始化 有两个关键点要做:

    1.删除 tmp 目录下的全部文件,连TMP删了得了;

    2.要把所要节点的日志 logs 全部清空

    复制代码

    #格式化后会在根据core-site.xml中的hadoop.tmp.dir配置生成个文件,这里我配置的是/usr/local/hadoop-2.6.0/tmp, 然后将/usr/local/hadoop-2.6.0/tmp拷贝到Slave1的/usr/local/hadoop-2.6.0/下。

    1. [root@mach40]#scp   -r     /home/hadoop2.6/tmp/     mach41:/home/hadoop2.6

    【第二种单独格式化 ,再启用备份NN,自动同步tmp文件 (两者均可任选其一) 】

    2.8 格式化HDFS   #在mach40上执行命令:

    1. [root@mach40]#hadoop  namenode  -format  MacheMaster

    2 .[root@mach41]# hdfs namenode -bootstrapStandby

    3. 两个节点依次执行启动:

     [root@mach40]# hadoop-daemon.sh start namenode

     [root@mach41]# hadoop-daemon.sh start namenode

    4 .再关闭:

     [root@mach40]# hadoop-daemon.sh stop namenode

     [root@mach41]# hadoop-daemon.sh stop namenode

    ----------------------------------------------------------------------------------------------------------------  

    2.9启动HDFS(在mach40上执行)

    1. [root@mach40]#sbin/start-dfs.sh

    复制代码

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

    1. [root@mach41]#start-yarn.sh

    2. [root@mach40]#sbin/yarn-daemon.sh start resourcemanager

    复制代码

    到此,hadoop-2.6.0配置完毕,可以统计浏览器访问:

    1. http://mach40:50070

    2. NameNode 'Master:9000' (active)

    3. http://mach41:50070

    4. NameNode 'Slave1:9000' (standby)

    复制代码

    验证HDFS HA 首先向hdfs上传一个文件

    1. [root@mach40]#hadoop fs -put /etc/profile /profile

    2. [root@mach40]#hadoop fs -ls /

    复制代码

    然后再kill掉active的NameNode

    1. [root@mach40]#kill -9 <pid of NN>

    复制代码

    通过浏览器访问:http://mach41:50070 NameNode 'mach41:9000' (active) 这个时候mach41上的NameNode变成了active 在执行命令:

    1. [root@mach41]#hadoop fs -ls /

    2. -rw-r--r--   3 root supergroup       1926 2014-02-06 15:36 /profile

    复制代码

    刚才上传的文件依然存在!!! 手动启动那个挂掉的NameNode

    1. [root@mach40]#sbin/hadoop-daemon.sh start namenode

     

    复制代码

    验证YARN: 运行一下hadoop提供的demo中的WordCount程序:

    1. [root@mach40]#hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-x.x.x.jar wordcount /profile /out

    复制代码

    hadoop HA集群搭建完成  

     

    转载请注明原文地址: https://ju.6miu.com/read-40263.html

    最新回复(0)