Hadoop HA搭建

hadoop HA部署

说明:
    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状态
    2.hadoop-2.2.0中依然存在一个问题,就是ResourceManager只有一个,存在单点故障,hadoop2.5.1开启RM高用后可以解决这个问题,有两个ResourceManager,一个是Active,一个是Standby,状态由zookeeper进行协调

集群规划:
主机名        IP地址                  安装的软件                      运行的进程
node1      192.168.40.143    jdk,hadoop                    NameNode,DFSZKFailoverController
node2      192.168.40.144    jdk,hadoop,zookeeper    NameNode,DFSZKFailoverController,DataNode,NodeManager,QuorumPeerMain,JournalNode
node3      192.168.40.145    jdk,hadoop,zookeeper    DataNode,NodeManager,ResourceManager,QuorumPeerMain,JournalNode
node4      192.168.40.140    jdk,hadoop,zookeeper    DataNode,NodeManager,ResourceManager,QuorumPeerMain,JournalNode

1.准备环境,四台虚拟机,64位CentOS6.5系统,hadoop版本2.5.1
    192.168.40.143
    192.168.40.144
    192.168.40.145
    192.168.40.140
2.配置hosts
  在/etc/hosts下配置端口映射
  192.168.40.143 node1
  192.168.40.144 node2
  192.168.40.145 node3
  192.168.40.140 node4
3.安装jdk1.7.0_79
4.建立hadoop运行账号hello(四台机器一样)
5.使用hadoop用户操作:ssh远程免密码登陆
6.在node2,node3,node4上安装zookeeper(详细安装步骤略,见前面文章)
7.安装配置hadoop集群(在node1上操作)    
    7.1下载并解压hadoop安装包
        tar -zxvf hadoop-2.5.1-x64.tar.gz
    7.2修改配置文件(hadoop2.0所有的配置文件都在$HADOOP_HOME/etc/hadoop目录下)
        #将hadoop添加到环境变量中
        vim /etc/profile
        export HADOOP_HOME=/home/hello/app/hadoop-2.5.1
        export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin

7.2.1修改core-site.xml
            <configuration>
                <!-- 指定hdfs的nameservice为ns1 -->
                <property>
                    <name>fs.defaultFS</name>
                    <value>hdfs://ns1/</value>
                </property>
                <!-- 指定hadoop临时目录,tmp这个目录需要提前建立好 -->
                <property>
                    <name>hadoop.tmp.dir</name>
                    <value>/home/hello/app/hadoop-2.5.1/tmp</value>
                </property>
                <!-- 指定zookeeper地址 -->
                <property>
                    <name>ha.zookeeper.quorum</name>
                    <value>node2:2181,node3:2181,node4:2181</value>
                </property>
            </configuration>
        
        7.2.2修改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>node1:9000</value>
                </property>
                <!-- nn1的http通信地址 -->
                <property>
                    <name>dfs.namenode.http-address.ns1.nn1</name>
                    <value>node1:50070</value>
                </property>
                <!-- nn2的RPC通信地址 -->
                <property>
                    <name>dfs.namenode.rpc-address.ns1.nn2</name>
                    <value>node2:9000</value>
                </property>
                <!-- nn2的http通信地址 -->
                <property>
                    <name>dfs.namenode.http-address.ns1.nn2</name>
                    <value>node2:50070</value>
                </property>
                <!-- 指定NameNode的元数据在JournalNode上的存放位置 -->
                <property>
                    <name>dfs.namenode.shared.edits.dir</name>
                    <value>qjournal://node2:8485;node3:8485;node4:8485/ns1</value>
                </property>
                <!-- 指定JournalNode在本地磁盘存放数据的位置 -->
                <property>
                    <name>dfs.journalnode.edits.dir</name>
                    <value>/home/hello/app/hadoop-2.5.1/journaldata</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
                        shell(/bin/true)
                    </value>
                </property>
                <!-- 使用sshfence隔离机制时需要ssh免登陆 -->
                <property>
                    <name>dfs.ha.fencing.ssh.private-key-files</name>
                    <value>/home/hello/.ssh/id_rsa</value>
                </property>
                <!-- 配置sshfence隔离机制超时时间 -->
                <property>
                    <name>dfs.ha.fencing.ssh.connect-timeout</name>
                    <value>30000</value>
                </property>
            </configuration>
        
        7.2.3修改mapred-site.xml
            <configuration>
                <!-- 指定mr框架为yarn方式 -->
                <property>
                    <name>mapreduce.framework.name</name>
                    <value>yarn</value>
                </property>
            </configuration>    
        
        7.2.4修改yarn-site.xml
            <configuration>
                    <!-- 开启RM高可用 -->
                    <property>
                       <name>yarn.resourcemanager.ha.enabled</name>
                       <value>true</value>
                    </property>
                    <!-- 指定RM的cluster id -->
                    <property>
                       <name>yarn.resourcemanager.cluster-id</name>
                       <value>yrc</value>
                    </property>
                    <!-- 指定RM的名字 -->
                    <property>
                       <name>yarn.resourcemanager.ha.rm-ids</name>
                       <value>rm1,rm2</value>
                    </property>
                    <!-- 分别指定RM的地址 -->
                    <property>
                       <name>yarn.resourcemanager.hostname.rm1</name>
                       <value>node3</value>
                    </property>
                    <property>
                       <name>yarn.resourcemanager.hostname.rm2</name>
                       <value>node4</value>
                    </property>
                    <!-- 指定zk集群地址 -->
                    <property>
                       <name>yarn.resourcemanager.zk-address</name>
                       <value>node2:2181,node3:2181,node4:2181</value>
                    </property>
                    <property>
                       <name>yarn.nodemanager.aux-services</name>
                       <value>mapreduce_shuffle</value>
                    </property>
            </configuration>
            
        7.2.5修改slaves
            node2
            node3
            node4
                
        7.2.6修改hadoop-env.sh
            export JAVA_HOME=/usr/java/jdk1.7.0_79
            
        7.2.7修改yarn-env.sh
            export JAVA_HOME=/usr/java/jdk1.7.0_79

