HadoopHA集的搭建(5个节点)
特别说明,做⼤数据需要特别好的电脑配置,处理器⾄少i5吧,i5-8300H,显卡尽量GTX的,GTX1050,内存得有8G吧(我的是16G)软件准备:jdk-1.8.0_191;hadoop-2.8.5;zookeeper-3.4.12,软件下载可以就不说了,直接去官⽹下载即可
系统准备:Centos7 64位
⼀、集规划:
主机名              IP                                  安装软件                                运⾏进程
cluster-1          192.168.79.130              jdk,hadoop                          NameNode、DFSZKFailoverController(zkfc)
cluster-2          192.168.79.133              jdk,hadoop                          NameNode、DFSZKFailoverController(zkfc)
cluster-3          192.168.79.131              jdk,hadoop                            ResourceManager
cluster-4          192.168.79.134              jdk,hadoop                            ResourceManager
cluster-5          192.168.79.135              jdk,hadoop,zookeeper
DataNode,NodeManager,JournalNode,OuorumPeerMain
cluster-6          192.168.79.136              jdk,hadoop,zookeeper
DataNode,NodeManager,JournalNode,OuorumPeerMain
cluster-7          192.168.79.137              jdk,hadoop,zookeeper
DataNode,NodeManager,JournalNode,OuorumPeerMain
cluster-8          192.168.79.138              jdk,hadoop,zookeeper
DataNode,NodeManager,JournalNode,OuorumPeerMain
cluster-9          192.168.79.139              jdk,hadoop,zookeeper
DataNode,NodeManager,JournalNode,OuorumPeerMain
⼆、前期准备
1、修改Linux的主机名(每台虚拟机均要修改),命令:vi /etc/sysconfig/network
# Created by anaconda
NETWORKING=yes
HOSTNAME=cluster-1
2、将集IP和主机名映射加⼊到每台虚拟机的/etc/hosts⽂件下,命令:vi /etc/hosts
127.0.0.1  localhost localhost.localdomain localhost4 localhost4.localdomain4
::1        localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.79.131 cluster-1
192.168.79.130 cluster-3
192.168.79.133 cluster-2
192.168.79.134  cluster-4
192.168.79.135  cluster-5
192.168.79.136  cluster-6
192.168.79.137  cluster-7
192.168.79.138  cluster-8
192.168.79.139  cluster-9
注意:是每台虚拟机,集下的每台虚拟机均要写⼊ip和主机名映射
3、关闭防⽕墙
centos7关闭防⽕墙命令:systemctl stop firewalld(启动⾃然是start)
centos7查看防⽕墙状态命令:systemctl status firewalld
4、配置⾃⾝免密登录
命令:ssh-keygen -t rsa
后⾯的直接enter,不⽤输⼊内容,root⽬录下会⽣成⼀个.ssh的⽂件夹
cd .ssh下,会有id_rsa和id_rsa.pub的⽂件,需要新建⼀个⽂件(利⽤fileZilla新建⽂件也⾏),⽂件名为:authorized_keys
进⼊.ssh⽂件夹下,输⼊命令:cat id_isa.pub >> authorized_keys
就把秘钥配置成功了,就实现了⾃⾝免密登录,可以利⽤命令:cat authorized_keys查看⾥⾯内容
5、其它虚拟机的免密登录
需要在第⼀台虚拟机(这⾥主机名是:cluster-1)下免密登录其它虚拟机,使⽤命令:(以cluster-2为例)
免密配置的好处是:可以在第⼀台虚拟机下安装配置好软件,直接利⽤scp命令传到集的其它虚拟机下,免得其它虚拟机⼜得安装配置,浪费时间。
ssh-copy-id cluster-2
6、windows下hosts⽂件的配置
到C:\Windows\System32\drivers\etc⽬录下的hosts,以管理员⾝份打开它,添加集IP和映射关系进
去,如下所⽰:
192.168.79.131 cluster-1
192.168.79.130 cluster-3
192.168.79.133  cluster-2
192.168.79.134  cluster-4
192.168.79.135  cluster-5
192.168.79.136  cluster-6
192.168.79.137  cluster-7
192.168.79.138 cluster-8
192.168.79.139 cluster-9
三、软件安装(只在⼀台虚拟机进⾏操作,其它虚拟机利⽤scp命令进⾏复制即可)
1、JDK安装(简说)(在cluster-1上操作,其它进⾏复制即可)
解压,配置环境变量,这⾥我是解压到/usr/local/下
配置完后,利⽤命令:java -version查看是否安装成功!
在将jdk复制到其它8台虚拟机下,命令如下:(必须cd /usr/local/⽬录下操作)
[root@cluster-1 ~]# cd /usr/local/
[root@cluster-1 local]# scp -r jdk1.8.0_191/ cluster-2:/usr/local/
2、hadoop安装(在cluster-1上操作,其它进⾏复制即可)
将下载好的hadoop-2.8.解压到/usr/local/⽬录下
⽂件配置:hadoop的配置⽂件全部在hadoop-2.8.5/etc/hadoop/⽬录下
(1)环境变量配置:
将hadoop添加到系统环境变量中,如下所⽰:
unset -f pathmunge
export JAVA_HOME=/usr/local/jdk1.8.0_191
export HADOOP_HOME=/usr/local/hadoop-2.8.5
export CLASSPATH=.:$CLASSPATH:$JAVA_HOME/lib
export PATH=$PATH:/usr/bin:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
可以把这段copy到其它虚拟机下的环境变量下即可,别忘了这⼀步: source /etc/profile (2)、修改hadoo-env.sh,配置JAVA环境,命令: vi hadoop-env.sh
到JAVA_HOME,原来⾏如下:
export JAVA_HOME={JAVA_HOME}
修改后,如下所⽰:
export JAVA_HOME=/usr/local/jdk1.8.0_191
(3)修改l⽂件,命令: l
<configuration>
<!-- 指定hdfs的nameservice为ns1 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://ns1/</value>
</property>
<!-- 指定hadoop临时⽬录 -->
<property>
<name&p.dir</name>
<value>/usr/local/hadoop-2.8.5/tmp</value>
</property>
<!-- 指定zookeeper地址 -->
<property>
<name&keeper.quorum</name>
<value>cluster-5:2181,cluster-6:2181,cluster-7:2181,cluster-8:2181,cluster-9:2181</value>
</property>
</configuration>
(3)、修改l⽂件,命令: l
<configuration>
<!--指定hdfs的nameservice为ns1,需要和l中的保持⼀致 -->
<property>
<name>dfs.nameservices</name>
<value>ns1</value>
</property>
<!-- ns1下⾯有两个NameNode,分别是nn1,nn2 -->
<property>
<name>dfs.ha.namenodes.ns1</name>
<value>nn1,nn2</value>
</property>
hadoop分布式集搭建
<!-- nn1的RPC通信地址 -->
<property>
<name>dfs.namenode.1</name>
<value>cluster-1:9000</value>
</property>
<!-- nn1的http通信地址 -->
<!-- nn1的http通信地址 -->
<property>
<name>dfs.namenode.1</name>
<value>cluster-1:50070</value>
</property>
<!-- nn2的RPC通信地址 -->
<property>
<name>dfs.namenode.2</name>
<value>cluster-2:9000</value>
</property>
<!-- nn2的http通信地址 -->
<property>
<name>dfs.namenode.2</name>
<value>cluster-2:50070</value>
</property>
<!-- 指定NameNode的元数据在JournalNode上的存放位置 -->
<property>
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://cluster-5:8485;cluster-6:8485;cluster-7:8485;cluster-8:8485;cluster-9:8485/ns1</value> </property>
<!-- 指定JournalNode在本地磁盘存放数据的位置 -->
<property>
<name>dfs.journalnode.edits.dir</name>
<value>/usr/local/hadoop-2.8.5/journaldata</value>
</property>
<!-- 开启NameNode失败⾃动切换 -->
<property>
<name>dfs.abled</name>
<value>true</value>
</property>
<!-- 配置失败⾃动切换实现⽅式 -->
<property>
<name>dfs.client.failover.proxy.provider.ns1</name>
<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property>
<!-- 配置隔离机制⽅法,多个机制⽤换⾏分割,即每个机制暂⽤⼀⾏-->
<property>
<name>dfs.hods</name>
<value>
sshfence
shell(/bin/true)
</value>
</property>
<!-- 使⽤sshfence隔离机制时需要ssh免登陆 -->
<property>
<name>dfs.ha.fencing.ssh.private-key-files</name>
<value>/root/.ssh/id_rsa</value>
</property>
<!-- 配置sshfence隔离机制超时时间 -->
<property>
<name>dfs.ha.t-timeout</name>
<value>30000</value>
</property>
<!-- 节点超时时间的配置 -->
<property>
<name&heck.interval</name>
<value>2000</value>
</property>
<property>
<name>dfs.heartbeat.interval</name>
<value>1</value>
</property>
<!-- 冗余数据块⾃动删除时间的设置 -->
<property>
<name>dfs.blockreport.intervalMsec</name>
<value>10000</value>
<value>10000</value>
<description>Determines block reporting interval in milliseconds.</description>
</property>
</configuration>
(4)修改l⽂件(这⾥需要将l改为l,
使⽤命令:l)
<configuration>
<!-- 指定mr框架为yarn⽅式 -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
(5)修改l⽂件,命令: l
<configuration>
<!-- Site specific YARN configuration properties -->
<!-- 开启RM⾼可⽤ -->
<property>
<name&abled</name>
<value>true</value>
</property>
<!-- 指定RM的cluster id -->
<property>
<name&sourcemanager.cluster-id</name>
<value>yrc</value>
</property>
<!-- 指定RM的名字 -->
<property>
<name&-ids</name>
<value>rm1,rm2</value>
</property>
<!-- 分别指定RM的地址 -->
<property>
<name&1</name>
<value>cluster-3</value>
</property>
<property>
<name&2</name>
<value>cluster-4</value>
</property>
<!-- 指定zk集地址 -->
<property>
<name&sourcemanager.zk-address</name>
<value>cluster-5:2181,cluster-6:2181,cluster-7:2181,cluster-8:2181,cluster-9:2181</value>
</property>
<property>
<name&demanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
</configuration>
(6)修改slaves
(slaves是指定⼦节点的位置,因为要在cluster-1上启动HDFS、在cluster-3启动yarn,所以cluster-1上的slaves⽂件指定的是datanode的位置,cluster-3上的slaves⽂件指定的是nodemanager的位置)