Hadoop高可用集群搭建

Hadoop集群配置

配置文件功能
hadoop.env.sh配置Hadoop运行所需的环境变量
yarn.env.sh配置Yarn运行所需的环境变量
core-site.xmlHadoop核心全局配置文件
hdfs-site.xmlHDFS配置文件,继承core-site.xml配置文件
mapred-site.xmlMapReduce配置文件,继承core-site.xml配置文件
yarn-site.xmlYarn配置文件,继承core-site.xml配置文件

Hadoop节点对应进程

hadoop01hadoop02hadoop03
NodeManagerNodeManagerNodeManager
NameNodeNameNode
DataNodeDataNodeDataNode
JournalNodeJournalNodeJournalNode
QuorumPeerMainQuorumPeerMainQuorumPeerMain
ResourceManagerResourceManager

DFSZKFailoverController

DFSZKFailoverController

Hadoop配置

        一、配置虚拟机

                1.新建虚拟机:hadoop01 hadoop02 hadoop03

                2.配置host映射

192.168.26.137 hadoop01
192.168.26.133 hadoop02
192.168.26.134 hadoop03

               3.配置三台虚拟机间免密登录

                (1)生成密钥

ssh-keygen

                (2)拷贝密钥到其他节点

ssh-copy-id hadoop01
ssh-copy-id hadoop02
ssh-copy-id hadoop03

                (3)验证是否拷贝成功

ssh hadoop01
ssh hadoop02
shh hadoop03

        二、Hadoop安装

                1.下载并上传Hadoop安装包

                2.解压Hadoop安装包

tar -zxvf hadoop-2.4.1.tar.gz 

                3.将解压后的文件移动到指定文件夹下

mv hadoop-2.4.1 /export/software/

                4.修改相关配置

                        (1)修改core-site.xml

<configuration>
        <!--指定hdfs连接地址,集群模式(高可用)-->
        <property>
                <name>fs.defaultFS</name>
                <value>hdfs://cluster</value>
        </property>
        <property>
                <name>hadoop.tmp.dir</name>
                <value>/export/software/hadoop-2.4.1/tmp</value>
        </property>
        <property>
                <name>hadoop.native.lib</name>
                <value>false</value>
        </property>
        <!-- 指定ZooKeeper集群的地址和端口。注意,数量一定是奇数,且不少于三个节点-->
        <property>
                 <name>ha.zookeeper.quorum</name>
                 <value>hadoop01:2181,hadoop02:2181,hadoop03:2181</value>
        </property>
</configuration>

                        (2)修改hdfs-site.xml

<configuration>
        <!--指定HDFS副本的数量,不能超过机器节点数-->
        <property>
                <name>dfs.replication</name>
                <value>3</value>
        </property>
        <!-- 为namenode集群定义一个services name -->
        <property>
                <name>dfs.nameservices</name>
                <value>cluster</value>
        </property>
        <!-- nameservice 包含哪些namenode,为各个namenode起名 -->
        <property>
                <name>dfs.ha.namenodes.cluster</name>
                <value>nn01,nn02</value>
        </property>
        <!-- 名为nn01的namenode的rpc地址和端口号,rpc用来和datanode通讯 -->
        <property>
                <name>dfs.namenode.rpc-address.cluster.nn01</name>
                <value>hadoop01:9000</value>
        </property>
        <!--名为nn01的namenode的http地址和端口号,用来和web客户端通讯 -->
        <property>
                <name>dfs.namenode.http-address.cluster.nn01</name>
                <value>hadoop01:50070</value>
        </property>
        <!-- 名为nn02的namenode的rpc地址和端口号,rpc用来和datanode通讯 -->
        <property>
                <name>dfs.namenode.rpc-address.cluster.nn02</name>
                <value>hadoop02:9000</value>
        </property>
        <!--名为nn02的namenode的http地址和端口号,用来和web客户端通讯 -->
        <property>
                <name>dfs.namenode.http-address.cluster.nn02</name>
                <value>hadoop02:50070</value>
        </property>
        <!-- namenode间用于共享编辑日志的journal节点列表 -->
        <property>
                <name>dfs.namenode.shared.edits.dir</name>
                <value>qjournal://hadoop01:8485;hadoop02:8485;hadoop03:8485/cluster</value>
        </property>
        <!-- journalnode 上用于存放edits日志的目录 -->
        <property>
                <name>dfs.journalnode.edits.dir</name>
                <value>/export/data/hadoop/journaldata</value>
        </property>
        <!-- 指定该集群出现故障时,是否自动切换到另一台namenode -->
        <property>
                <name>dfs.ha.automatic-failover.enabled</name>
                <value>true</value>
        </property>
        <!-- 配置失败自动切换实现方式 -->
        <property>
                <name>dfs.client.failover.proxy.provider.cluster</name>
          
  
 <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
        </property>
        <!-- 一旦需要NameNode切换,使用ssh方式进行操作 -->
        <property>
                  <name>dfs.ha.fencing.methods</name>
                  <value>sshfence
                        shell(/bin/true)
                  </value>
        </property>
        <!-- 如果使用ssh进行故障切换,使用ssh通信时用的密钥存储的位置 -->
        <property>
                <name>dfs.ha.fencing.ssh.private-key-files</name>
                <value>/root/.ssh/id_rsa</value>
        </property>
        <!-- connect-timeout超时时间 -->
        <property>
                <name>dfs.ha.fencing.ssh.connect-timeout</name>
                <value>30000</value>
        </property>
        <property>
                <name>dfs.name.dir</name>
                <value>/export/software/hadoop-2.4.1/tmp/dfs/name</value>
        </property>
        <property>
                <name>dfs.data.dir</name>
                <value>/export/software/hadoop-2.4.1/tmp/dfs/data</value>
        </property>
        <property>
                <name>dfs.webhdfs.enabled</name>
                <value>true</value>
        </property>
