Hadoop高可用集群搭建

Hadoop1

Hadoop1

 Hadoop3

NodeManager

NodeManager

 NodeManager

NameNode

NameNode

DataNode

DataNode

DataNode

DFSZKFailoverController

DFSZKFailoverController

JournalNode

JournalNode

JournalNode

ResourceManager

ResourceManager

QuorumPeerMain

QuorumPeerMain

QuorumPeerMain

1. 配置主机名以及解析(3台)

新建三台虚拟机:hadoop1、hadoop2、hadoop3

查看三台虚拟机ip:ip addr

A.配置host映射

B.配置完成后可以使用ping命令一一测试,看看是够能够正确解析出ip地址,得到目标机器的回应(可以每台机器都测试一下:使用Ctrl + C结束)

C. 在slave1和slave2 上也修改hosts文件,追加内容和步骤1的内容相同,然后重复步骤2 

2. 配置服务器间ssh免密码登陆(3台)

SSH服务配置

A.SSH远程登录功能配置

(1)查看ssh服务是否开启

查看当前机器是否安装了SSH服务:rpm -qa |grep ssh            
查看SSH服务是否启动:ps -e | grep sshd

在这里插入图片描述

如上图所示代表已安装并开启了SSH服务,所以不需要进行额外安装就可以直接远程访问(如果没有安装,则执行:yum install openssh-server 指令进行安装)

2)使用Xshell连接3台虚拟机节点

  • 新建会话

  • B.SSH免密登录设置

    (1)生成公钥密钥对

    在3个节点上分别都执行如下命令:ssh-keygen

  • (注意连续按Enter键确认)

    在root目录下输入:ll -a 可以查看当前目录下的所有文件(包含隐藏文件)。

    然后进入.ssh隐藏目录,输入ls 命令,如图所示:

  • 在图中能够看到包含两个文件分别是私钥和公钥,其中id_rsa为生成的私钥,id_rsa.pub为生成的公钥

  • (2)将子节点的公钥拷贝到主节点并添加进authorized_keys
    在hadoop1、hadoop2、hadoop3节点上执行如下两行命令:

    ssh-copy-id hadoop1
    ssh-copy-id hadoop2
    ssh-copy-id hadoop3


    执行时,到了红色框区域,需要输入yes

  • (3)测试是否成功
    为了测试免密设置是否成功,可执行如下命令:
  • ssh hadoop1
    ssh hadoop2
    ssh hadoop3
  • 注意,要在hadoop1、hadoop2和hadoop3这三台虚拟机上都要操作一次免密操作 

3. 安装hadoop

(1)修改配置文件

A.将hadoop安装包下载、上传、解压、,拷贝到/export/software下

B.修改各配置文件,所有的配置文件在/export/software/hadoop-2.4.1/etc/hadoop目录下

a.修改core-site.xml,内容如下:配置hdfs的端口和zookeeper的地址和端口

[root@hadoop1 zkdata]# cd /export/software/hadoop-2.4.1/etc/hadoop
[root@hadoop1 hadoop]# vi 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>hadoop1:2181,hadoop2:2181,hadoop3:2181</value>
        </property>
</configuration>

b.修改hdfs-site.xml,内容如下:

vi 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>hadoop1:9000</value>
        </property>
        <!--名为nn01的namenode的http地址和端口号,用来和web客户端通讯 -->
        <property>
                <name>dfs.namenode.http-address.cluster.nn01</name>
                <value>hadoop1:50070</value>
        </property>
        <!-- 名为nn02的namenode的rpc地址和端口号,rpc用来和datanode通讯 -->
        <property>
                <name>dfs.namenode.rpc-address.cluster.nn02</name>
                <value>hadoop2:9000</value>
        </property>
        <!--名为nn02的namenode的http地址和端口号,用来和web客户端通讯 -->
        <property>
                <name>dfs.namenode.http-address.cluster.nn02</name>
                <value>hadoop2:50070</value>
        </property>
        <!-- namenode间用于共享编辑日志的journal节点列表 -->
        <property>
                <name>dfs.namenode.shared.edits.dir</name>
                <value>qjournal://hadoop1:8485;hadoop2:8485;hadoop3: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>

c.修改yarn-site.xml,内容如下:

vi 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>hadoop1</value>
        </property>
        <!-- 指定rm2的地址  -->
        <property>
                <name>yarn.resourcemanager.hostname.rm2</name>
                <value>hadoop2</value>
        </property>
        <!-- 指定zookeeper集群机器 -->
        <property>
                <name>yarn.resourcemanager.zk-address</name>
                <value>hadoop1:2181,hadoop2:2181,hadoop3:2181</value>
        </property>

</configuration>

d.修改mapred-site.xml(该文件不存在,需要手动创建),cp mapred-site.xml.template mapred-site.xml,内容如下:

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

e.修改slaves文件,内容如下:

hadoop1
hadoop2
hadoop3

f.修改hadoop-env.shyarn-env.sh文件,指定jdk的地址

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

g.配置hadoop环境变量,vi /etc/profile  内容如下(三台虚拟机都要有)

[root@hadoop1 hadoop]# vi /etc/profile

h.source /etc/profile三台虚拟机都操作

[root@hadoop1 hadoop]# source /etc/profile

(2)拷贝复制到其它机器(hadoop2、hadoop3)

[root@hadoop1 hadoop]# scp -r /export/software/hadoop-2.4.1/etc/hadoop hadoop2:/export/software/hadoop-2.4.1/etc/
[root@hadoop1 hadoop]# scp -r /export/software/hadoop-2.4.1/etc/hadoop hadoop3:/export/software/hadoop-2.4.1/etc/

(3)进入:

[root@hadoop1 hadoop]# cd /export/data/
[root@hadoop1 data]# ls
hadoop  zookeeper
[root@hadoop1 data]# hdfs zkfc -formatZK

ls 查看是否有zookeeper(即进行过格式化zookeeper),若没有则进行格式化zookeeper:

命令行输入:      hdfs zkfc -formatZK 

(3)启动Zookeeper(三台虚拟机都进行

[root@hadoop1 data]# zkServer.sh start

(4)进入

[root@hadoop1 hadoop]# cd /export/data/
[root@hadoop1 data]# ls
hadoop  zookeeper
[root@hadoop1 data]# cd hadoop/
[root@hadoop1 hadoop]# ls
journaldata
[root@hadoop1 hadoop]# rm -rf journaldata/

删除文件 :

(4)启动journalnode

[root@hadoop1 hadoop]# hadoop-daemon.sh start journalnode

(5)进入

[root@hadoop1 hadoop]# cd /export/software/hadoop-2.4.1/tmp/

删除文件

[root@hadoop1 hadoop]# rm -rf *

进入

ls    查看是否有dfs,有则进行删除:(三台虚拟机都需操作

 (6)格式化hadoop

[root@hadoop1 hadoop]# hadoop namenode -format

   ls  查看tmp下是否有dfs,将有dfs的tmp文件拷贝到hadoop2虚拟机上

[root@hadoop1 hadoop]# scp -r /export/software/hadoop-2.4.1/tmp hadoop2:/export/software/hadoop-2.4.1/

(3)启动hadoop

[root@hadoop1 hadoop]# start-all.sh

 若yarn的resourcemanager没开启,则单独开启

命令行输入      yarn-daemon.sh start resourcemanager

(4) 查看每台节点的进程

 

 

(5)通过Web界面查看hadoop信息

(6)测试namenode高可用

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值