博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
HADOOP的HA部署方案
阅读量:6860 次
发布时间:2019-06-26

本文共 12492 字,大约阅读时间需要 41 分钟。

hot3.png

一、准备服务器环境

1.1、服务器规划

Hadoop2 HA Cluster
Host IP NameNode JournalNode FailoverController DataNode
nn1 192.168.50.221 Y Y Y N
nn2 192.168.50.222 Y Y Y N
dn1 192.168.50.225 N Y
N Y
dn2 192.168.50.226 N N N Y
dn3 192.168.50.227 N N N Y

ZooKeeper机器部署,请看ZooKeeper哪一篇,做HADOOP的HA,需要提前部署ZK

1.2、软件版本

Linux: CentOS2.6.32-431.el6.x86_64

Hadoop:2.6.0(建议升级为2.7.1+)

ZooKeeper:3.4.6

JDK/JRE: 1.7.0_75 (64bit)

1.3、系统环境配置

1、修改主机名称

第一步临时修改

#hostname     nn1

第二步修改永久修改,防止下次重启后被重置

修改/etc/sysconfig/network中的hostname

NETWORKING=yes

HOSTNAME= NameNode1

第三步做DNS映射,可以直接访问主机名则访问的部本机IP地址

修改/etc/hosts文件

在最后增加一行,如

192.168.50.221    nn1

第四步重启电脑

重启后,ping nn1

如果能ping成功则配置完成

其他机器依次配置即可

2、关闭防火墙

命令:service iptables stop

同时关闭防火墙自启动服务:chkconfig iptables off

查看是否关闭了自启动:chkconfig --list | grep iptables ,如果全部是off则表示都关闭了

查看状态:service iptables status

# service iptables status

Firewall is stopped.

3、设置ssh

修改/etc/ssh/sshd_config root帐户修改

#vim /etc/ssh/sshd_config

取消如下注释

RSAAuthentication yes

PubkeyAuthentication yes

AuthorizedKeysFile .ssh/authorized_keys

修改后,重启ssh: service sshd restart

切换到普通用户下进行设置

生成SSH通讯密钥,有这个证书后,hadoop启动时就可以免密码登录了

a、先在每台机器上面执行ssh-keygen -t rsa -P "",密码都为空,主要是每次hadoop启动时需要认证,如果有密码每次都需要输入,实在麻烦,所以密码留空,回车即可,执行后,将产生两个文件,位于~/.ssh文件夹中

b、然后相互执行 ssh-copy-id userName@machineName,此功能可以快速把自己的公钥发给对方,并自动追加

[root  ~]# ssh nn1

进入后,exit退出SSH即可

这里注意,有时候还是需要你输入密码,这里有可能是authorized_keys的权限问题,我们进一步设置权限,chmod 600 authorized_keys即可

如果对于其他计算机则需要把你的公钥发送给对方,你就可以无密码登录了,认证了

二、安装ZooKeeper Cluster

参见:《Zookeeper部署文档.doc

三、安装Hadoop2 HA Cluster步骤

3.1、初始化系统配置

3.1.1、创建应用帐户和组(可选,建议新建一个专门的用户)

为了系统安全建议每个对外应用都创建单独的帐户和组,具体创建方法请网上搜索。

#新建组

[root  ~]# groupadd  bdata

#添加用户和分组

[root  ~]# useradd -g bdata bdata

#设置密码

[root  ~]# passwd bdata

Changing password for user bdata.

New password:

BAD PASSWORD: it does not contain enough DIFFERENT characters

BAD PASSWORD: is a palindrome

Retype new password:

passwd: all authentication tokens updated successfully.

3.1.2、修改hosts映射

#vim /etc/hosts

192.168.50.221  nn1

192.168.50.222  nn2

192.168.50.223  HMaster1

192.168.50.224  HMaster2

192.168.50.225  dn1

192.168.50.226  dn2

192.168.50.227  dn3

192.168.50.225  jn1

192.168.50.226  jn2

192.168.50.227  jn3

192.168.50.228  Zookeeper1

192.168.50.229  Zookeeper2

192.168.50.230  Zookeeper3

3.1.2、安装JDK/JRE

HADOOP2是使用JAVA语言开发的软件,所以必须要安装JREJDK才可以运行,为了测试方便建议安装JDK(生产环境安装JRE即可),JDK安装步骤(略)

3.2、安装HADOOP2

3.2.1、单机安装HADOOP2

下载地址:

http://mirrors.cnnic.cn/apache/hadoop/common/hadoop-2.6.0/hadoop-2.6.0.tar.gz

