大数据7.1 - hadoop集群搭建

topology

 

Hadoop2.0 HA 集群搭建步骤

1.1 架构图

 

 

1.2 集群节点分配

  • hadoop1

      Zookeeper

      NameNode(active)

      Resourcemanager (active)

  • hadoop2

      Zookeeper

      NameNode (standby)

  • hadoop3

      Zookeeper

      ResourceManager(standby)

  • hadoop4

      DataNode

      NodeManager

      JournalNode

  • hadoop5

      DataNode

      NodeManager

      JournalNode

  • hadoop6

      DataNode

      NodeManager

      JournalNode

1.3 安装步骤

1.3.1 固化IP

    修改配置文件

      cd /etc/sysconfig/network-scripts #进入网络配置目录

      dir ifcfg* #找到网卡配置文件

      ifcfg-eno16777736  ifcfg-lo

      vi ifcfg-eno16777736

    配置文件内容

      TYPE=Ethernet

      BOOTPROTO=static #改成static,针对NAT

      NAME=eno16777736

      UUID=4cc9c89b-cf9e-4847-b9ea-ac713baf4cc8

      DEVICE=eno16777736

      ONBOOT=yes #开机启动此网卡

      IPADDR=192.168.163.129 #固定IP地址

      NETMASK=255.255.255.0 #子网掩码

      GATEWAY=192.168.163.2 #网关和NAT自动配置的相同,不同则无法登录

      DNS1=192.168.163.2 #和网关相同

    重启网络

      service network restart

      ping www.baidu.com

 

  1.3.2 永久关闭每台机器的防火墙

      systemctl stop firewalld.service #关闭防火墙服务

      systemctl disable firewalld.service #禁止防火墙开启启动

      firewall-cmd --state #检查防火墙状态

  1.3.3 为每台机器配置主机名

    hadoop1,hadoop2 ……

    以及hosts文件

    配置主机名

    执行:vim /etc/hostname 修改为hadoop1~6

    然后执行 hostname 主机名

    达到不重启生效目的

  配置hosts文件

    执行:vim /etc/hosts

    示例:

127.0.0.1 localhost
::1 localhost
192.168.65.121 hadoop1
192.168.65.122 hadoop2
192.168.65.123 hadoop3
192.168.65.124 hadoop4
192.168.65.125 hadoop5
192.168.65.126 hadoop6

 

  1.3.4 通过远程命令将配置好的hosts文件scp到其他5台节点上

    执行:scp /etc/hosts hadoop2:/etc

  1.3.5 为每台机器配置ssh免秘钥登录

    执行:ssh-keygen

    ssh-copy-id root@hadoop1 (分别发送到6台节点上)

    vim /root/.ssh/known_hosts 检查是否配置成功

  1.3.6 为每台机器安装jdk和配置JAVA_HOME

    vim /etc/profile

    在尾行添加

JAVA_HOME=/home/app/jdk1.8.0_65
JAVA_BIN=/home/app/jdk1.8.0_65/bin
HADOOP_HOME=/home/app/hadoop-2.7.1
PATH=$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH
CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export JAVA_HOME JAVA_BIN HADOOP_HOME PATH CLASSPATH

 

 

  1.3.7 前三台机器安装和配置zookeeper

    解压安装包 tar -xvf zookeeper-3.4.8.tar.gz

    进入conf目录 cd zookeeper-3.4.8/conf/

    复制zoo_sample.cfg zoo.cfg:  cp zoo_sample.cfg zoo.cfg

    编辑zoo.cfgvim zoo.cfg

 

    Zookeeper根目录中创建tmp文件夹,tmp文件夹中创建myid文件,编辑文本:12,3

     拷贝整个zookeeper目录到hadoop2hadoop3并修改myid文件分别为1,2

    scp -r zookeeper-3.4.8 hadoop2:/home/app

 

  1.3.8 安装和配置01节点的hadoop

    解压安装包

    cd etc/hadoop

    配置 hadoop-env.sh

    配置jdk安装所在目录

    配置hadoop配置文件所在目录

  1.3.9 配置core-site.xml

<configuration>
<!--用来指定hdfs的老大,ns为固定属性名,表示两个namenode-->
<property>
  <name>fs.defaultFS</name>
  <value>hdfs://ns</value>
