0


Hadoop-HA搭建

所需资源

VMware:VMware

镜像:Centos镜像

所需包:Hadoop包、jdk、Zookeeper

一、搭建基础环境

虚拟机资源配置
操作系统Centos7 64位处理器2U2核内存4G磁盘大小60G网卡类型VMnat 8镜像CentOS-7-x86_64-DVD-1804.iso

# 除过上述之外的选项均使用默认推荐的选项

1.挂载镜像

2.开机,安装系统

3.修改其中的配置

修改对应的IP
主机IP用户名master192.168.1.6rootslave1192.168.1.7rootslave2192.168.1.8root

# IP地址可以选择和我一样的网段,也可以根据自己的网卡配置来设定,不做强制要求

4.备份本地yum源文件

mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo_bak

5.获取阿里yum源配置文件

wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

# 或者下面的命令,没有wget用下面的
curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

6.更新cache

# 更新cache
yum makecache
yum -y update

7.安装 tools工具、上传下载命令 vim

yum -y install net-tools
yum -y install lrzsz
yum -y install vim
yum -y install psmisc

# 这步执行完成就可以创建另外两台虚拟机了,可以克隆,也可以重新创建,克隆步骤自行查阅,新建参考上述步骤

8.修改网卡

# 进入配置网卡目录
vi /etc/sysconfig/network-scripts/ifcfg-ens33

# 修改
BOOTPROTO="static"
ONBOOT="yes"

# 添加网卡,网关,子网掩码,dns

# master
IPADDR="192.168.1.6"
PREFIX="24"
GATEWAY="192.168.1.2"
DNS1="114.114.114.114"

# slave1
IPADDR="192.168.1.7"
PREFIX="24"
GATEWAY="192.168.1.2"
DNS1="114.114.114.114"

# slave2
IPADDR="192.168.1.8"
PREFIX="24"
GATEWAY="192.168.1.2"
DNS1="114.114.114.114"

# 重启网卡
systemctl restart network

9.修改每台机器的主机名

# master 机器执行
hostnamectl set-hostname master

#slave1机器执行
hostnamectl set-hostname slave1

# slave2机器执行
hostnamectl set-hostname slave2

# 执行完以后重启执行bash或者重启会刷新机器名
bash

# 执行完之后需要 查看一下主机名称是否修改完成
cat /etc/hostname

10.修改/etc/hosts文件

# 编辑配置文件
vi /etc/hosts

# 增加
192.168.1.6 master master
192.168.1.7 slave1 slave1
192.168.1.8 slave2 slave2

# 在windows下也要配置一下相同的hosts配置 windows需要配置 可以使用映射值访问C:\Windows\System32\drivers\etc  目录下有hosts 编辑即可 若没有创建一个,此步可以省略,后面访问web页面需要使用ip
192.168.1.6 master master
192.168.1.7 slave1 slave1
192.168.1.8 slave2 slave2

11.关闭防火墙

# 关闭防火墙
systemctl stop firewalld.service
systemctl disable firewalld.service

# Selinux 配置
yum -y install setroubleshoot
yum -y install setools-console

# 查看SELinux的状态
getenforce

# 关闭集群中的SELinux
vi /etc/selinux/config

# 修改配置
SELINUX=disabled

12.配置ssh免密登录

# 安装ssh服务
yum install -y openssh-server
systemctl start sshd
systemctl enable sshd
systemctl status sshd

# 每个用户免密登录都需要配置一遍ssh免密登录
# 4个回车 生成公钥、私钥
ssh-keygen
ssh-copy-id master
ssh-copy-id slave1
ssh-copy-id slave2

# 验证,在master 节点  
ssh slave1 
ssh slave2

13.配置NTP时钟同步

# 安装ntp服务
yum -y install ntp

# 使用阿里云直接同步
ntpdate us.pool.ntp.org
# 或者

ntpdate ntp4.aliyun.com

# 此步基础环境已经搭建完成,建议打个快照

二、配置Java环境

1.解压jdk包到指定目录下

# 软件安装
mkdir -p /opt/software
# 安装包
mkdir -p /usr/local/src

# 将jdk文件上传至/opt/software中
# 解压文件
tar -zxvf jdk-8u241-linux-x64.tar.gz -C /usr/local/src

# 进入解压目录
cd /usr/local/src/

# 更改包名
mv jdk1.8.0_241/ jdk

