Hadoop HA 配置需要的前置条件
- jdk (此处使用的版本是 jdk-1.8,jdk的环境变量自己写)
- zookeeper(此处使用的版本是 zookeeper-3.8.3)
- hadoop (此处使用的版本是 hadoop-3.3.6)
- 此处配置的hadoop集群是三个节点,分别是master(主节点)、slave1(从节点)、slave2(从节点)
- 关于(主机 ip 映射、免密登录服务、)此处省略
- 以下配置文件出现的某些路径,可进行对应的修改
- 切记!!!一定要记得关闭防火墙
Zookeeper 配置
看这个帖子
https://blog.csdn.net/2203_75584759/article/details/140295222?spm=1001.2014.3001.5501
Hadoop HA 配置
先在每台节点配置环境变量
vim /etc/profile
# HADOOP_HOMEexportHADOOP_HOME=/opt/module/hadoop
exportPATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATHexportHADOOP_MAPRED_HOME=$HADOOP_HOMEexportHADOOP_COMMON_HOME=$HADOOP_HOMEexportHADOOP_HDFS_HOME=$HADOOP_HOMEexportYARN_HOME=$HADOOP_HOME
配置hadoop相关文件
- 在 yarn_env.sh 以及 hadoop_env.sh 中添加JAVA_HOME、和相应组件需要的权限
- hadoop3以上的版本,需要配置权限
1、
vim hadoop-env.sh
exportJAVA_HOME=/opt/module/jdk
exportHDFS_JOURNALNODE_USER=root
exportHDFS_NAMENODE_USER=root
exportHDFS_DATANODE_USER=root
exportHDFS_ZKFC_USER=root
2、
vim yarn-env.sh
exportJAVA_HOME=/opt/module/jdk
exportYARN_RESOURCEMANAGER_USER=root
exportYARN_NODEMANAGER_USER=root
- 对其 hdfs、yarn 文件进行配置
3、
vim core-site.xml
<!-- 把多个 NameNode 的地址组装成一个集群 mycluster --><property><name>fs.defaultFS</name><value>hdfs://hdfscluster</value></property><!-- 指定 hadoop 运行时产生文件的存储目录 --><property><name>hadoop.tmp.dir</name><value>/opt/module/hadoop/data</value></property><!-- 指定 zkfc 要连接的 zkServer 地址 --><property><name>ha.zookeeper.quorum</name><value>master:2181,slave1:2181,slave2:2181</value></property><!-- 用户角色配置,不配置此项会导致web页面报错 --><property><name>hadoop.http.staticuser.user</name><value>root</value></property><!-- 对root用户不进行限制 --><property><name>hadoop.proxyuser.root.hosts</name><value>*</value></property><!-- 对root群组不限制 --><property><name>hadoop.proxyuser.root.groups</name><value>*</value></property>
4、
vim hdfs-site.xml
<!-- 副本数配置 --><property><name>dfs.replication</name><value>2</value></property><!-- NameNode 数据存储目录 --><property><name>dfs.namenode.name.dir</name><value>/opt/module/hadoop/data/namedir</value></property><!-- DataNode 数据存储目录 --><property><name>dfs.datanode.data.dir</name><value>/opt/module/hadoop/data/datadir</value></property><!-- JournalNode 数据存储目录 --><property><name>dfs.journalnode.edits.dir</name><value>/opt/module/hadoop/data/editsdir</value></property><!-- 完全分布式集群名称 --><property><name>dfs.nameservices</name><value>hdfscluster</value></property><!-- 所有的namenode列表 --><property><name>dfs.ha.namenodes.hdfscluster</name><value>nn1,nn2</value></property><!-- NameNode 的 RPC 通信地址 --><property><name>dfs.namenode.rpc-address.hdfscluster.nn1</name><value>master:8020</value></property><property><name>dfs.namenode.rpc-address.hdfscluster.nn2</name><value>slave1:8020</value></property><!-- NameNode 的 http 通信地址 --><property><name>dfs.namenode.http-address.hdfscluster.nn1</name><value>master:50070</value></property><property><name>dfs.namenode.http-address.hdfscluster.nn2</name><value>slave1:50070</value></property><!-- 指定 NameNode 元数据在 JournalNode 上的存放位置 --><property><name>dfs.namenode.shared.edits.dir</name><value>qjournal://master:8485;slave1:8485;slave2:8485/hdfscluster</value></property><!-- 访问代理类:client 用于确定哪个 NameNode 为 Active --><property><name>dfs.client.failover.proxy.provider.hdfscluster</name><value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value></property><!-- 配置隔离机制,即同一时刻只能有一台服务器对外响应 --><property><name>dfs.ha.fencing.methods</name><value>sshfence</value></property><!-- 使用隔离机制时需要 ssh 秘钥登录--><property><name>dfs.ha.fencing.ssh.private-key-files</name><value>/root/.ssh/id_rsa</value></property><!-- 启用 nn 故障自动转移 --><property><name>dfs.ha.automatic-failover.enabled</name><value>true</value></property>
5、
vim yarn-site.xml
<property><name>yarn.resourcemanager.ha.enabled</name><value>true</value></property><property><name>yarn.resourcemanager.cluster-id</name><value>yarncluster</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.webapp.address</name><value>${yarn.resourcemanager.hostname}:8088</value></property><property><name>hadoop.zk.address</name><value>master:2181,slave1:2181,slave2:2181</value></property>
6、
vim mapred-site.xml
<!-- 指定MapReduce程序运行在Yarn上 --><property><name>mapreduce.framework.name</name><value>yarn</value></property><!-- 历史服务器端地址 --><property><name>mapreduce.jobhistory.address</name><value>master:10020</value></property><!-- 历史服务器web端地址 --><property><name>mapreduce.jobhistory.webapp.address</name><value>master:19888</value></property>
7、
vim workers
master
slave1
slave2
集群启动前:
1、每个节点都要启动journalnode ==>
hdfs --daemon start journalnode
注:在每个节点启动完后,去查看journalnode的日志,等三个节点的日志都出现了红色方框内的内容,再进行下一步操作
2、在master节点格式化namenode ==>
hdfs namenode -format
注:出现红色方框内的内容,既 namenode 格式化成功
3、 在master节点格式化zk ==>
hdfs zkfc -formatZK
注:出现红色方框内的内容,既 zkfc 格式化成功
启动集群:
- 在master节点启动hadoop集群 ==>
start-all.sh
- 检查 slave1 中有没有
namenode
进程,若没有namenode
进程,先在slave1同步namenode
的信息 ==>hdfs namenode -bootstrapStandby
然后在slave1上启动备用namenode
进程 ==>hdfs --daemon start namenode
注:出现红色方框内的内容,既为成功同步 namenode 信息
- 若slave1中没有
resourceManager
进程 ==>yarn-daemon.sh start resourcemanager
若
hdfs ha、yarn ha
成功启动,则对应的节点,有对应的进程:
master、slave1:
NameNode
JournalNode
NodeManager
ResourceManager
DataNode
DFSZKFailoverController
QuorumPeerMain
slave2:
NodeManager
JournalNode
DataNode
QuorumPeerMain
版权归原作者 操练小白 所有, 如有侵权,请联系我们删除。