</property>
<!--用来指定hadoop运行时产生文件的存放目录-->
<property>
  <name>hadoop.tmp.dir</name>
  <value>/home/app/hadoop-2.7.1/tmp</value>
</property>
<!--执行zookeeper地址-->
<property>
  <name>ha.zookeeper.quorum</name>
  <value>hadoop1:2181,hadoop2:2181,hadoop3:2181</value>
</property>
</configuration>

 

  1.3.10 配置01节点hdfs-site.xml

  

<configuration>
<!--执行hdfs的nameservice为ns,和core-site.xml保持一致-->
<property>
  <name>dfs.nameservices</name>
  <value>ns</value>
</property>
<!--ns下有两个namenode,分别是nn1,nn2-->
<property>
  <name>dfs.ha.namenodes.ns</name>
  <value>nn1,nn2</value>
</property>
<!--nn1 的 RPC 通信地址-->
<property>
  <name>dfs.namenode.rpc-address.ns.nn1</name>
  <value>hadoop1:9000</value>
</property>
<!--nn1的http通信地址-->
<property>
  <name>dfs.namenode.http-address.ns.nn1</name>
  <value>hadoop1:50070</value>
</property>
<!--nn2的RPC通信地址-->
<property>
  <name>dfs.namenode.rpc-address.ns.nn2</name>
  <value>hadoop2:9000</value>
</property>
<!--nn2 的 http 通信地址-->
<property>
  <name>dfs.namenode.http-address.ns.nn2</name>
  <value>hadoop2:50070</value>
</property>
<!--指定namenode的元数据在JournalNode上的存放位置,这样,namenode2可以
 从 jn 集群里获取最新的namenode的信息,达到热备的效果-->
<property>
  <name>dfs.namenode.shared.edits.dir</name>
  <value>qjournal://hadoop4:8485;hadoop5:8485;hadoop6:8485/ns</value>
</property>
<!--指定 JournalNode 存放数据的位置-->
<property>
  <name>dfs.journalnode.edits.dir</name>
  <value>/home/app/hadoop-2.7.1/journal</value>
</property>
<!--开启namenode故障时自动切换-->
<property>
  <name>dfs.ha.automatic-failover.enabled</name>
  <value>true</value>
</property>
<!--配置切换的实现方式-->
<property>
  <name>dfs.client.failover.proxy.provider.ns</name>
  <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property>
<!--配置隔离机制-->
<property>
  <name>dfs.ha.fencing.methods</name>
  <value>sshfence</value>
</property>
<!--配置隔离机制的ssh登录秘钥所在的位置-->
<property>
  <name>dfs.ha.fencing.ssh.private-key-files</name>
  <value>/root/.ssh/id_rsa</value>
</property>
<!--配置namenode数据存放的位置,可以不配置,如果不配置,默认用的是core-site.xml里配置的hadoop.tmp.dir的路径-->
<property>
  <name>dfs.namenode.name.dir</name>
  <value>file:///home/app/hadoop-2.7.1/tmp/namenode</value>
</property>
<!--配置datanode数据存放的位置,可以不配置,如果不配置,默认用的是core-site.xml 里配置的 hadoop.tmp.dir 的路径-->
<property>
  <name>dfs.datanode.data.dir</name>
  <value>file:///home/app/hadoop-2.7.1/tmp/datanode</value>
</property>
<!--配置 block 副本数量-->
<property>
  <name>dfs.replication</name>
  <value>3</value>
</property>
<!--设置hdfs的操作权限,false表示任何用户都可以在hdfs上操作文件-->
<property>
<name>dfs.permissions</name>
<value>false</value>
</property>
</configuration>

 

 

1.3.11 配置 mapred-site.xml

<configuration>
<property>
<!--指定mapreduce运行在yarn上-->
  <name>mapreduce.framework.name</name>
  <value>yarn</value>
</property>
</configuration>

 

1.3.12 配置yarn-site.xml

<configuration>
<!--开启YARN HA -->
<property>
  <name>yarn.resourcemanager.ha.enabled</name>
  <value>true</value>
</property>
  <!--指定两个resourcemanager的名称-->
<property>
  <name>yarn.resourcemanager.ha.rm-ids</name>
  <value>rm1,rm2</value>
</property>
<!--配置rm1,rm2的主机-->
<property>
  <name>yarn.resourcemanager.hostname.rm1</name>
  <value>hadoop1</value>