官方提供的发布包是基于32位系统编译的,Hadoop依赖的so库也是32位版本,因此在64位操作系统部署会提示一些警告信息,建议下载源码包自行编译64位版本HADOOP2

 

配置环境变更

export HADOOP_HOME=/hom/bdata/software/hadoop-2.6.0

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

 

配置$HADOOP_HOME/etc/hadoop/core-site.xml

<?xml version="1.0" encoding="UTF-8"?>

<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>

<configuration>

    <property>

<!-- 配置HDFS集群名称及HDFS存储的路径 -->

           <name>fs.defaultFS</name>

           <value>hdfs://dfscluster</value>

    </property>

    <property>

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

            <value>/home/bdata/datadir/hadoopinfo/journal</value>

     </property>

     <property>

            <name>ha.zookeeper.quorum</name>

<!-- zookeeper集群地址列表,以逗号分隔 -->

         <value>Zookeeper1:2181,Zookeeper2:2181,Zookeeper3:2181</value>

     </property>

</configuration>

配置$HADOOP_HOME/etc/hadoop/hdfs-site.xml

<?xml version="1.0" encoding="UTF-8"?>

<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>

<configuration>

    <property>

<!-- HDFS冗余数量 -->

        <name>dfs.replication</name>

        <value>3</value>

    </property>

 

    <property>

<!-- HDFS集群名称,必须与core-site.xml中的名称一致 -->

        <name>dfs.nameservices</name>

        <value>dfscluster</value>

    </property>

    <property>

<!--

 dfs.ha.namenodes.[nameservices id]

hdfs namenode集群列表

 -->

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

        <value>nn1,nn2</value>

    </property>

    <property>

<!--

namenode rpc端口

dfs.namenode.rpc-address.[nameservices id].[host id]

-->

        <name>dfs.namenode.rpc-address.dfscluster.nn1</name>

<!-- hostname/IP -->

        <value>nn1:9000</value>

    </property>

    <property>

         <name>dfs.namenode.rpc-address.dfscluster.nn2</name>

         <value>nn2:9000</value>

    </property>

    <property>

<!--

namenode http端口(Web后台访问端口)

dfs.namenode.http-address.[nameservices id].[host id]

-->

         <name>dfs.namenode.http-address.dfscluster.nn1</name>

         <value>nn1:50070</value>

    </property>

    <property>

         <name>dfs.namenode.http-address.dfscluster.nn2</name>

         <value>nn2:50070</value>

    </property>

  <property><!-- 毫秒,最大时间,超过后客户端会断开和服务器的连接,默认1000ms,网络不好的情况下,可以设置大一些  -->        <name>ipc.client.connection.maxidletime </name>        <value>1000</value>    </property>
     <!-- 客户端连接重试次数(在网络情况不好的情况下,有必要设置大一些,默认是10次,每次1000ms) -->    <property>         

<name>ipc.client.connect.max.retries</name>         

<value>30</value>    

</property>

    <property>

<!--

QJM实现Hadoop HA

配置JournalNode集群列表以分号分隔

qjournal://[hostname/IP:port];[hostname/IP:port]/[nameservices id]

 -->

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

        <value>qjournal://jn1:8485;jn2:8485;jn3:8485/dfscluster</value>

   </property>

   <property>

<!-- 客户端检查到namenode失效自动切换 -->

<name>dfs.client.failover.proxy.provider.dfscluster</name> <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>

   </property>

   <property>

<!--

