ZOOKEEPER + HADOOP HA 集群的搭建

ZOOKEEPER + HADOOP HA 集群的搭建

1,首先我们了解下Hadoop是什么?

Hadoop是一个由Apache基金会所开发的分布式系统基础架构。
用户可以在不了解分布式底层细节的情况下,开发分布式程序。充分利用集群的威力进行高速运算和存储。

2, Hadoop的作用?

Hadoop实现了一个分布式文件系统(Hadoop Distributed File System),简称HDFS。HDFS有高容错性的特点,并且设计用来部署在低廉的(low-cost)硬件上;而且它提供高吞吐量(high throughput)来访问应用程序的数据,适合那些有着超大数据集(large data set)的应用程序。HDFS放宽了(relax)POSIX的要求,可以以流的形式访问(streaming access)文件系统中的数据。
Hadoop的框架最核心的设计就是:HDFS和MapReduce。HDFS为海量的数据提供了存储,则MapReduce为海量的数据提供了计算。 —— [ 百度百科 ]

3,好了话不多说,直接上流程!!!!!!
 3.1 环境需要:
     1,zookeeper-3.4.10
     2,hadoop-2.8.2
4 ,安装 Zookeeper
4.1首先我们上传安装包
4.2 上传完毕后,命令行输入:ll -a 查看安装包是否存在
4.3 检查无误后,开始解压:tar -zxvf zookeeper-3.4.10.tar.gz  -C /usr/hadoop/
为了安装包便于管理我这里已经创建好了安装的目录:在根目录下创建 /usr/hadoop 把解压后的文件夹放到hadoop文件夹里
4.4 打开配置文件复制一份配置文件:
    cd /usr/hadoop/zookeeper-3.4.10/conf
    cp zoo_sample.cfg zoo.cfg 
    vim zoo.cfg
4.5 创建数据目录和日志目录
    mkdir -p /usr/hadoop/zookeeper-3.4.10/zkData/data
    mkdir -p /usr/hadoop/zookeeper-3.4.10/zkData/logs
4.6 数据目录下创建节点编号
    /usr/hadoop/zookeeper-3.4.10/zkData/data/myid
    在node01中myid文件中写入1即可
4.7 修改zk配置项
    // 这里的路径是上面穿件的myid的绝对路径
    dataDir=/usr/hadoop/zookeeper-3.4.10/zkData/data 

    在最后添加:
        server.1=node01:2888:3888 
        server.2=node02:2888:3888 
        server.3=node03:2888:3888 
    注意:node03 是每台服务器名字,2888,是内部通讯端口号,3888是外部通讯端口号
4.8 分发修改后的安装文件 scp      
4.9 修改其它机器的myid值
4.9.1 在所有机器配置环境变量:
        set zk env
        #zookeeper 
        export ZOOKEEPER_HOME=/usr/hadoop/zookeeper-3.4.10
        export PATH=$PATH:$ZOOKEEPER_HOME/bin
4.9.2 让配置文件生效:
        source /etc/profile
4.9.3 启动zk集群:
        依次在不同节点输入   zkServers.sh start
