环境准备

编号

主机名

类型

用户

IP

1

master

主节点

root

192.168.231.247

2

slave1

从节点

root

192.168.231.248

3

slave2

从节点

root

192.168.231.249

环境搭建

一、基础配置

        1、安装VMware tools

在Ubuntu操作系统创建hadoop用户输入密码输入不了 ubuntu搭建hadoop_hadoop


在Ubuntu操作系统创建hadoop用户输入密码输入不了 ubuntu搭建hadoop_zookeeper_02


在Ubuntu操作系统创建hadoop用户输入密码输入不了 ubuntu搭建hadoop_zookeeper_03

 将其复制到桌面

在Ubuntu操作系统创建hadoop用户输入密码输入不了 ubuntu搭建hadoop_xml_04


在Ubuntu操作系统创建hadoop用户输入密码输入不了 ubuntu搭建hadoop_ubuntu_05


在Ubuntu操作系统创建hadoop用户输入密码输入不了 ubuntu搭建hadoop_ubuntu_06

         注:遇到提示按 '回车' 键,遇到 'yes/no' 输入yes

安装完成Tools后的效果如图

在Ubuntu操作系统创建hadoop用户输入密码输入不了 ubuntu搭建hadoop_zookeeper_07


        2、修改root密码

在Ubuntu操作系统创建hadoop用户输入密码输入不了 ubuntu搭建hadoop_ubuntu_08

         3、更新 apt,安装vim编译器

apt-get update
apt-get install vim

在Ubuntu操作系统创建hadoop用户输入密码输入不了 ubuntu搭建hadoop_zookeeper_09

在Ubuntu操作系统创建hadoop用户输入密码输入不了 ubuntu搭建hadoop_xml_10

         注:vim 编译器相对于 vi 编译器 对用户来说更友好,使用便捷,且有高亮关键字的功能

        4、安装ssh服务

apt-get install openssh-server

在Ubuntu操作系统创建hadoop用户输入密码输入不了 ubuntu搭建hadoop_hadoop_11

         5、修改ssh配置文件,允许root远程登录

vim /etc/ssh/sshd_config

更改前:

在Ubuntu操作系统创建hadoop用户输入密码输入不了 ubuntu搭建hadoop_ubuntu_12

更改后:

在Ubuntu操作系统创建hadoop用户输入密码输入不了 ubuntu搭建hadoop_ubuntu_13


        注:将 prohibit-password  更改为  yes

        6、去掉初始询问

vi /etc/ssh/ssh_config

更改前:

在Ubuntu操作系统创建hadoop用户输入密码输入不了 ubuntu搭建hadoop_xml_14

更改后:

在Ubuntu操作系统创建hadoop用户输入密码输入不了 ubuntu搭建hadoop_运维_15

  

        7、关闭防火墙

ufw disable
ufw status

在Ubuntu操作系统创建hadoop用户输入密码输入不了 ubuntu搭建hadoop_xml_16

        8、环境配置

(1)修改hosts文件

vim /etc/hosts

在Ubuntu操作系统创建hadoop用户输入密码输入不了 ubuntu搭建hadoop_运维_17


(2)添加环境变量

vim /etc/profile

在Ubuntu操作系统创建hadoop用户输入密码输入不了 ubuntu搭建hadoop_zookeeper_18

(3)解压 jdk

tar -zxvf jdk1.8.0_221.tar.gz -C /usr/local/src/

重命名其名称为 jdk

mv jdk1.8.0_221 jdk

在Ubuntu操作系统创建hadoop用户输入密码输入不了 ubuntu搭建hadoop_运维_19

(4)hadoop配置

tar -zxvf hadoop-2.7.1.tar.gz -C /usr/local/

重命名其名称为hadoop

mv hadoop-2.7.1 hadoop

在Ubuntu操作系统创建hadoop用户输入密码输入不了 ubuntu搭建hadoop_zookeeper_20

在hadoop安装目录下创建 tmp 和 logs目录 

在Ubuntu操作系统创建hadoop用户输入密码输入不了 ubuntu搭建hadoop_zookeeper_21

 在tmp目录下创建 data 和 name 和 journal 目录

在Ubuntu操作系统创建hadoop用户输入密码输入不了 ubuntu搭建hadoop_ubuntu_22

 进入hadoop配置文件目录进行修改配置文件

hadoop-env.sh        core-site.xml        hdfs-site.xml        mapred-site.xml        yarn-site.xml        yarn-env.sh        slaves

其中hadoop-env.sh 与 yarn-env.sh 只需要修改其中的 jdk 路径

hadoop-env.sh

在Ubuntu操作系统创建hadoop用户输入密码输入不了 ubuntu搭建hadoop_hadoop_23

 yarn-env.sh

