概念了解
主从结构:在一个集群中,会有部分节点充当主服务器的角色,其他服务器都是从服务器的角色,当前这种架构模式叫做主从结构。
主从结构分类:
1、一主多从
2、多主多从
Hadoop中的HDFS和YARN都是主从结构,主从结构中的主节点和从节点有多重概念方式:
1、主节点 从节点
2、master slave
3、管理者 工作者
4、leader follower
Hadoop集群中各个角色的名称:
服务 | 主节点 | 从节点 |
---|---|---|
HDFS | NameNode | DataNode |
YARN | ResourceManager | NodeManager |
高可用模式:
表示整个集群中的主节点会有多个
注意区分:能够对外提供服务的主节点还是只有一个。其他的主节点全部处于一个热备的状态。
正在对外提供服务的主节点:active 有且仅有一个
热备的主节点:standby 可以有多个
工作模式:1、在任意时刻,只有一个主节点是active的,active的主节点对外提供服务
2、在任意时刻,都应至少有一个standby的主节点,等待active的宕机来进行接替
架构模式:就是为了解决分布式集群中的通用问题SPOF
不管是分布式架构还是高可用架构,都存在一个问题:主从结构—从节点数量太多了。最直观的的问题:造成主节点的工作压力过载,主节点会宕机,当前的这种现象是一种死循环
集群服务器规划
使用4台CentOS-7.5服务器进行集群搭建, hadoop HA 集群的搭建依赖于 zookeeper,
所以选取三台当做 zookeeper 集群 ,总共准备了四台主机,分别是:
office-prod-bigdata-00,office-prod-bigdata-01,office-prod-bigdata-02,office-prod-bigdata-03
其中 office-prod-bigdata-00 和 office-prod-bigdata-01 做 namenode 的主备切换,
而将 office-prod-bigdata-02 和 office-prod-bigdata-03 做 resourcemanager 的主备切换
主机名称/服务 | IP | 用户 | HDFS | YARN | ZooKeeper |
---|---|---|---|---|---|
office-prod-bigdata-00 | 172.16.16.60 | root | NameNodeDataNodejournalnode | NodeManager | Zookeeperzkfc |
office-prod-bigdata-01 | 172.16.16.61 | root | NameNodeDataNodejournalnode | NodeManager | Zookeeperzkfc |
office-prod-bigdata-02 | 172.16.16.62 | root | DataNodejournalnode | NodeManagerResourceManager | Zookeeper |
office-prod-bigdata-03 | 172.16.16.63 | root | DataNode | NodeManagerResourceManager |
软件安装步骤概述
1、获取安装包
2、解压缩和安装
3、修改配置文件
4、初始化,配置环境变量,启动,验证
安装 Zookeeper 集群
见我的另一篇博客
安装 Hadoop 集群
1、规划
规划安装用户:root, (这里目前使用 root, 后面会逐渐规范起来, 使用 hadoop)
规划安装目录:/usr/local/webserver/hadoop-2.9.1
规划数据目录:/hadoop/data/
注:安装目录和数据目录需要自己单独创建
2、上传解压缩
创建 安装目录
mkdir -p /usr/local/webserver/
-
解压 安装jdk 使用openjdk 还是 oracle jdk 看大家自由,下载1.8 版本的jdk 解压到 /usr/local/webserver/ 下,重命名为 jdk1.8
-
解压 安装 hadoop (哪个版本无所谓,看个人喜好,此教程 通用 hadoop2 系列的所有版本) 这里使用 hadoop2.9.1 作为安装版本,去官网下载后, 解压在 /usr/local/webserver/ 目录下
cd /usr/local/webserver/wget http://mirrors.tuna.tsinghua.edu.cn/apache/hadoop/common/hadoop-2.9.1/hadoop-2.9.1.tar.gztar -xzvf hadoop-2.9.1.tar.gz
3、修改配置文件
cd 到配置文件目录:/usr/local/webserver/hadoop-2.9.1/etc/
cd /usr/local/webserver/hadoop-2.9.1/etc/
hadoop-env.sh
修改 JAVA_HOME 为 JDK的安装路径 : /usr/local/webserver/jdk1.8
core-site.xml
fs.defaultFS hdfs://myha01 指定hdfs的nameservice为myha01 hadoop.tmp.dir /hadoop/data/hadoop/tmp hadoop临时文件目录 ha.zookeeper.quorum office-prod-bigdata-00:2181,office-prod-bigdata-01:2181,office-prod-bigdata-02:2181 指定zookeeper地址
hdfs-site.xml
dfs.replication 2 dfs.namenode.name.dir /hadoop/data/hadoopdata/dfs/name dfs.datanode.data.dir /hadoop/data/hadoopdata/dfs/data dfs.webhdfs.enabled true dfs.nameservices myha01 dfs.ha.namenodes.myha01 nn1,nn2 dfs.namenode.rpc-address.myha01.nn1 office-prod-bigdata-00:9000 dfs.namenode.http-address.myha01.nn1 office-prod-bigdata-00:50070 dfs.namenode.rpc-address.myha01.nn2 office-prod-bigdata-01:9000 dfs.namenode.http-address.myha01.nn2 office-prod-bigdata-01:50070 dfs.namenode.shared.edits.dir qjournal://office-prod-bigdata-00:8485;office-prod-bigdata-01:8485;office-prod-bigdata-02:8485/myha01 dfs.journalnode.edits.dir /hadoop/data/journaldata dfs.ha.automatic-failover.enabled true dfs.client.failover.proxy.provider.myha01 org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider dfs.ha.fencing.methods sshfence shell(/bin/true) dfs.ha.fencing.ssh.private-key-files /root/.ssh/id_rsa dfs.ha.fencing.ssh.connect-timeout 30000 ha.failover-controller.cli-check.rpc-timeout.ms 60000
mapred-site.xml
mapreduce.framework.name yarn mapreduce.jobhistory.address office-prod-bigdata-00:10020 mapreduce.jobhistory.webapp.address office-prod-bigdata-00:19888 mapreduce.application.classpath $HADOOP_MAPRED_HOME/*,$HADOOP_MAPRED_HOME/lib/*,$MR2_CLASSPATH /usr/local/webserver/hadoop-2.9.1/share/hadoop/mapreduce/*, /usr/local/webserver/hadoop-2.9.1/share/hadoop/mapreduce/lib/*
yarn-site.xml
yarn.resourcemanager.ha.enabled true yarn.resourcemanager.cluster-id yrc yarn.resourcemanager.ha.rm-ids rm1,rm2 yarn.resourcemanager.hostname.rm1 office-prod-bigdata-02 yarn.resourcemanager.hostname.rm2 office-prod-bigdata-03 yarn.resourcemanager.webapp.address.rm1 office-prod-bigdata-02:8088 yarn.resourcemanager.webapp.address.rm2 office-prod-bigdata-03:8088 yarn.resourcemanager.zk-address office-prod-bigdata-00:2181,office-prod-bigdata-01:2181,office-prod-bigdata-02:2181 yarn.nodemanager.aux-services mapreduce_shuffle yarn.nodemanager.aux-services.mapreduce.shuffle.class org.apache.hadoop.mapred.ShuffleHandler mapreduce.shuffle.port 23080 yarn.log-aggregation-enable true yarn.log-aggregation.retain-seconds 86400 yarn.resourcemanager.recovery.enabled true yarn.resourcemanager.store.class org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore yarn.nodemanager.resource.memory-mb 61440 NodeManager 此节点可用物理内存,注意,该参数是不可修改的,一旦设置,整个运行过程中不 可动态修改。 yarn.scheduler.maximum-allocation-mb 12288 单个任务可申请的最多物理内存量,单位MB,默认8182MB yarn.nodemanager.resource.cpu-vcores 22 NodeManager总的可用虚拟CPU个数 yarn.scheduler.maximum-allocation-vcores 8 单个任务可申请的CPU个数 yarn.scheduler.minimum-allocation-mb 2048 单个任务可申请的最少物理内存量,单位MB yarn.nodemanager.vmem-pmem-ratio 2.1 yarn.resourcemanager.scheduler.class org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.FairScheduler 配置yarn 调度器为 FairScheduler yarn.scheduler.fair.allocation.file /usr/local/webserver/hadoop-2.9.1/etc/hadoop/fair-scheduler.xml yarn.scheduler.fair.preemption true 是否启用抢占机制,默认值是false yarn.scheduler.fair.user-as-default-queue true default is True yarn.scheduler.fair.allow-undeclared-pools false default is True yarn.scheduler.fair.max.assign 1 default is -1
slaves
office-prod-bigdata-00office-prod-bigdata-01office-prod-bigdata-02office-prod-bigdata-03
fair-scheduler.xml, 根据自身实际去修改配置
fair root,hive,spark,hadoop * 12 225280 mb,80 vcores 2048 mb,1 vcores 1000 fair 1 1
4、把安装包分别分发给其他的节点
重点强调: 每台服务器中的hadoop安装包的目录必须一致, 安装包的配置信息还必须保持一致
[root@office-prod-bigdata-00 webserver]$ scp -r /usr/local/webserver/hadoop-2.9.1 office-prod-bigdata-01:/usr/local/webserver/[root@office-prod-bigdata-00 webserver]$ scp -r /usr/local/webserver/hadoop-2.9.1 office-prod-bigdata-02:/usr/local/webserver/[root@office-prod-bigdata-00 webserver]$ scp -r /usr/local/webserver/hadoop-2.9.1 office-prod-bigdata-03:/usr/local/webserver/
5、配置Hadoop环境变量
千万注意:
1、如果你使用root用户进行安装。 vi /etc/profile 即可 系统变量
2、如果你使用普通用户进行安装。 vi ~/.bashrc 用户变量
export HADOOP_HOME=/usr/local/webserver/hadoop-2.9.1export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoopexport HADOOP_COMMON_HOME=$HADOOP_HOMEexport HADOOP_HDFS_HOME=$HADOOP_HOMEexport HADOOP_MAPRED_HOME=$HADOOP_HOMEexport HADOOP_YARN_HOME=$HADOOP_HOMEexport HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib/native"export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/nativeexport PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:export HADOOP_CLASSPATH=$HADOOP_HOME/etc/hadoop:$HADOOP_HOME/share/hadoop/common/lib/*:$HADOOP_HOME/share/hadoop/common/*:$HADOOP_HOME/share/hadoop/hdfs:$HADOOP_HOME/share/hadoop/hdfs/lib/*:$HADOOP_HOME/share/hadoop/hdfs/*:$HADOOP_HOME/share/hadoop/yarn:$HADOOP_HOME/share/hadoop/yarn/lib/*:$HADOOP_HOME/share/hadoop/yarn/*:$HADOOP_HOME/share/hadoop/mapreduce/lib/*:$HADOOP_HOME/share/hadoop/mpreduce/*:$HADOOP_HOME/contrib/capacity-scheduler/*.jar
6、查看hadoop版本
验证是否安装成功,, 输入以下命令 查看输出是否 为 Hadoop 2.9.1
hadoop version
7、Hadoop HA 初始化
重点强调:一定要按照以下步骤逐步进行操作
1)、启动ZooKeeper
启动各节点的 ZooKeeper 服务
2)、在你配置的各个journalnode节点启动该进程
需要在 office-prod-bigdata-00,office-prod-bigdata-01,office-prod-bigdata-02 三天机器上启动 journalnode
[root@office-prod-bigdata-00 sbin]$ hadoop-daemon.sh start journalnodestarting journalnode, logging to /usr/local/webserver/hadoop-2.9.1/logs/hadoop-hadoop-journalnode-hadoop1.out[hadoop@hadoop1 sbin]$ jps2739 JournalNode2788 Jps2647 QuorumPeerMain[hadoop@hadoop1 conf]$
3)、格式化namenode
先选取一个namenode(office-prod-bigdata-00)节点进行格式化
[root@office-prod-bigdata-00 hadoop-2.9.1]# hadoop namenode -format
下图是我网上找的
4)、要把在hadoop1节点上生成的元数据 给复制到 另一个namenode(office-prod-bigdata-01)节点上
[root@office-prod-bigdata-00 hadoop-2.9.1]# cd data/[root@office-prod-bigdata-00 data]# lshadoop hadoopdata journaldata[root@office-prod-bigdata-00 data]# [root@office-prod-bigdata-00 data]# scp -r hadoopdata/ root@office-prod-bigdata-01:$PWDVERSION 100% 206 0.2KB/s 00:00 fsimage_0000000000000000000.md5 100% 62 0.1KB/s 00:00 fsimage_0000000000000000000 100% 323 0.3KB/s 00:00 seen_txid 100% 2 0.0KB/s 00:00
5)、格式化zkfc
重点强调:只能在nameonde节点进行
hdfs zkfc -formatZK
下图是我网上找的
8、启动
-
启动HDFS
在 /usr/local/webserver/hadoop-2.9.1/sbin 目录下,运行 start-dfs.sh,运行 jps 命令,查看启动情况,
-
启动YARN
在主备 resourcemanager 中随便选择一台进行启动, 这里挑选 office-prod-bigdata-02
在 /usr/local/webserver/hadoop-2.9.1/sbin 目录下,运行 **start-yarn.sh,**运行 jps 命令,查看启动情况
-
启动备用节点的 YARN 备用节点为 office-prod-bigdata-03 在 /usr/local/webserver/hadoop-2.9.1/sbin 目录下,运行
yarn-daemon.sh start resourcemanager,
运行 jps 命令,查看是否 启动 ResourceManager
-
启动 mapreduce 任务历史服务器
cd到节点 office-prod-bigdata-00上 /usr/local/webserver/hadoop-2.9.1/sbin 目录下,运行
mr-jobhistory-daemon.sh start historyserver
9、查看各节点的状态
HDFS
[root@office-prod-bigdata-00 data]# hdfs haadmin -getServiceState nn1active[root@office-prod-bigdata-00 data]# hdfs haadmin -getServiceState nn2standby
YARN
[root@office-prod-bigdata-00 data]# yarn rmadmin -getServiceState rm1standby [root@office-prod-bigdata-00 data]# yarn rmadmin -getServiceState rm2action
Hadoop HA 重启
Hadoop HA 集群挂掉后,重启方案:
一、检查
-
检查是 Hadoop 的组件挂掉,还是zookeeper 挂掉。
jps:QuorumPeerMain QuorumPeerMain 不在就是zookeeper 挂掉了
-
检查: NameNode 节点是否已经挂掉
jps 查看 office-prod-bigdata-00, office-prod-bigdata-01 节点上是否有NameNode 节点,如果没有,则启动NameNode 节点
二、启动
- zookeeper启动3台机器(office-prod-bigdata-00,office-prod-bigdata-01, office-prod-bigdata-02)
zkServer.sh start
- 启动namenode
cd $HADOOP_HOME/sbin./hadoop-daemon.sh start namenode
- 启动HDFS 在 $HADOOP_HOME/sbin 目录下,运行 start-dfs.sh,运行 jps 命令,查看启动情况,
cd $HADOOP_HOME/sbin./start-dfs.sh
- 启动YARN 在主备 resourcemanager 中随便选择一台进行启动, 这里挑选 office-prod-bigdata-02 在 $HADOOP_HOME/sbin 目录下,运行 start-yarn.sh,运行 jps 命令,查看启动情况
cd $HADOOP_HOME/sbin./start-yarn.sh
启动备用节点的 YARN 备用节点为 office-prod-bigdata-03 在 $HADOOP_HOME/sbin 目录下,运行 yarn-daemon.sh start resourcemanager, 运行 jps 命令,查看是否 启动 ResourceManager
cd $HADOOP_HOME/sbin./yarn-daemon.sh start resourcemanager
- 启动 mapreduce 任务历史服务器 启动 mapreduce 任务历史服务器 在 $HADOOP_HOME/sbin 目录下,运行 mr-jobhistory-daemon.sh start historyserver
cd $HADOOP_HOME/sbin./mr-jobhistory-daemon.sh start historyserver
- 启动 datanode
cd $HADOOP_HOME/sbin./hadoop-daemon.sh start datanode
- 启动 nodemanager
cd $HADOOP_HOME/sbin./yarn-daemon.sh start nodemanager
三、查看各节点的状态 (office-prod-bigdata-00,office-prod-bigdata-01, office-prod-bigdata-02)任意一个节点上
HDFS
[root@office-prod-bigdata-00 data]# hdfs haadmin -getServiceState nn1 active [root@office-prod-bigdata-00 data]# hdfs haadmin -getServiceState nn2 standby
YARN
[root@office-prod-bigdata-00 data]# yarn rmadmin -getServiceState rm1standby [root@office-prod-bigdata-00 data]# yarn rmadmin -getServiceState rm2action
四、其他操作
- ha 有问题时候,不能进行故障转移,需要手动进行
手动故障转移
cd $HADOOP_HOME./bin/hdfs haadmin -transitionToActive --forcemanual nn2
- 建好集群后,修改了zk服务器名字,导致zk存储的名字与实际不符,需要重置zkfc 的HA 名字空间
cd $HADOOP_HOME./bin/hdfs zkfc -formatZK