Hadoop HA高可用集群环境搭建(CenOS7)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_35488412/article/details/78595271

Hadoop HA 集群简介:

       HDFS集群中NameNode 存在单点故障(SPOF)。对于只有一个NameNode的集群,如果NameNode机器出现意外情况,将导致整个集群无法使用,直到NameNode 重新启动。

      影响HDFS集群不可用主要包括以下两种情况:一是NameNode机器宕机,将导致集群不可用,重启NameNode之后才可使用;二是计划内的NameNode节点软件或硬件升级,导致集群在短时间内不可用。

      为了解决上述问题,Hadoop给出了HDFS的高可用HA方案:HDFS通常由两个NameNode组成,一个处于active状态,另一个处于standby状态。Active NameNode对外提供服务,比如处理来自客户端的RPC请求,而Standby NameNode则不对外提供服务,仅同步Active NameNode的状态,以便能够在它失败时快速进行切换。

(如果在搭建过程中某个地方出现问题,可参考其他同类文章在那一部分的说明来解决问题。)

集群部署规划:

zhishao准备四个以上节点,本文采用的是centos7系统,如果用Ubuntu系统搭建也可参考,具体centos命令如yum之类注意修改成Ubuntu适用命令。

主机

 

系统

ip地址

软件

进程

node1

 

centos7

192.168.206.129

jdk8,hadoop

NameNodeDFSZKFailoverController(zkfc)ResourceManager

node2

 

centos7

192.168.206.130

jdk8,hadoop

NameNodeDFSZKFailoverController(zkfc)ResourceManager

node3

 

centos7

192.168.206.131

jdk8,hadoop,zookeeper

DataNodeNodeManagerJournalNodeQuorumPeerMain

node4

 

centos7

192.168.206.132

jdk8,hadoop,zookeeper

DataNodeNodeManagerJournalNodeQuorumPeerMain

node5

 

centos7

192.168.206.133

jdk8,hadoop,zookeeper

DataNodeNodeManagerJournalNodeQuorumPeerMain