</property>
<property>
  <name>yarn.resourcemanager.hostname.rm2</name>
  <value>hadoop3</value>
</property>
<!--开启yarn恢复机制-->
<property>
  <name>yarn.resourcemanager.recovery.enabled</name>
  <value>true</value>
</property>
<!--执行rm恢复机制实现类-->
<property>
  <name>yarn.resourcemanager.store.class</name>
  <value>org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore</value>
</property>
<!--配置zookeeper的地址-->
<property>
  <name>yarn.resourcemanager.zk-address</name>
  <value>hadoop1:2181,hadoop2:2181,hadoop3:2181</value>
  <description>For multiple zk services, separate them with comma</description>
</property>
<!--指定YARN HA的名称-->
<property>
  <name>yarn.resourcemanager.cluster-id</name>
  <value>yarn-ha</value>
</property>
<!--指定 yarn 的老大 resoucemanager 的地址-->
<property>
  <name>yarn.resourcemanager.hostname</name>
  <value>hadoop1</value>
</property>
<!--NodeManager获取数据的方式-->
<property>
  <name>yarn.nodemanager.aux-services</name>
  <value>mapreduce_shuffle</value>
</property>
</configuration>

 

1.3.13 配置slaves文件

hadoop4
hadoop5
hadoop6

 

1.3.14 根据配置文件,创建相关的文件夹,用来存放对应数据

在hadoop-2.7.1目录下创建:

①journal目录

②创建tmp目录

③在tmp目录下,分别创建namenode目录和datanode目录

1.3.15 配置 hadoop 的环境变量(可不配)

JAVA_HOME=/home/app/jdk1.8.0_65
JAVA_BIN=/home/app/jdk1.8.0_65/bin
HADOOP_HOME=/home/app/hadoop-2.7.1
PATH=$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH
CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export JAVA_HOME JAVA_BIN HADOOP_HOME PATH CLASSPATH

 

 

1.3.16 通过scp 命令,将hadoop安装目录远程copy到其他5台机器上

  比如向hadoop02节点传输:

  scp -r hadoop-2.7.1 hadoop2:/home/app

1.3.17 启动zookeeper集群

  在Zookeeper安装目录的bin目录下执行:sh zkServer.sh start

1.3.18 格式化zookeeper

  在zkleader节点上执行:

  hdfs zkfc -formatZK,这个指令的作用是在zookeeper集群上生成ha节点 ns节点)

  注:18--24步可以用一步来替代:进入hadoop安装目录的sbin目录,执行: sh start-dfs.sh 。 但建议还是按部就班来执行,比较可靠。

1.3.19 启动journalnode集群

  在456节点上执行:

  切换到hadoop安装目录的sbin目录下,执行:

  sh hadoop-daemons.sh start journalnode

  然后执行jps命令查看进程。

1.3.20 格式化1节点的namenode

  在1节点上执行:

  hadoop namenode -format

1.3.21 启动1节点的namenode

  在 1 节点上执行:

  sh hadoop-daemon.sh start namenode

1.3.22 2节点的namenode节点变为standby namenode节点

  在2节点上执行:

  hdfs namenode -bootstrapStandby

1.3.23 启动 2 节点的 namenode 节点

  在2节点上执行:

  sh hadoop-daemon.sh start namenode

1.3.24 4,5,6节点上启动datanode节点

  在 4,5,6 节点上执行: sh hadoop-daemon.sh start datanode

1.3.25 启动zkfc(启动FalioverControllerActive)

  在1,2节点上执行:

  sh hadoop-daemon.sh start zkfc

 

1.3.26 1节点上启动主Resourcemanager

  在1节点上执行:start-yarn.sh

  启动成功后,4,5,6节点上应该有nodemanager 的进程

1.3.27  3 节点上启动副 Resoucemanager

  在3节点上执行:sh yarn-daemon.sh start resourcemanager

1.4 测试

  输入地址: http://192.168.65.111:50070 ,查看 namenode 的信息,是active状态

   

 

  输入地址:http://192.168.65.22:50070查看namenode的信息,是standby状态

   

 

  然后停掉01节点的namenode,此时发现standbynamenode变为active

 

posted @ 2018-04-09 15:33  项羽齐  阅读(224)  评论(0编辑  收藏  举报