namenode切换时需要把fence standby的节点(禁止写入EditLog 

有两种方式实现:

1、使用Hadoop使用Java实现的方式(推荐)

2、编写shell脚本

-->

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

        <value>sshfence</value>

  </property>

  <property>

<!-- 配置本地私钥地址(配置SSH无密码登录时生成的私钥) -->

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

        <value>/home/bdata/.ssh/id_rsa</value>

  </property>

  <property>

<!-- 配置sshfence超时时间单位毫秒 -->

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

        <value>10000</value>

  </property>

  <property>

<!-- 是否启用Failover自动切换(true:启用false:禁用) -->

       <name>dfs.ha.automatic-failover.enabled</name>

             <value>true</value>

    </property>

    <property>

<!-- 指定namespace存入目录 -->

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

        <value>/home/bdata/datadir/hadoop/name</value>

    </property>

    <property>

<!-- 指定datanode数据存放目录 -->

        <name>dfs.datanode.data.dir</name>

        <value>/home/bdata/datadir/hadoop/data</value>

    </property>

</configuration> 

单节点配置,下面有HA的配置方式,如果不使用资源管理器,可以不配置

#vim yarn-site.xml

<property>

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

    <value>nn1</value>

</property>

<property>

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

    <value>mapreduce_shuffle</value>

</property>

<property>

    <name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>

    <value>org.apache.hadoop.mapred.ShuffleHandler</value>

</property>

<property>

    <name>yarn.resourcemanager.scheduler.address</name>

    <value>nn1:8030</value>

</property>

<property>

    <name>yarn.resourcemanager.resource-tracker.address</name>

    <value>nn1:8031</value>

</property>

<property>

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

    <value>nn1:8032</value>

</property>

<property>

    <name>yarn.resourcemanager.admin.address</name>

    <value>nn1:8033</value>

</property>

<property>

    <name>yarn.resourcemanager.webapp.address</name>

    <value>nn1:8001</value>

</property>

 

YARN HA配置,如果不使用资源管理器,可以不配置

#vim yarn-site.xml

 

       <?xml version="1.0"?>

<!--

  Licensed under the Apache License, Version 2.0 (the "License");

  you may not use this file except in compliance with the License.

  You may obtain a copy of the License at

 

    http://www.apache.org/licenses/LICENSE-2.0

 

  Unless required by applicable law or agreed to in writing, software

  distributed under the License is distributed on an "AS IS" BASIS,

  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

  See the License for the specific language governing permissions and

  limitations under the License. See accompanying LICENSE file.

-->

<configuration>

 

<!-- Site specific YARN configuration properties -->

 

       <property>

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

        <value>mapreduce_shuffle</value>

    </property>

    <property>

        <name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>

        <value>org.apache.hadoop.mapred.ShuffleHandler</value>

    </property>

 

       <property> 

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

               <value>true</value>

               <description>启用YarnHA配置方式</description>

       </property>

              <property>  

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

              <value>yarn-ha</value>

              <description>配置HA的集群名称,在ZK中显示也为该名称</description>

       </property>

       <property>  

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

              <value>rm1,rm2</value>

               <description>设置HA多个RM的名称,便于下面引用配置</description>

       </property>

       <property>  

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

              <value>nn1</value>

              <description>配置rm1对应的主机</description>

       </property>

       <property>  

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

              <value>nn2</value>

              <description>配置RM2对应的主机名称</description>

       </property>

      

       <!-- 启用RM重启的功能-->

      

       <property> 

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

              <value>true</value>

              <description>启用RM重启的功能,默认为false</description>

       </property>

       <property> 

              <name>yarn.resourcemanager.store.class</name> 

              <value>org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore</value>

              <description>用于状态存储的类,采用ZK存储状态类</description>

       </property>

      

       <property>  

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

              <value>dn1:2181,dn2:2181,dn3:2181</value>

              <description>由于数据需要存储在ZK中,通过ZK来选举active,所以这里需要配置ZK的地址</description>

       </property>

      

      

       <!-- 配置通讯的地址和端口,有多少个RM就配置多少组property -->

       <!-- RM1-->

       <property>

        <name>yarn.resourcemanager.scheduler.address.rm1</name>

        <value>nn1:8030</value>

    </property>

    <property>

        <name>yarn.resourcemanager.resource-tracker.address.rm1</name>

        <value>nn1:8031</value>

    </property>

    <property>

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

        <value>nn1:8032</value>

    </property>

    <property>

        <name>yarn.resourcemanager.admin.address.rm1</name>

        <value>nn1:8033</value>

    </property>

    <property>

        <name>yarn.resourcemanager.webapp.address.rm1</name>

        <value>nn1:8001</value>

              <description>提供给web页面访问的地址,可以查看任务状况等信息</description>

    </property>

      

       <!-- RM2 -->

       <property>

        <name>yarn.resourcemanager.scheduler.address.rm2</name>

        <value>nn2:8030</value>

    </property>

    <property>

        <name>yarn.resourcemanager.resource-tracker.address.rm2</name>

        <value>nn2:8031</value>

    </property>

    <property>

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

        <value>nn2:8032</value>

    </property>

    <property>

        <name>yarn.resourcemanager.admin.address.rm2</name>

        <value>nn2:8033</value>

    </property>

    <property>

        <name>yarn.resourcemanager.webapp.address.rm2</name>

        <value>nn2:8001</value>

    </property></configuration>

添加数据从节点#vim slavesdn1dn2dn3
修改hadoop-env.sh,JAVA_HOME地址export JAVA_HOME=/usr/java/jdk1.7.0_45

3.2.2、集群安装Hadoop

把配置好的hadoop复制到其它节点,这里bdata代表用户

scp -r hadoop bdata@NameNode1:/home/bdata/stoftware/

scp -r hadoop bdata@DataNode1:/home/bdata/stoftware/

scp -r hadoop bdata@DataNode2:/home/bdata/stoftware/

scp -r hadoop bdata@DataNode3:/home/bdata/stoftware/

3.2.3、启动Hadoop集群

3.2.3.1、首次启动(只能运行一次)
  • 1、启动zookeeper集群(必须提前全部启动)

#zkServer.sh start

  • 2、格式化zookeeper(zookeeper建立联系,只有首次启动需要执行这一步)

# hdfs zkfc -formatZK

3、启动所有JournalNode(首次只能单台启动)

#hadoop-daemon.sh start journalnode #启动所有journalnode

4、格式化主NameNode节点

#hdfs namenode -format  //在主namenode上执行格式化命令(保证zookeeper已经启动)

5、启动首个NameNode节点

#hadoop-daemon.sh start namenode //启动主namenode(保证journalnode已经启动,并且是格式化的节点上)

6、同步主NameNode数据到备NameNode

#hdfs namenode -bootstrapStandby //备用namenode同步主namenode数据,在备节点上启动

7、关闭HDFS集群

#stop-dfs.sh

8、启动HDFS集群

#start-dfs.sh

启动后查看相应日志检查启动是否正常,也可通过JPS查看对应的进程是否启动

 

单独启动某个进程

hadoop-daemon.sh start journalnode  //启动journalnode

hadoop-daemon.sh start namenode   //启动namenode

hadoop-daemon.sh start datanode     //启动datanode

hadoop-daemon.sh start zkfc                 //启动DFSZKFailoverController

 

 

3.2.3.2、非首次启动(保证Zookeeper节点正常)

1、关闭HDFS集群

#stop-dfs.sh

2、启动HDFS集群

#start-dfs.sh

 

3.2.4Yarn HA启动和停止

1、启动Yarn HA

主启动所有节点,但是第二个RM节点需要手动启动

#./start-yarn.sh

手动启动standyRM节点,该节点必须手动启动

#./yarn-daemon.sh start resourcemanager

单独启动某一个节点的方式

RM节点

#./yarn-daemon.sh start resourcemanager

NM节点

#./yarn-daemon.sh start nodemanager

 

2、停止Yarn HA

主启动所有节点,但是第二个RM节点需要手动启动

#./stop-yarn.sh

手动启动standyRM节点,该节点必须手动启动

#./yarn-daemon.sh stop resourcemanager

单独启动某一个节点的方式

RM节点

#./yarn-daemon.sh stop resourcemanager

NM节点

#./yarn-daemon.sh stop nodemanager

  • 3、查看任务

yarn application -list 

  • 4、停止任务

yarn application -kill <Application ID>

  • 5、查看状态

yarn application -status <Application ID>

3.3Hadoop集群异常处理

3.3.1、启动指定节点

集群可能因为各种异常导致部分节点失效,需要重启部分节点,相应命令如下:

hadoop-daemon.sh start journalnode  //启动journalnode

hadoop-daemon.sh start namenode   //启动namenode

hadoop-daemon.sh start datanode     //启动datanode

hadoop-daemon.sh start zkfc                 //启动DFSZKFailoverController

3.3.2重新格式化/清空HDFS数据及元数据(慎用)

hdfs zkfc -formatZK

hadoop-daemon.sh start journalnode #启动所有journalnode

hdfs namenode -format  //在主namenode上执行格式化命令(保证zookeeper已经启动)

hadoop-daemon.sh start namenode //启动主namenode(保证journalnode已经启动)

hdfs namenode -bootstrapStandby //备用namenode同步主namenode数据

hadoop-daemon.sh start namenode //启动备用namenode

hadoop-daemon.sh start datanode //启动datanode

转载于:https://my.oschina.net/tearsky/blog/631028

你可能感兴趣的文章
spring常用注解
查看>>
Material Menu
查看>>
Win8 环境变量位置
查看>>
margin负值的应用总结
查看>>
分页查询
查看>>
iLBC
查看>>
Linux 本地yum源搭建和网络yum源搭建
查看>>
HDU 5781 ATM Mechine
查看>>
使用Nginx搭建Tomcat9集群,Redis实现Session共享
查看>>
Extjs4.1 序列化和反序列化
查看>>
iOS self 和 super 学习
查看>>
js的闭包的一个示例说明
查看>>
bin/sh failed with exit code 1
查看>>
《梦幻西游》打响反盗号战役:为2亿玩家提供360安全武器
查看>>
Silverlight面向客户端,HTML5面向Web
查看>>
微软拟向互联网开发商提供免费IIS 服务器
查看>>
seajs和requirejs对比;node初识
查看>>
Python笔记总结week1
查看>>
c#中使用NetCDF存储二维数据的读写操作简单应用
查看>>
linux网络相关命令使用
查看>>