2.配置环境变量

vi /etc/profile

#java
export JAVA_HOME=/usr/local/src/jdk
export PATH=$PATH:$JAVA_HOME/bin
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

3.生效环境变量

# 生效环境变量
source /etc/profile 

# 查看jdk版本
java -version 

4.分发变量

# 分发给各个集群同步命令
# scp -r  目录 用户@主机名:地址
scp -r /usr/local/src/jdk root@slave1:/usr/local/src
scp -r /usr/local/src/jdk root@slave2:/usr/local/src

5.集群节点生效

# 环境变量生效
source /etc/profile

# 查看jdk版本
java -version

三、配置 Zookeeper环境

1.解压并安装

# 解压包到指定目录下 
tar -zxvf /opt/software/zookeeper-3.4.8.tar.gz -C /usr/local/src/ 

# 进入解压的目录
cd /usr/local/src/

# 更改包名 
mv zookeeper-3.4.8 zookeeper 

2.创建 ZooKeeper 数据目录

# 创建data目录,data 是用来传输数据的
mkdir /usr/local/src/zookeeper/data

# 创建logs目录,logs 是用来记录日志的
mkdir /usr/local/src/zookeeper/logs

3.配置环境变量

# 编辑环境变量
vi /etc/profile

# zookeeper environment 
export ZK_HOME=/usr/local/src/zookeeper
export PATH=$PATH:$ZK_HOME/bin

# 使环境变量生效
source /etc/profile

4.修改 zoo.cfg 配置文件

# 进入到 conf 目录下将 zoo.cfg 文件拷贝过来
cp zoo_sample.cfg zoo.cfg

# 修改zoo.cfg
vi zoo.cfg

#修改内容
dataDir=/usr/local/src/zookeeper/data
#增加
dataLogDir=/usr/local/src/zookeeper/logs
server.1=master:2888:3888
server.2=slave1:2888:3888
server.3=slave2:2888:3888

# 上面的 IP 可以换成自己的主机地址,或者换成主机名,一般我们换成主机名

5.创建 myid 配置文件

# 进入指定目录
cd /usr/local/src/zookeeper/data

# 修改文件
echo "1" > myid

6.分发 ZooKeeper 集群

# 分发配置文件
scp -r /usr/local/src/zookeeper/ root@slave1:/usr/local/src/
scp -r /usr/local/src/zookeeper/ root@slave2:/usr/local/src/

# 分发环境变量并使其生效
scp /etc/profile root@slave1:/etc/
scp /etc/profile root@slave2:/etc/

# 三台节点都执行生效环境变量的命令
source /etc/profile

7.修改 myid 配置

# master 对应 1,slave1 对应 2,slave2 对应 3
# 进入指定目录
cd /usr/local/src/zookeeper/data/

# 修改myid值
# master
echo "1">myid

# slave1
echo "2">myid

#slave2
echo "3">myid

#查看myid值,在/usr/local/src/zookeeper/data/目录下
cat myid 

8.启动Zookeeper

# 三个节点依次启动
zkServer.sh start

# 查看状态
zkServer.sh status

# 查看进程,三台节点都查看
jps

四、HadoopHA模式安装

1.停止之前启动的Zookeeper

# 停止
stop-all.sh

2.长传文件并解压

# 解压文件到指定目录
tar -zxvf /opt/software/hadoop-2.7.1.tar.gz -C /usr/local/src/

# 更改 hadoop 文件名
mv /usr/local/src/hadoop-2.7.1 /usr/local/src/hadoop

3.配置 hadoop 环境变量

# 编辑配置文件
vi /etc/profile

# 进行如下配置
#hadoop enviroment
export HADOOP_HOME=/usr/local/src/hadoop #HADOOP_HOME 指向 JAVA 安装目录
export HADOOP_PREFIX=$HADOOP_HOME
export HADOOP_MAPRED_HOME=$HADOOP_HOME
export HADOOP_COMMON_HOME=$HADOOP_HOME
export HADOOP_HDFS_HOME=$HADOOP_HOME
export YARN_HOME=$HADOOP_HOME
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
export HADOOP_INSTALL=$HADOOP_HOME
export HADOOP_OPTS="-Djava.library.path=$HADOOP_INSTALL/lib:$HADOOP_COMMON_LIB_NATIVE_DIR"
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin

4.配置 hadoop-env.sh 配置文件