7.3将配置好的hadoop拷贝到其他节点
        scp -r  ./hadoop-2.5.1 [email protected]:/home/hello/app/
        scp -r  ./hadoop-2.5.1 [email protected]:/home/hello/app/
        scp -r  ./hadoop-2.5.1 [email protected]:/home/hello/app/

###注意:严格按照下面的步骤
8.启动集群
    8.1启动zookeeper集群(分别在node2、node3、node4上启动zk)
        cd /home/hello/app/zookeeper-3.4.7
        ./bin/zkServer.sh start
        #查看状态:一个leader,两个follower
        ./bin/zkServer.sh status

8.2启动journalnode(分别在在node2、node3、node4上执行)
        cd /weekend/hadoop-2.5.1
        ./sbin/hadoop-daemon.sh start journalnode
        #运行/usr/java/jdk1.7.0_79/bin/jps命令检验,node2、node3、node4上多了JournalNode进程
        
    8.3格式化HDFS
        #在node1上执行命令:
        ./bin/hdfs namenode -format
        #格式化后会在根据core-site.xml中的hadoop.tmp.dir配置生成个文件,这里我配置的是/home/hello/app/hadoop-2.5.1/tmp,
        #然后将/home/hello/app/hadoop-2.5.1/tmp拷贝到node2的/home/hello/app/hadoop-2.5.1/下。
        scp -r ./tmp/ [email protected]:/home/hello/app/hadoop-2.5.1/
        ##也可以这样,建议hdfs namenode -bootstrapStandby
        
    8.4格式化ZKFC(在node1上执行即可)
        ./bin/hdfs zkfc -formatZK
        
    8.5启动HDFS(在node1上执行)
        ./sbin/start-dfs.sh

8.6启动YARN(分别在node3,node4上执行)
        ./sbin/start-yarn.sh
    
测试集群工作状态的一些指令:
./bin/hdfs dfsadmin -report                           查看hdfs的各节点状态信息
./bin/hdfs haadmin -getServiceState nn1        查看namenode高可用
./bin/yarn rmadmin –getServiceState rm1       查看ResourceManager高可用
./sbin/hadoop-daemon.sh start namenode     单独启动一个namenode进程
./hadoop-daemon.sh start zkfc                     单独启动一个zkfc进程

时间: 2024-08-29 15:55:16

Hadoop HA搭建的相关文章

hadoop HA + HBase HA搭建:

hadoop HA搭建参考:https://www.cnblogs.com/NGames/p/11083640.html (本节:用不到YARN 所以可以不用考虑部署YARN部分) Hadoop 使用分 布式文件系统,用于存储大数据,并使用 MapReduce 来处理.Hadoop 擅长于存储各种格式 的庞大的数据,任意的格式甚至非结构化的处理. Hadoop 的限制: Hadoop 只能执行批量处理,并且只以顺序方式访问数据.这意味着必须搜索整个数据集, 即使是最简单的搜索工作.这一点上,一个

Hadoop HA高可用集群搭建(2.7.2)

1.集群规划: 主机名        IP                安装的软件                            运行的进程 drguo1  192.168.80.149 jdk.hadoop                         NameNode.DFSZKFailoverController(zkfc).ResourceManager drguo2 192.168.80.150  jdk.hadoop                         Nam

Hadoop HA + HBase环境搭建(一)————zookeeper和hadoop环境搭建

版本信息: Hadoop 2.6.3 HBase 1.0.3 JDK 1.8 Zookeeper 3.4.9 集群信息: RDFMaster 192.168.0.41 (Hadoop主节点,zk节点,HBase主节点) RDFSlave01 192.168.0.42 (Hadoop备份主节点,从节点,zk节点,HBase的RegionServer) RDFSlave02 192.168.0.43 (从节点,zk节点,HBase的RegionServer) RDFSlave03 192.168.0

Hadoop HA架构搭建

Hadoop HA架构搭建 共七台服务器,节点角色分配如下: 192.168.133.21 (BFLN-01):namenode ?zookeeper ?journalnade?DFSZKFailoverController192.168.133.23 (BFLN-02):namenode?resourcemanager zookeeper ?journalnade?DFSZKFailoverController192.168.133.24 (BFLN-03):resourcemanager z

Hadoop HA HDFS启动错误之org.apache.hadoop.ipc.Client: Retrying connect to server问题解决

近日,在搭建Hadoop HA QJM集群的时候,出现一个问题,如本文标题. 网上有很多HA的博文,其实比较好的博文就是官方文档,讲的已经非常详细.所以,HA的搭建这里不再赘述. 本文就想给出一篇org.apache.hadoop.ipc.Client: Retrying connect to server错误的解决的方法. 因为在搜索引擎中输入了错误问题,没有找到一篇解决问题的.这里写一篇备忘,也可以给出现同样问题的朋友一个提示. 一.问题描述 HA按照规划配置好,启动后,NameNode不能

Spark HA搭建

正文 下载Spark版本,这版本又要求必须和jdk与hadoop版本对应. http://spark.apache.org/downloads.html tar -zxvf 解压到指定目录,进入conf进行培训.spark-env.sh.template 改为 spark-env.sh,注册 export SPARK_DAEMON_JAVA_OPTS="-Dspark.deploy.recoveryMode=ZOOKEEPER -Dspark.deploy.zookeeper.url=hp01:

ZooKeeper+Hadoop2.6.0的ResourceManager HA搭建

以下为我的操作记录,还未整理格式 hqvm-L118        192.168.1.118        jdk.hadoop                   NameNode.DFSZKFailoverController(zkfc) hqvm-L138        192.168.1.138        jdk.hadoop.zookeeper        NameNode.DFSZKFailoverController(zkfc).DataNode.NodeManager.J

完全分布式模式的Hadoop环境搭建

一.本文说明:本次测试在五台虚拟机系统上进行完全分布式搭建.Hadoop分布式模式是在多台机器上分布式部署,配置非常类似于伪分布式,名称节点和数据节点都分布在不同的主机上,每台数据节点上都有相应的任务调度. 二.环境说明:       虚拟软件:VM10.0       操作系统:Cent Os 6.7       hadoop版本:hadoop-2.7.2       JDK版本:jdk1.8_77备注:基于独立模式基础上搭建,参考文章:独立模式的Hadoop环境搭建. 三.基本环境配置   

hadoop HA 详解

NameNode 高可用整体架构概述 在 Hadoop 1.0 时代,Hadoop 的两大核心组件 HDFS NameNode 和 JobTracker 都存在着单点问题,这其中以 NameNode 的单点问题尤为严重.因为 NameNode 保存了整个 HDFS 的元数据信息,一旦 NameNode 挂掉,整个 HDFS 就无法访问,同时 Hadoop 生态系统中依赖于 HDFS 的各个组件,包括 MapReduce.Hive.Pig 以及 HBase 等也都无法正常工作,并且重新启动 Nam