4.9.4 检查各个个点是否正常,Zookeeper集群采用半数投票机制,我们是三台机器,节点服务依次为:两个follower(跟随者状态),一个leader(领导者状态)
到此,zookeeper搭建启动完毕!!!
5 ,安装 Hadoop
上传,解压缩的步骤跟Zookeeper时候的相同,这里就不多说了!!
6, 配置 Hadoop HA
6.1 机器配置清单(4节点)
![这里写图片描述](https://img-blog.csdn.net/20180806214827992?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3hpYW9iYW8zMzA2/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)

6.2 修改core-site.xml

    <configuration> 
            <property> 
                <name>fs.defaultFS</name>
                <value>hdfs://cluster1</value> 
            </property> 
            【这里的值指的是默认的HDFS路径。当有多个HDFS集群同时工作时,集群名称在这里指定!该值来自于hdfs-site.xml中的配置】 
            <property> 
                <name>hadoop.tmp.dir</name> 
                <value>/usr/hadoop/hadoop-2.8.2/tmp</value> 
            </property> 
            【这里的路径默认是NameNode、DataNode、JournalNode等存放数据的公共目录。用户也可以自己单独指定这三类节点的目录。】 

            <property> 
                <name>ha.zookeeper.quorum</name> 
                <value>Centos7Slave00:2181,Centos7Slave01:2181,Centos7Slave02:2181</value> 
            </property> 
            【这里是ZooKeeper集群的地址和端口。注意,数量一定是奇数,且不少于三个节点】
     </configuration>

6.3 修改hdfs-site.xml

    <configuration>
             <property> 
                <name>dfs.replication</name> 
                <value>3</value> 
              </property> 
                【指定DataNode存储block的副本数量。默认值是3个,我们现在有4个DataNode,该值不大于4即可。】 

              <property> 
                  <name>dfs.nameservices</name>
                  <value>cluster1</value> 
              </property> 
                【使用federation时,HDFS集群别名。名字可以随便起,多个集群时相互不重复即可】 

              <property> 
                  <name>dfs.ha.namenodes.cluster1</name> 
                  <value>Centos7Slave00,Centos7Slave01</value> 
              </property> 
                【指定该集群的namenode的机器】 

              <property> 
                  <name>dfs.namenode.rpc-address.cluster1.Centos7Slave00</name> 
                  <value>Centos7Slave00:9000</value>     
              </property> 
                【指定hadoop100的RPC地址】 

              <property> 
                  <name>dfs.namenode.http-address.cluster1.Centos7Slave00</name> 
                  <value>Centos7Slave00:50070</value> 
              </property> 
                【指定hadoop100的http地址】 

              <property> 
                  <name>dfs.namenode.rpc-address.cluster1.Centos7Slave01</name> 
                  <value>Centos7Slave01:9000</value> 
              </property> 
                 【指定hadoop101的RPC地址】 

              <property> 
                  <name>dfs.namenode.http-address.cluster1.Centos7Slave01</name> 
                  <value>Centos7Slave01:50070</value> 
              </property> 
                【指定hadoop101的http地址】 

              <property> 
                  <name>dfs.namenode.shared.edits.dir</name>                   
                  <value>qjournal://Centos7Slave01:8485;Centos7Slave02:8485;Centos7Slave03:8485/cluster1 </value>
              </property> 
                【指定该集群的两个NameNode共享edits文件目录时,使用的JournalNode集群信息】 

              <property> 
                  <name>dfs.ha.automatic-failover.enabled.cluster1</name> 
                  <value>true</value> 
              </property> 
                【指定该集群是否启动自动故障恢复,即当NameNode出故障时,是否自动切换到另一台NameNode】 

              <property> 
                  <name>dfs.client.failover.proxy.provider.cluster1</name>                                                                                    
                  <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider </value> 
              </property> 
                【指定该集群出故障时,哪个实现类负责执行故障切换】 

              <property> 
                  <name>dfs.ha.fencing.methods</name> 
                  <value>sshfence</value> 
              </property> 
                【一旦需要NameNode切换,使用ssh方式进行操作】 

              <property> 
                  <name>dfs.ha.fencing.ssh.private-key-files</name> 
                  <value>/root/.ssh/id_rsa</value> 
              </property> 
                【如果使用ssh进行故障切换,使用ssh通信时用的密钥存储的位置】 

              <property> 
                  <name>dfs.ha.fencing.ssh.connect-timeout</name> 
                  <value>30000</value> 
              </property> 
                【connect-timeout连接超时】 

              <property>
                 <name>dfs.permissions</name>
                 <value>false</value>
              </property>
                【如果为“true”,则启用HDFS中的权限检查。如果为“false”,则关闭权限检查,但所有其他行为都没有改变。从一个参数值切换到另一个参数值不会改变模式,所有者或文件或目录组】
    </configuration>

6.4 修改 mapred-site.xml

    <configuration> 
            <property> 
                <name>mapreduce.framework.name</name> 
                <value>yarn</value> 
            </property> 
                【指定运行mapreduce的环境是yarn,与hadoop1截然不同的地方】 
    </configuration>

6.5 修改 yarn-site.xml

    <configuration> 
            <property>
                <name>yarn.resourcemanager.ha.enabled</name> 
                <value>true</value> 
            </property> 
                【启动HA高可用性】 

            <property> 
                <name>yarn.resourcemanager.cluster-id</name> 
                <value>yrc</value> 
            </property> 
                【指定resourcemanager的名字】 

            <property> 
                <name>yarn.resourcemanager.ha.rm-ids</name> 
                <value>rm1,rm2</value> 
            </property> 
                【使用了2个resourcemanager,分别指定Resourcemanager的地址】 

            <property> 
                <name>yarn.resourcemanager.hostname.rm1</name> 
                <value> hadoop102</value> 
            </property> 
                【自定ResourceManager1的地址】 

            <property> 
                <name>yarn.resourcemanager.hostname.rm2</name> 
                <value> hadoop103</value> 
            </property> 
                【自定ResourceManager2的地址】 

            <property> 
                <name>yarn.resourcemanager.zk-address</name> 
                <value>hadoop104:2181,hadoop105:2181,hadoop106:2181</value> 
            </property> 
                【制定Zookeeper机器】 

            <property> 
                <name>yarn.nodemanager.aux-services</name> 
                <value>mapreduce_shuffle</value> 
            </property> 
                【默认】 
</configuration>

6.6 指定DataNode Slaves
修改hadoop slaves 配置文件: vim /usr/hadoop/hadoop-2.8.2/etc/hadoop/slaves
增加你的data的机器名字:
Centos7Slave01
Centos7Slave01
Centos7Slave01

7 启动过程
    1,启动zk集群
            启动命令: ./zkServer.sh start 
            #查看zk节点服务状态:./zkServer.sh status

    2, 分别启动journalnode
            启动命令: sbin/hadoop-daemon.sh start journalnode
            #查看节点状态: jsp
            #显示节点名称:  JournalNode

    3, 格式化namenode 第一台服务器执行(Centos7Slave01), 
            执行命令:  hsfs-namenode-format

    4, 格式化 ZKFC     第一台服务器执行(Centos7Slave01), 
            执行命令:  hdfs-zkfc-formatZK

    5,  把第一台namenode(Centos7Slave00) 文件信息同步到 第二台namenode(Centos7Slave01)
            先启动第一台(Centos7Slave00)的namenode:
                执行命令: hadoop-daemon.sh start namenode
            复制第一台namenode(Centos7Slave00)的tmp整个目录到 第二台namenode(Centos7Slave01)相同的路径下,保证文件同步
        5.1  数据同步
         执行命令:  hdfs namenode bootstrapstandby          

    6,  启动NameNode 和 DataNode
             执行命令:  start-dfs.sh
             #查看节点状态: jps
             #显示节点名称:  
                 Centos7Slave00(namenode),
                 Centos7Slave01(namenode,datanode),
                 Centos7Slave00(datanode),
                 Centos7Slave00(datanode) 

    7,启动yarn 第一台服务器执行(Centos7Slave00)
             执行命令:  start-yarn.sh 
             #查看节点状态: jps 
             #显示节点名称:  ResourceManager + NodeManager     
                 Centos7Slave00(ResourceManager),
                 Centos7Slave01(NodeManager),
                 Centos7Slave00(NodeManager),
                 Centos7Slave00(NodeManager)                

    8, 启动ZookeeperFailoverController(第一台和第二台执行(Centos7Slave00和Centos7Slave01))
            执行命令:  hadoop-daemon.sh start zkfc (前两台服务器分别执行)                             
            #查看节点状态:  jps
            #显示节点状态:  DFSZKFailoverController

    9, 验证
            Hdfs管理控制台
            Centos7Slave00:50070 active
            Centos7Slave01:50070 standby
            Mr管理控制台
            Centos7Slave00:8088

到此Zookeeper + Hadoop HA 配置完成!!!!!

需要注意:如果主机访问不到 hadoop或者MR的WEB UI 界面 :
关闭防火墙,
Linux主机名添加到 win的houst 文件中,
有无G掉的节点,
端口是否开放

##

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值