在Ubuntu操作系统创建hadoop用户输入密码输入不了 ubuntu搭建hadoop_ubuntu_24

        注:yarn-env.sh 文件中jdk路径需要去掉注释,否则无法生效

core-site.xml

<configuration> <property> <name>fs.defaultFS</name> <value>hdfs://mycluster</value> </property> <property> <name>hadoop.tmp.dir</name> <value>/usr/local/hadoop/tmp</value> </property> <property> <name>ha.zookeeper.quorum</name> <value>master:2181,slave1:2181,slave2:2181</value> </property> <property> <name>ha.zookeeper.session-timeout.ms</name> <value>30000</value> <description>ms</description> </property> <property> <name>fs.trash.interval</name> <value>1440</value> </property> </configuration>

hdfs-site.xml

<configuration> <property> <name>dfs.qjournal.start-segment.timeout.ms</name> <value>60000</value> </property> <property> <name>dfs.nameservices</name> <value>mycluster</value> </property> <property> <name>dfs.ha.namenodes.mycluster</name> <value>master,slave1</value> </property> <property> <name>dfs.namenode.rpc-address.mycluster.master</name> <value>master:9000</value> </property> <property> <name>dfs.namenode.rpc-address.mycluster.slave1</name> <value>slave1:9000</value> </property> <property> <name>dfs.namenode.http-address.mycluster.master</name> <value>master:50070</value> </property> <property> <name>dfs.namenode.http-address.mycluster.slave1</name> <value>slave1:50070</value> </property> <property> <name>dfs.namenode.shared.edits.dir</name> <value>qjournal://master:8485;slave1:8485;slave2:8485/mycluster</value> </property> <property> <name>dfs.client.failover.proxy.provider.mycluster</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.permissions.enabled</name> <value>false</value> </property> <property> <name>dfs.support.append</name> <value>true</value> </property> <property> <name>dfs.ha.fencing.ssh.private-key-files</name> <value>/root/.ssh/id_rsa</value> </property> <property> <name>dfs.replication</name> <value>2</value> </property> <property> <name>dfs.namenode.name.dir</name> <value>/usr/local/hadoop/tmp/name</value> </property> <property> <name>dfs.datanode.data.dir</name> <value>/usr/local/hadoop/tmp/data</value> </property> <property> <name>dfs.journalnode.edits.dir</name> <value>/usr/local/hadoop/tmp/journal</value> </property> <property> <name>dfs.ha.automatic-failover.enabled</name> <value>true</value> </property> <property> <name>dfs.webhdfs.enabled</name> <value>true</value> </property> <property> <name>dfs.ha.fencing.ssh.connect-timeout</name> <value>30000</value> </property> <property> <name>ha.failover-controller.cli-check.rpc-timeout.ms</name> <value>60000</value> </property> </configuration>

mapred-site.xml

<configuration> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> <property> <name>mapreduce.jobhistory.address</name> <value>master:10020</value> </property> <property> <name>mapreduce.jobhistory.webapp.address</name> <value>master:19888</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>master</value> </property> <property> <name>yarn.resourcemanager.hostname.rm2</name> <value>slave1</value> </property> <property> <name>yarn.resourcemanager.zk-address</name> <value>master:2181,slave1:2181,slave2:2181</value> </property> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> <property> <name>yarn.log-aggregation-enable</name> <value>true</value> </property> <property> <name>yarn.log-aggregation.retain-seconds</name> <value>86400</value> </property> <property> <name>yarn.resourcemanager.recovery.enabled</name> <value>true</value> </property> <property> <name>yarn.resourcemanager.store.class</name> <value>org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore</value> </property> </configuration>

slaves

master slave1 slave2

(5)zookeeper配置

解压zookeeper

tar -zxvf zookeeper-3.4.8.tar.gz -C /usr/local/src/

重命名其名称为zookeeper

mv zookeeper-3.4.8 zookeeper

在zookeeper安装目录下创建 logs 目录和 data 目录

在Ubuntu操作系统创建hadoop用户输入密码输入不了 ubuntu搭建hadoop_xml_25

在data目录下创建myid文件并写入内容 “1”

在Ubuntu操作系统创建hadoop用户输入密码输入不了 ubuntu搭建hadoop_zookeeper_26

 进入zookeeper/conf目录下,重命名 zoo_sample.cfg  为 zoo.cfg

在Ubuntu操作系统创建hadoop用户输入密码输入不了 ubuntu搭建hadoop_xml_27

编辑zoo.cfg文件

修改前:

在Ubuntu操作系统创建hadoop用户输入密码输入不了 ubuntu搭建hadoop_xml_28

 修改后:

在Ubuntu操作系统创建hadoop用户输入密码输入不了 ubuntu搭建hadoop_运维_29