(其中  Hadoop版本:2.8.2 ;  zookeeper版本:3.4.11

搭建过程

搭建过程主要包含三个主要阶段

ssh等基本环境配置、zookeeper集群搭建、hadoop集群搭建

一、ssh等基本环境配置

1. VMware虚拟机静态ip配置:(根据自身情况决定是否需要配置,此项最后配置亦可。)

修改配置文件

vi /etc/sysconfig/network-scripts/ifcfg-ens33

修改内容修改BOOTPROTO=static     (改为静态)

 若没有则增加IPADDR=192.168.……   (定义ip地址,和网关一致)

在虚拟机的Linux系统设置中增加一个网卡,默认nat配置即可。

2. 添加hadoop用户:

sudo useradd -m hadoop -s /bin/bash

这条命令创建了可以登陆的 hadoop用户,并使用/bin/bash作为shell

sudo passwd hadoop

可为 hadoop 用户增加管理员权限,方便部署

 sudo adduser hadoop sudo

最后注销当前用户(点击屏幕右上角的齿轮,选择注销),返回登陆界面。在登陆界面中选择刚创建的 hadoop用户进行登陆。

3. 修改hostname, hosts 

vi /etc/hostname 删除原有内容自定义主机名保存
修改vi /etc/hosts 添加集群所有节点ip的映射(头两行不修改)如下图配置完测试能否ping



4. 安装SSH、配置SSH无密码登陆

检查每个虚拟机上是否安装了ssh 和 启动了sshd服务 
rpm -qa | grep ssh 

如果没有安装请执行下面的代码:

yum -y inst cd .ssh

生成ssh密钥:

 ssh localhost 测试,输入yes和密码确认,会自动生成.ssh文件,然后exit退出。

cd .ssh

ssh-keygen -t rsa   #遇到提示一路回车就行

 #会看到 id_rsa id_rsa.pub两文件前为私钥,后为公钥

cat id_rsa.pub >> authorized_keys #把公钥内容追加到authorized_keys文件中

chmod 600 authorized_keys #修改文件权限,重要不要忽略

至此本机可以无密码登陆自己了,测试 ssh localhost 不再提示输入密码,如果不正确请仔细检查接下来配置无密码登录其他节点

scp ~/.ssh/id_rsa.pub hadoop@Slave2:/home/hadoop/

scp ~/.ssh/id_rsa.pub hadoop@Slave3:/home/hadoop/(将密匙发送到其他节点)

登录其他节点操作

mkdir ~/.ssh # 如果不存在该文件夹需先创建,若已存在则忽略

cat ~/id_rsa.pub >> ~/.ssh/authorized_keys

rm ~/id_rsa.pub # 用完就可以删掉了

chmod 600 authorized_keys  //注意添加权限

然后测试本机节点是否能ssh 到其他节点

5. JDK安装:

下载jdk安装包,并解压安装。 

设置环境变量,我使用本地环境变量,默认安装的jdk/usr/lib/java
vi ~/.bashrc 
添加环境变量:

export JAVA_HOME=/usr/lib/java

export CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib:$CLASSPATH

export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH

使用:source ~/.bashrc 使之生效。

完成后测试jdk安装是否成功

 java –version

以上几个部分的配置请细心配置仔细检查


二、zookeeper集群搭建

下载zookeeper安装包解压安装在/usr/local或其他位置。

zookeeper安装目录的conf目录下新建zoo.cfg文件

# The number of milliseconds of each tick

tickTime=2000

# The number of ticks that the initial

# synchronization phase can take

initLimit=10

# The number of ticks that can pass between

# sending a request and getting an acknowledgement

syncLimit=5

# the directory where the snapshot is stored.

# do not use /tmp for storage, /tmp here is just

# example sakes.

#dataDir=/tmp/zookeeper 在你的主机中建立相应的目录

dataDir=/home/hadoop/zookeeper-3.4.9/data

# the port at which the clients will connect

clientPort=2181

# the maximum number of client connections.

# increase this if you need to handle more clients

#maxClientCnxns=60

#

# Be sure to read the maintenance section of the

# administrator guide before turning on autopurge.

#

# http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance

#

# The number of snapshots to retain in dataDir

#autopurge.snapRetainCount=3

# Purge task interval in hours

# Set to "0" to disable auto purge feature

#autopurge.purgeInterval=1

server.1=node3:2888:3888

server.2=node4:2888:3888

server.3=node5:2888:3888

node3,node4,node5zookeeper-3.4.9/data下创建一个myid文件,文件内容写一个数字 要和上面配置中的信息一直如 
server.1=node3:2888:3888 表示要在node3myid文件中写一个1的数字 
server.2=node4:2888:3888 表示要在node4myid文件中写一个2的数字 
server.3=node5:2888:3888 表示要在node5myid文件中写一个3的数字

最后将该文件发送到其他准备安装zookeeper的节点上。并进行hadoop用户授权:sudo chown –R hadoop ./zookeeper


三、Hadoop安装:

在文末附有配置详解的链接,如有疑问请前往查看。注解 注意要删除掉

hadoop/etc/hadoop/ 目录下配置文件修改

(注意配置中的路径根据自己情况修改,注释要删掉。)

core-site.xml配置

<configuration>
    <property>  
        <name>fs.defaultFS</name>  
        <value>hdfs://cluster</value>  
    </property>  
    <property>  
        <name>hadoop.tmp.dir</name>  
        <value>/usr/local/hadoop-2.8.2/tmp</value>  
    </property> 
    <property>  
        <name>ha.zookeeper.quorum</name>  
        <value>node3:2181,node4:2181,node5:2181</value>  
    </property>
</configuration>

其中的cluster命名是在dfs-site.xml中配置的。Tmp.dir一般在hadoop/tmp,第三个zookeeper的位置,zk默认端口2181,这三个情况都根据自己情况填写。


hdfs-site.xml配置

<configuration>

    <property>  

        <name>dfs.nameservices</name>  

        <value>cluster</value>  //集群名称

    </property>  

    <property>  

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

        <value>node1,node2</value>   //名称节点的名字

    </property>


  <property>  

        <name>dfs.namenode.rpc-address.cluster.node1</name>  

        <value>node1:9000</value>  

    </property>  

    <property>  

        <name>dfs.namenode.http-address.cluster.node1</name>  

        <value>node1:50070</value>  

    </property>  

    <property>  

        <name>dfs.namenode.rpc-address.cluster.node2</name>  

        <value>node2:9000</value>  

    </property>  

    <property>  

        <name>dfs.namenode.http-address.cluster.node2</name>  

        <value>node2:50070</value>  

    </property>  

    <property>     //journalnode集群信息 

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

        <value>qjournal://node3:8485;node4:8485;node5:8485/cluster</value>  

    </property>  

    <property>     //journalnode存储位置 

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

        <value>/home/hadoop/hadoop-2.7.3/journaldata</value>  

    </property>  

    <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>  

    <property>  

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

        <value>  

            sshfence  

            shell(/bin/true)  

        </value>  

    </property>  

    <property>

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

        <value>/home/hadoop/.ssh/id_rsa</value>   //hadoop用户

    </property>  

    <property>  

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

        <value>30000</value>  

    </property>  

</configuration>


在文末附有配置详解的链接,如有疑问请前往查看。注解注意要删除掉


mapred-site.xml配置

<configuration>

    <property>  

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

        <value>yarn</value>  

    </property>  

</configuration>

yarn-site.xml配置

<configuration>

<property>  

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

       <value>true</value>  

    </property>  

    <property>  

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

       <value>yrc</value>  

    </property>  

    <property>  

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

       <value>rm1,rm2</value>  

    </property>  

    <property>  

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

       <value>node1</value>  

    </property>  

    <property>  

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

       <value>node2</value>  

    </property>

    <property>  

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

       <value>node3:2181,node4:2181,node5:2181</value>  

    </property>  

    <property>  

       <name>yarn.nodemanager.aux-services</name>  

       <value>mapreduce_shuffle</value>  

    </property>

</configuration>

slaves配置

node3

node4

node5

配置文件修改完毕

注意上述配置项请仔细核对、斟酌

发送hadoop文件至其他节点

cd /usr/local

sudo rm -r ./hadoop/tmp # 删除 Hadoop临时文件

sudo rm -r ./hadoop/logs/* # 删除日志文件

tar -zcf ~/hadoop.master.tar.gz ./hadoop # 先压缩再复制

cd ~

scp ./hadoop.master.tar.gz node2:/home/hadoop

再在其他节点上解压该压缩包

sudo rm -r /usr/local/hadoop # 删掉旧的(如果存在)

sudo tar -zxf ~/hadoop.master.tar.gz -C /usr/local

sudo chown -R hadoop /usr/local/Hadoop

关闭防火墙

systemctl stop firewalld.service # 关闭firewall

systemctl disable firewalld.service # 禁止firewall开机启动

四、启动步骤

1.先启动zookeeper服务,分别在node3,node4,node5上执行  zkServer.sh start

2.启动journalnode,分别在node3,node4,node5上执行 hadoop-daemon.sh start journalnode 注意只有第一次需要这么启动,之后启动hdfs会包含journalnode

3.格式化HDFS,node1上执行hdfs namenode -format注意:格式化之后需要把tmp目录拷给node2(如果tmp文件存在的话不然node2namenode起不来)

4.格式化ZKFC,node1上执行hdfs zkfc -formatZK

5.启动HDFS,node1上执行,start-dfs.sh

6.启动YARN,node1上执行,start-yarn.sh

7.node2resourcemanager需要手动单独启动: yarn-daemon.sh start resourcemanager


至此,启动流程结束,对照本文开头的表格看进程是否正常启动。如有问题,仔细ssh是否正常、检查配置文件是否修改正确。

配置文件详解网址:http://blog.csdn.net/ltliyue/article/details/51144381


问题记录:

举例列出了一些安装过程中可能会碰到的问题。

1. yum命令时候报错:Loaded plugins: fastestmirror

Loading mirror speeds from cached hostfile

解决方法:取消fastestmirror插件的使用。如下:

[hadoop@Slave1 ~]$ sudo vi /etc/yum/pluginconf.d/fastestmirror.conf

[hadoop@Slave1 ~]$ sudo vi /etc/yum.conf

2.ssh配置完记得赋予权限

可通过系统日志查看原因: sudo tail /var/log/secure -n 20(权限问题导致)

解决方法: chmod 700 ~/.ssh

chmod 600 ~/.ssh/authorized_keys

3.ssh 故障

OpenSSH的人都知ssh会把你每个你访问过计算机的公钥(public key)都记录在~/.ssh/known_hosts当下次访问相同计算机时,OpenSSH会核对公钥。如果公钥不同,OpenSSH会发出警告,避免你受到DNS Hijack之类的攻击。因此我们现在只需要删除knows_hosts文件中所对应的IP节点的公钥,然后再ssh IP地址就可以了   sudo vi ~/.ssh/known_hosts (删除出错记录)

4.解决 MR程序由于时间同步引起的错误

sudo yum install -y ntp

sudo ntpdate asia.pool.ntp.org   #时间同步命令

5.多次格式化DataNode未启动

通过查看日志诊断是否是clusterID不一致导致的如果是查看hdfs-site中关于tmp.dir的地址(一般在/Hadoop/tmp/dfs/namedate/current),去该目录下找到,将VERSION里的ClusterID修改成namenodedatanode一致

如果datenode未启动则注意是否格式化每次配置完都需要格式化dfs系统





猜你喜欢

转载自blog.csdn.net/qq_35488412/article/details/78595271