# 进入到 hadoop/etc/hadoop目录下,后面的配置文件都在此目录下
cd /usr/local/src/hadoop/etc/hadoop

# 编辑配置文件
vi hadoop-env.sh

# 在最下面添加如下配置
export JAVA_HOME=/usr/local/src/jdk

5.配置 core-site.xml 配置文件

# 编辑配置文件
vi core-site.xml

# 添加如下配置:
<!-- 指定 hdfs 的 nameservice 为 mycluster -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://mycluster</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>file:/usr/local/src/hadoop/tmp</value>
</property>
<!-- 指定 zookeeper 地址 -->
<property>
<name>ha.zookeeper.quorum</name>
<value>master:2181,slave1:2181,slave2:2181</value>
</property>
<!-- hadoop 链接 zookeeper 的超时时长设置 -->
<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>

6.配置 hdfs-site.xml 配置文件

# 编辑配置文件
vi hdfs-site.xml

# 进行如下配置
<!-- journalnode 集群之间通信的超时时间 -->
<property>
<name>dfs.qjournal.start-segment.timeout.ms</name>
<value>60000</value>
</property>
<!--指定 hdfs 的 nameservice 为 mycluster,需要和 core-site.xml 中的保持一致 
dfs.ha.namenodes.[nameservice id]为在 nameservice 中的每一个 NameNode 设置唯一标示
符。配置一个逗号分隔的NameNode ID列表。这将是被DataNode识别为所有的NameNode。
如果使用"mycluster"作为 nameservice ID,并且使用"master"和"slave1"作为 NameNodes 标
示符 -->
<property>
<name>dfs.nameservices</name>
<value>mycluster</value>
</property>
<!-- mycluster 下面有两个 NameNode,分别是 master,slave1 -->
<property>
<name>dfs.ha.namenodes.mycluster</name>
<value>master,slave1</value>
</property>
<!-- master 的 RPC 通信地址 -->
<property>
<name>dfs.namenode.rpc-address.mycluster.master</name>
<value>master:9000</value>
</property>
<!-- slave1 的 RPC 通信地址 -->
<property>
<name>dfs.namenode.rpc-address.mycluster.slave1</name>
<value>slave1:9000</value>
</property>
<!-- master 的 http 通信地址 -->
<property>
<name>dfs.namenode.http-address.mycluster.master</name>
<value>master:50070</value>
</property>
<!-- slave1 的 http 通信地址 -->
<property>
<name>dfs.namenode.http-address.mycluster.slave1</name>
<value>slave1:50070</value>
</property>
<!-- 指定 NameNode 的 edits 元数据的共享存储位置。也就是 JournalNode 列表
 该 url 的配置格式:qjournal://host1:port1;host2:port2;host3:port3/journalId
 journalId 推荐使用 nameservice,默认端口号是:8485 -->
<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>
<!-- 使用 sshfence 隔离机制时需要 ssh 免登陆 -->
<property>
<name>dfs.ha.fencing.ssh.private-key-files</name>
<value>/root/.ssh/id_rsa</value>
</property>
<!-- 指定副本数 -->
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>/usr/local/src/hadoop/tmp/hdfs/nn</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>/usr/local/src/hadoop/tmp/hdfs/dn</value>
</property>
<!-- 指定 JournalNode 在本地磁盘存放数据的位置 -->
<property>
<name>dfs.journalnode.edits.dir</name>
<value>/usr/local/src/hadoop/tmp/hdfs/jn</value>
</property>
<!-- 开启 NameNode 失败自动切换 -->
<property>
<name>dfs.ha.automatic-failover.enabled</name>
<value>true</value>
</property>
<!-- 启用 webhdfs -->
<property>
<name>dfs.webhdfs.enabled</name>
<value>true</value>
</property>
<!-- 配置 sshfence 隔离机制超时时间 -->
<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>

7.配置 mapred-site.xml 配置文件

# 将文件cp一份,类似于重命名的操作
cp mapred-site.xml.template mapred-site.xml

# 编辑配置文件
vi mapred-site.xml

#进行如下配置
<!-- 指定 mr 框架为 yarn 方式 -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<!-- 指定 mapreduce jobhistory 地址 -->
<property>
<name>mapreduce.jobhistory.address</name>
<value>master:10020</value>
</property>
<!-- 任务历史服务器的 web 地址 -->
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>master:19888</value>
</property>

8.配置 yarn-site.xml 配置文件