</configuration>

                        (3)修改yarn-site.xml

<configuration>
 
<!-- Site specific YARN configuration properties -->
        <!-- 启用Resource Manager HA高可用性 -->
        <property>
                <name>yarn.resourcemanager.ha.enabled</name>
                <value>true</value>
        </property>
        <!-- NodeManager上运行的附属服务,默认是mapreduce_shuffle -->
        <property>
                <name>yarn.nodemanager.aux-services</name>
                <value>mapreduce_shuffle</value>
        </property>
        <!-- 指定resourcemanager的名字 -->
        <property>
                <name>yarn.resourcemanager.cluster-id</name>
                <value>yrc</value>
        </property>
        <!-- 使用了2个resourcemanager,分别指定Resourcemanager的地址 -->
        <property>
                <name>yarn.resourcemanager.ha.rm-ids</name>
                <value>rm1,rm2</value>
        </property>
        <!-- 指定rm1的地址  -->
        <property>
                <name>yarn.resourcemanager.hostname.rm1</name>
                <value>hadoop01</value>
        </property>
        <!-- 指定rm2的地址  -->
        <property>
                <name>yarn.resourcemanager.hostname.rm2</name>
                <value>hadoop02</value>
        </property>
        <!-- 指定zookeeper集群机器 -->
        <property>
                <name>yarn.resourcemanager.zk-address</name>
                <value>hadoop01:2181,hadoop02:2181,hadoop03:2181</value>
        </property>
 
</configuration>

                         (4)修改mapred-site.xml(该文件不存在,需要手动创建)

<configuration>
        <!-- 采用yarn作为mapreduce的资源调度框架 -->
        <property>
                <name>mapreduce.framework.name</name>
                <value>yarn</value>
        </property>
</configuration>

                        (5)修改slaves文件

hadoop01
hadoop02
hadoop03

                        (6)修改hadoop-env.sh和yarn-env.sh文件,指定jdk的地址

export JAVA_HOME=/export/software/jdk1.8.0_161

                        (7)配置环境变量

vi /etc/profile

export HADOOP_HOME=/export/software/hadoop

export PATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH

                        (8)将文件复制到hadoop02和hadoop03上

scp -r /export/software/hadoop-2.4.1 hadoop02:/export/software/hadoop-2.4.1/
scp -r /export/software/hadoop-2.4.1 hadoop03:/export/software/hadoop-2.4.1/

        三、Hadoop启动

                1.启动journalnode(三台虚拟机都需要启动)

hadoop-daemon.sh start journalnode

                2.格式化

hadoop namenode -format
hdfs zkfc -formatZK

                3.将hadoop文件夹下的tmp文件传到hadoop02

scp -r /export/software/hadoop-2.4.1/tmp hadoop02:/export/software/hadoop-2.4.1/

                4.启动Hadoop

start-all.sh

                5.查看进程

 

 

                 6.测试namenode高可用

        (1)在hadoop-01上kill掉namenode进程,然后通过浏览器查看hadoop-02的状态,发现状态变为active,说明高可用测试成功
        (2)重新启动hadoop-01的namenode进程,sh start-dfs.sh,浏览器访问hadoop-01,此时hadoop-01的状态为standby

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值