二、三台机器集群搭建

        1、关机状态下克隆出另外两台虚拟机


        2、三台机器分别修改静态IP

在Ubuntu操作系统创建hadoop用户输入密码输入不了 ubuntu搭建hadoop_hadoop_30

在Ubuntu操作系统创建hadoop用户输入密码输入不了 ubuntu搭建hadoop_运维_31

 

在Ubuntu操作系统创建hadoop用户输入密码输入不了 ubuntu搭建hadoop_zookeeper_32

在Ubuntu操作系统创建hadoop用户输入密码输入不了 ubuntu搭建hadoop_ubuntu_33

在Ubuntu操作系统创建hadoop用户输入密码输入不了 ubuntu搭建hadoop_ubuntu_34


        3、重启三台机器网络服务

service networking restart

        4、内网与外网的检查

在Ubuntu操作系统创建hadoop用户输入密码输入不了 ubuntu搭建hadoop_hadoop_35

        5、三台机器分别修改其主机名

hostnamectl set-hostname master
hostnamectl set-hostname slave1
hostnamectl set-hostname slave2

        6、修改其他两台机器zookeeper/data/myid文件分别为2和3


        7、重启三台机器

reboot

        8、设置ssh免密

生成密钥

ssh-keygen -t rsa

在Ubuntu操作系统创建hadoop用户输入密码输入不了 ubuntu搭建hadoop_ubuntu_36

分发密钥

ssh-copy-id 192.168.231.248 ssh-copy-id 192.168.231.249

在Ubuntu操作系统创建hadoop用户输入密码输入不了 ubuntu搭建hadoop_ubuntu_37


        9、使三台机器的环境变量生效

source /etc/profile

        10、启动三台机器的zookeeper集群

bin/zkServer.sh start
bin/zkServer.sh status


        11、格式化zookeeper在HA中的状态

bin/hdfs zkfc -formatZK

在Ubuntu操作系统创建hadoop用户输入密码输入不了 ubuntu搭建hadoop_hadoop_38

         12、启动三台机器的 journalnode进程

sbin/hadoop-daemon.sh start journalnode


        13、格式化namenode

bin/hdfs namenode -format

在Ubuntu操作系统创建hadoop用户输入密码输入不了 ubuntu搭建hadoop_运维_39


在Ubuntu操作系统创建hadoop用户输入密码输入不了 ubuntu搭建hadoop_xml_40

        注:观察是否有报错信息,status是否为0,0即为初始化成功,1则报错,检查配置文件是否有误

        14、启动hadoop所有进程

sbin/start-all.sh

在Ubuntu操作系统创建hadoop用户输入密码输入不了 ubuntu搭建hadoop_hadoop_41


       15、格式化主从节点

复制namenode元数据到从节点

scp -r /usr/local/hadoop/tmp/* slave1:/usr/local/hadoop/tmp/
scp -r /usr/local/hadoop/tmp/* slave2:/usr/local/hadoop/tmp/

在Ubuntu操作系统创建hadoop用户输入密码输入不了 ubuntu搭建hadoop_ubuntu_42

在Ubuntu操作系统创建hadoop用户输入密码输入不了 ubuntu搭建hadoop_zookeeper_43

        注:由于之前namenode,datanode,journalnode的数据全部存放在hadoop/tmp目录下,所以直接复制 tmp 目录至从节点 

        16、启动slave1的resourcemanager 和 namenode 进程

sbin/yarn-daemon.sh start resourcemanager
sbin/hadoop-daemon.sh start namenode

在Ubuntu操作系统创建hadoop用户输入密码输入不了 ubuntu搭建hadoop_ubuntu_44

         17、访问 resourcemanager 和 namenode 的web页面


        18、杀死master端的namenode(模拟master宕机后HA的故障转移)

kill -9 (namenode进程号)

在Ubuntu操作系统创建hadoop用户输入密码输入不了 ubuntu搭建hadoop_xml_45

在Ubuntu操作系统创建hadoop用户输入密码输入不了 ubuntu搭建hadoop_xml_46

        注: 可见,在naster宕机后,slave自动接替了master的工作,成为活跃状态,此为HA 的故障转移机制

        19、重启master端的namenode进程,观察工作状态

sbin/hadoop-daemon.sh start namenode

在Ubuntu操作系统创建hadoop用户输入密码输入不了 ubuntu搭建hadoop_hadoop_47


在Ubuntu操作系统创建hadoop用户输入密码输入不了 ubuntu搭建hadoop_hadoop_48

在Ubuntu操作系统创建hadoop用户输入密码输入不了 ubuntu搭建hadoop_zookeeper_49

         注:可见,在master重新恢复状态后,slave依然为active状态,master为备用状态