Hadoop1 | Hadoop2 | Hadoop3 |
---|---|---|
NameNode | NameNode | |
DataNode | DataNode | DataNode |
JournalNode | JournalNode | JournalNode |
DFSZKFailoverController | DFSZKFailoverController | DFSZKFailoverController |
ResourceManager | ResourceManager | |
NodeManager | NodeManager | NodeManager |
JobHistoryServer | JobHistoryServer | |
ZooKeeper | ZooKeeper | ZooKeeper |
HBase Master | HBase Master | |
RegionServer | RegionServer | RegionServer |
1、修改zookeeper配置文件
cp zoo_sample.cfg zoo.cfg
vim zoo.cfg
# 修改该行配置
dataDir=/opt/module/apache-zookeeper-3.7.0/data
# 在该文件最后添加,指定zookeeper集群主机及端口,节点数必须为奇数
server.1=hadoop1:2888:3888
server.2=hadoop2:2888:3888
server.3=hadoop3:2888:3888
2、在/opt/module/apache-zookeeper-3.7.0创建data目录,创建myid
mkdir /opt/module/apache-zookeeper-3.7.0/data
touch myid
vim myid
#文件内容为1
#在myid中设置文件内容即表示当前节点为在zoo.cfg中指定的server.1
3、将zk的目录拷贝到其他几台几台节点服务器
scp -r /opt/module/apache-zookeeper-3.7.0 hadoop2:/opt/module/
#更改zk的data中myi文件内容为2
scp -r /opt/module/apache-zookeeper-3.7.0 hadoop2:/opt/module/
#更改zk的data中myi文件内容为3
4、配置zk的环境变量
vim /etc/profile
#新增
export ZOOKEEPER_HOME=/opt/module/apache-zookeeper-3.7.0
export PATH=ZOOKEEPER_HOME/bin:$PATH
source /etc/profile
5、启动zookeeper
在每个节点上运行
zkServer.sh start
##查看角色
zkServer.sh status
#jps查看进程
加入zk服务
<configuration>
<property>
<name>fs.defaultFSname>
<value>hdfs://hadddpappvalue>
property>
<property>
<name>hadoop.tmp.dirname>
<value>/opt/module/hadoop-3.1.3/tmpvalue>
property>
<property>
<name>ha.zookeeper.quorumname>
<value>hadoop1:2181,hadoop2:2181,hadoop3:2181value>
property>
<property>
<name>hadoop.http.staticuser.username>
<value>rootvalue>
property>
configuration>
<configuration>
<property>
<name>dfs.nameservicesname>
<value>hadoopappvalue>
property>
<property>
<name>dfs.ha.namenodes.hadoopappname>
<value>hadoop1,hadoop3value>
property>
<property>
<name>dfs.namenode.rpc-address.hadoopapp.hadoop1name>
<value>hadoop1:9000value>
property>
<property>
<name>dfs.namenode.rpc-address.hadoopapp.hadoop3name>
<value>hadoop3:9000value>
property>
<property>
<name>dfs.namenode.http-address.hadoopapp.hadoop1name>
<value>hadoop1:50070value>
property>
<property>
<name>dfs.namenode.http-address.hadoopapp.hadoop3name>
<value>hadoop3:50070value>
property>
<property>
<name>dfs.namenode.shared.edits.dirname>
<value>qjournal://hadoop1:8485;hadoop2:8485;hadoop3:8485/hadoopappvalue>
property>
<property>
<name>dfs.journalnode.edits.dirname>
<value>/opt/module/hadoop-3.1.3/tmp/dfs/journalnodevalue>
property>
<property>
<name>dfs.ha.automatic-failover.enabled.hadoopappname>
<value>truevalue>
property>
<property>
<name>dfs.client.failover.proxy.provider.hadoopappname> <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvidervalue>
property>
<property>
<name>dfs.ha.fencing.methodsname>
<value>sshfence
shell(/bin/true)value>
property>
<property>
<name>dfs.ha.fencing.ssh.private-key-filesname>
<value>/root/.ssh/id_rsavalue>
property>
<property>
<name>dfs.ha.fencing.ssh.connect-timeoutname>
<value>30000value>
property>
<property>
<name>dfs.replicationname>
<value>3value>
property>
configuration>
<configuration>
<property>
<name>mapreduce.framework.namename>
<value>yarnvalue>
property>
<property>
<name>mapreduce.jobhistory.addressname>
<value>hadoop1:10020value>
property>
<property>
<name>mapreduce.jobhistory.webapp.addressname>
<value>hadoop1:19888value>
property>
<property>
<name>mapreduce.jobhistory.done-dirname>
<value>/history/donevalue>
property>
<property>
<name>mapreduce.jobhistory.intermediate-done-dirname>
<value>/history/done_intermediatevalue>
property>
<property>
<name>yarn.app.mapreduce.am.staging-dirname>
<value>/history/stagingvalue>
property>
# web上默认最多显示20000个历史的作业记录信息,这里设为1000个。
<property>
<name>mapreduce.jobhistory.joblist.cache.sizename>
<value>1000value>
property>
<property>
<name>mapreduce.jobhistory.cleaner.enablename>
<value>truevalue>
property>
<property>
<name>mapreduce.jobhistory.cleaner.interval-msname>
<value>86400000value>
property>
<property>
<name>mapreduce.jobhistory.max-age-msname>
<value>432000000value>
property>
configuration>
//注意,这里加入yarn执行application(job)的日志记录进程,因为hadoop1和hadoop3做了HA,所以hadoop1和hadoop3节点都配上该jobhistory服务,hadoop2节点不需要。
<configuration>
<property>
<name>yarn.resourcemanager.ha.enabledname>
<value>truevalue>
property>
<property>
<name>yarn.resourcemanager.cluster-idname>
<value>hayarnvalue>
property>
<property>
<name>yarn.resourcemanager.ha.rm-idsname>
<value>rm1,rm2value>
property>
<property>
<name>yarn.resourcemanager.hostname.rm1name>
<value>hadoop1value>
property>
<property>
<name>yarn.resourcemanager.hostname.rm2name>
<value>hadoop3value>
property>
<property>
<name>yarn.resourcemanager.ha.idname>
<value>rm1value>
property>
<property>
<name>yarn.resourcemanager.zk-addressname>
<value>hadoop1:2181,hadoop2:2181,hadoop3:2181value>
property>
<property>
<name>yarn.nodemanager.aux-servicesname>
<value>mapreduce_shufflevalue>
property>
configuration>
<property>
<name>yarn.nodemanager.pmem-check-enabledname>
<value>falsevalue>
property>
<property>
<name>yarn.nodemanager.vmem-check-enabledname>
<value>falsevalue>
property>
configuration>
三个节点都设为datanode,在生产环境中,DD不要跟DN放在同一台服务器
hadoop1
hadoop2
hadoop3
start-dfs.sh和stop-dfs.sh头部增加
#三个节点都需要增加下面内容
HDFS_DATANODE_USER=root
HDFS_DATANODE_SECURE_USER=hdfs
HDFS_NAMENODE_USER=root
HDFS_SECONDARYNAMENODE_USER=root
HDFS_ZKFC_USER=root
HDFS_JOURNALNODE_USER=root
start-yarn.sh和stop-dfs.sh头部增加
# 三个节点都需要增加下面内容
YARN_RESOURCEMANAGER_USER=root
HDFS_DATANODE_SECURE_USER=yarn
YARN_NODEMANAGER_USER=root
zkServer.sh start
hdfs --daemon start journalnode
在NameNode节点上进行操作
#初始化hdfs
hdfs namenode -format
#初始化zkfc
hdfs zkfc -formatZK
1、在NameNode主备节点上分别进行操作
hdfs --daemon start zkfc
2、在NameNode主节点上执行
#启动hdfs
start-dfs.sh
#启动yarn
start-yarn.sh
结果:
hdfs namenode -bootstrapStandby
mapred --daemon start historyserver
#在namenode主节点上
hdfs haadmin -getServiceState hadoop1
#显示active
hdfs haadmin -getServiceState hadoop3
#显示standby
#查看namenode状态,浏览器打开如下链接
http://hadoop1:50070
#在namenode主节点上,查看RM节点的主备状态
yarn rmadmin -getServiceState rm1
#显示standby
yarn rmadmin -getServiceState rm2
#显示active
#浏览器输入查看rm的状态
http://hadoop1:8088
#由于rm2是主节点,会自动跳转到这个地址
http://hadoop3:8088
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TJnRcgzo-1648730359731)(C:\Users\Hou\AppData\Roaming\Typora\typora-user-images\image-20220325142028237.png)]
至此负责底层分布式存储的Hadoop HA高可用已经完整实现
#增加
export JAVA_HOME=
export HBASE_MANAGES_ZK=false
## 以上配置在三个节点上配置(其实只需在hadoop1和hadoop3 HMaster节点配置),为了避免以后需将hadoop2作为主节点时因之前漏了配置导致启动服务各种报错。
<configuration>
<property>
<name>hbase.rootdirname>
<value>hdfs://hadoopapp/hbasevalue>
property>
<property>
<name>hbase.cluster.distributedname>
<value>truevalue>
property>
<property>
<name>hbase.unsafe.stream.capability.enforcename>
<value>falsevalue>
property>
<property>
<name>hbase.zookeeper.quorumname>
<value>hadoop1,hadoop2,hadoop3value>
property>
<property>
<name>hbase.zookeeper.property.dataDirname>
<value>/opt/module/zookeeper-3.4.14value>
property>
<property>
<name>hbase.zookeeper.property.clientPortname>
<value>2181value>
property>
configuration>
## 以上配置在三个节点配上
vim regionservers
#填写
hadoop1
hadoop2
hadoop3
## 以上在三个节点配置
## 该操作在三个节点上都要执行,这一环节的配置非常关键,HBase团队也给出相关解释:
## 目的是为了HBase能够同步hdfs配置变化,例如当hdfs副本数改为5时,如果不创建这种配置映射,那么HBase还是按默认的3份去执行。
## 若缺少这个软链接,HBase启动集群服务有问题,部分RegionServer无法启动!
ln -s /opt/module/hadoop-3.1.2/etc/hadoop/hdfs-site.xml /opt/module/hbase-2.4.9/conf/hdfs-site.xml
## 查看结果
ll hdfs-site.xml
e>2181
~~~ shell
## 以上配置在三个节点配上
vim regionservers
#填写
hadoop1
hadoop2
hadoop3
## 以上在三个节点配置
## 该操作在三个节点上都要执行,这一环节的配置非常关键,HBase团队也给出相关解释:
## 目的是为了HBase能够同步hdfs配置变化,例如当hdfs副本数改为5时,如果不创建这种配置映射,那么HBase还是按默认的3份去执行。
## 若缺少这个软链接,HBase启动集群服务有问题,部分RegionServer无法启动!
ln -s /opt/module/hadoop-3.1.2/etc/hadoop/hdfs-site.xml /opt/module/hbase-2.4.9/conf/hdfs-site.xml
## 查看结果
ll hdfs-site.xml