# 编辑配置文件
vi yarn-site.xml

# 进行如下配置
<!-- Site specific YARN configuration properties -->
<!-- 开启 RM 高可用 -->
<property>
<name>yarn.resourcemanager.ha.enabled</name>
<value>true</value>
</property>
<!-- 指定 RM 的 cluster id -->
<property>
<name>yarn.resourcemanager.cluster-id</name>
<value>yrc</value>
</property>
<!-- 指定 RM 的名字 -->
<property>
<name>yarn.resourcemanager.ha.rm-ids</name>
<value>rm1,rm2</value>
</property>
<!-- 分别指定 RM 的地址 -->
<property>
<name>yarn.resourcemanager.hostname.rm1</name>
<value>master</value>
</property>
<property>
<name>yarn.resourcemanager.hostname.rm2</name>
<value>slave1</value>
</property>
<!-- 指定 zk 集群地址 -->
<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>
<!-- 制定 resourcemanager 的状态信息存储在 zookeeper 集群上 -->
<property>
<name>yarn.resourcemanager.store.class</name>
<value>org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore</value>
</property>

9.配置 masters 配置文件

# 编辑配置文件
vi masters

# 进行如下配置
master
slave1

10.配置 slaves 配置文件

# 编辑配置文件
vi slaves  

# 进行如下配置:先删除localhost
master
slave1
slave2

11.解压包到指定目录

# 解压包到指定目录namenode、datanode、journalnode 等存放数据的公共目录为/usr/local/src/hadoop/tmp;在 master 上执行如下:
# 创建以下目录
mkdir -p /usr/local/src/hadoop/tmp/hdfs/nn
mkdir -p /usr/local/src/hadoop/tmp/hdfs/dn
mkdir -p /usr/local/src/hadoop/tmp/hdfs/jn
mkdir -p /usr/local/src/hadoop/tmp/logs

12.分发文件

# 给slave节点分发配置文件
scp -r /etc/profile root@slave1:/etc/
scp -r /etc/profile root@slave2:/etc/
scp -r /usr/local/src/hadoop root@slave1:/usr/local/src/
scp -r /usr/local/src/hadoop root@slave2:/usr/local/src/

# 生效环境变量,三台节点都执行
source /etc/profile

13.HA 启动

# 启动zk,master节点执行
zkServer.sh start

# 启动 journalnode 守护进程 ,每个节点都要启动
hadoop-daemons.sh start journalnode 

# 初始化 namenode,master节点执行
hdfs namenode -format
# 启动第一个namenode,master节点执行
hadoop-daemon.sh start namenode

# 第二个namenode 格式化同步元数据 在slave1节点
hdfs namenode -bootstrapStandby
hadoop-daemon.sh start namenode

注册 ZNode,master节点执行
hdfs zkfc -formatZK

# 启动 hdfs,master节点执行
start-dfs.sh

# 启动 yarn,master节点执行
start-yarn.sh

# 同步 master 数据,复制 namenode 元数据到其它节点(在 master 节点执行),master节点执行
scp -r /usr/local/src/hadoop/tmp/hdfs/nn/* slave1:/usr/local/src/hadoop/tmp/hdfs/nn/
scp -r /usr/local/src/hadoop/tmp/hdfs/nn/* slave2:/usr/local/src/hadoop/tmp/hdfs/nn/

# 在 slave1 上启动 resourcemanager 和 namenode 进程
yarn-daemon.sh start resourcemanager

# 启动 MapReduce 任务历史服务器,master节点执行
yarn-daemon.sh start proxyserver
mr-jobhistory-daemon.sh start historyserver

14.查看进程

# master节点执行
jpsall

# 如果报错,三台节点都执行以下命令
jps

# 如果查到的jps进程为:master:9个;slave1:8个;slave2:5个则证明HA模式部署完成

五.访问web页面

1.访问网址

master:50070

slave1:50070

master:8088

slave1:8088

2.测试HA

# 删除master节点的namenode进程
# kill -9 进程号
kill -9 9375

# 刷新web页面,由standby变为active
# 重新启动master的namenode
hadoop-daemon.sh start namenode

标签: hadoop 大数据 linux

本文转载自: https://blog.csdn.net/m0_74219280/article/details/143272899
版权归原作者 楠师& 所有, 如有侵权,请联系我们删除。

“Hadoop-HA搭建”的评论:

还没有评论