搭建hadoop高可用集群,首先确保搭建了hadoop集群,zookeeper集群。hadoop 三个集群节点分别为主节点 master,两个副节点node01、node02。
hadoop集群配置
配置core-site.xml
vi core-site.xml
<configuration> <property> <name>fs.defaultFS</name> <value>hdfs://master:8020</value> </property> <property> <name>hadoop.tmp.dir</name> <value>/usr/local/hadoop/data</value> </property> </configuration>
配置 hdfs-site.xml
vi hdfs-site.xml
<configuration> <property> <name>dfs.replication</name> <value>2</value> </property> <property> <name>dfs.permissions.enabled</name> <value>false</value> </property> <property> <name>dfs.namenode.http-address</name> <value>node01:9870</value> </property> </configuration>
配置 mapred-site.xml
vi mapred-site.xml
<configuration> <property></configuration><name>mapreduce.framework.name</name> <value>yarn</value> </property>
配置 yarn-site.xml
vi yarn-site.xml
<configuration> <property></configuration><name>yarn.resourcemanager.hostname</name> <value>master</value> </property> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> <property> <name>yarn.application.classpath</name> <value>/usr/local/hadoop/etc/hadoop:/usr/local/hadoop/share/hadoop/common/lib/*:/usr/local/hadoop/share/hadoop/common/*:/usr/local/hadoop/share/hadoop/hdfs:/usr/local/hadoop/share/hadoop/hdfs/lib/*:/usr/local/hadoop/share/hadoop/hdfs/*:/usr/local/hadoop/share/hadoop/mapreduce/lib/*:/usr/local/hadoop/share/hadoop/mapreduce/*:/usr/local/hadoop/share/hadoop/yarn:/usr/local/hadoop/share/hadoop/yarn/lib/*:/usr/local/hadoop/share/hadoop/yarn/*</value> </property> <property> <name>yarn.resourcemanager.webapp.address</name> <value>node01:8088</value> </property>
hadoop-ha集群配置
配置 core-site.xml
vi core-site.xml
<configuration> <property> <name>fs.defaultFS</name> <value>hdfs://ns</value> </property></configuration><property> <name>hadoop.tmp.dir</name> <value>/usr/local/hadoop/data</value> </property> <property> <name>io.file.buffer.size</name> <value>131702</value> <description>缓存大小设置,单位为KB,131072KB即为默认的64M</description> </property> <property> <name>ha.zookeeper.quorum</name> <value>master:2181,node01:2181,node02:2181</value> </property> <property> <name>hadoop.proxyuser.hue.hosts</name> <value>*</value> </property> <property> <name>hadoop.proxyuser.hue.groups</name> <value>*</value> </property>
配置 hdfs-site.xml
vi hdfs-site.xml
<configuration></configuration><!-- NameNode数据存储目录 --> <property> <name>dfs.namenode.name.dir</name> <value>file://${hadoop.tmp.dir}/name</value> </property> <!-- DataNode数据存储目录 --> <property> <name>dfs.datanode.data.dir</name> <value>file://${hadoop.tmp.dir}/data</value> </property> <!-- JournalNode数据存储目录 --> <property> <name>dfs.journalnode.edits.dir</name> <value>${hadoop.tmp.dir}/jn</value> </property> <!-- 完全分布式集群名称 --> <property> <name>dfs.nameservices</name> <value>ns</value> </property> <!-- 集群中 NameNode 节点都有哪些 --> <property> <name>dfs.ha.namenodes.ns</name> <value>nn1,nn2,nn3</value> </property> <!-- NameNode 的 RPC 通信地址 --> <property> <name>dfs.namenode.rpc-address.ns.nn1</name> <value>master:8020</value> </property> <property> <name>dfs.namenode.rpc-address.ns.nn2</name> <value>node01:8020</value> </property> <property> <name>dfs.namenode.rpc-address.ns.nn3</name> <value>node02:8020</value> </property> <!-- NameNode 的 http 通信地址 --> <property> <name>dfs.namenode.http-address.ns.nn1</name> <value>master:9870</value> </property> <property> <name>dfs.namenode.http-address.ns.nn2</name> <value>node01:9870</value> </property> <property> <name>dfs.namenode.http-address.ns.nn3</name> <value>node02:9870</value> </property> <!-- 指定 NameNode 元数据在 JournalNode 上的存放位置 --> <property> <name>dfs.namenode.shared.edits.dir</name> <value>qjournal://master:8485;node01:8485;node02:8485/ns</value> </property> <!-- 访问代理类:client 用于确定哪个 NameNode 为 Active --> <property> <name>dfs.client.failover.proxy.provider.ns</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>
配置 mapred-site.xml
vi mapred-site.xml
<configuration> <property></configuration><name>mapreduce.framework.name</name> <value>yarn</value> </property>
配置 yarn-site.xml
vi yarn-site.xml
<configuration> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property></configuration><!-- 开启日志聚集功能 --> <property> <name>yarn.log-aggregation-enable</name> <value>true</value> </property> <!-- 设置日志聚集服务器地址 --> <property> <name>yarn.log.server.url</name> <value>http://master:19888/jobhistory/logs</value> </property> <!-- 设置日志保留时间为 7 天 --> <property> <name>yarn.log-aggregation.retain-seconds</name> <value>604800</value> </property> <!-- 启用 resourcemanager ha --> <property> <name>yarn.resourcemanager.ha.enabled</name> <value>true</value> </property> <!-- 声明 resourcemanager 的地址 --> <property> <name>yarn.resourcemanager.cluster-id</name> <value>cluster-yarn1</value> </property> <!--指定 resourcemanager 的逻辑列表--> <property> <name>yarn.resourcemanager.ha.rm-ids</name> <value>rm1,rm2,rm3</value> </property> <!-- ========== rm1 的配置 ========== --> <!-- 指定 rm1 的主机名 --> <property> <name>yarn.resourcemanager.hostname.rm1</name> <value>master</value> </property> <!-- 指定 rm1 的 web 端地址 --> <property> <name>yarn.resourcemanager.webapp.address.rm1</name> <value>master:8088</value> </property> <!-- 指定 rm1 的内部通信地址 --> <property> <name>yarn.resourcemanager.address.rm1</name> <value>master:8032</value> </property> <!-- 指定 AM 向 rm1 申请资源的地址 --> <property> <name>yarn.resourcemanager.scheduler.address.rm1</name> <value>master:8030</value> </property> <!-- 指定供 NM 连接的地址 --> <property> <name>yarn.resourcemanager.resource-tracker.address.rm1</name> <value>master:8031</value> </property> <!-- ========== rm2 的配置 ========== --> <!-- 指定 rm2 的主机名 --> <property> <name>yarn.resourcemanager.hostname.rm2</name> <value>node01</value> </property> <property> <name>yarn.resourcemanager.webapp.address.rm2</name> <value>node01:8088</value> </property> <property> <name>yarn.resourcemanager.address.rm2</name> <value>node01:8032</value> </property> <property> <name>yarn.resourcemanager.scheduler.address.rm2</name> <value>node01:8030</value> </property> <property> <name>yarn.resourcemanager.resource-tracker.address.rm2</name> <value>node01:8031</value> </property> <!-- ========== rm3 的配置 ========== --> <!-- 指定 rm3 的主机名 --> <property> <name>yarn.resourcemanager.hostname.rm3</name> <value>node02</value> </property> <!-- 指定 rm3 的 web 端地址 --> <property> <name>yarn.resourcemanager.webapp.address.rm3</name> <value>node02:8088</value> </property> <!-- 指定 rm3 的内部通信地址 --> <property> <name>yarn.resourcemanager.address.rm3</name> <value>node02:8032</value> </property> <!-- 指定 AM 向 rm3 申请资源的地址 --> <property> <name>yarn.resourcemanager.scheduler.address.rm3</name> <value>node02:8030</value> </property> <!-- 指定供 NM 连接的地址 --> <property> <name>yarn.resourcemanager.resource-tracker.address.rm3</name> <value>node02:8031</value> </property> <!-- 指定 zookeeper 集群的地址 --> <property> <name>yarn.resourcemanager.zk-address</name> <value>master:2181,node01:2181,node02:2181</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> <!-- 环境变量的继承 --> <property> <name>yarn.nodemanager.env-whitelist</name> <value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLAS SPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAPRED_HOME</value> </property>
将hadoop 复制到节点 “/export/hadoop” 为自己hadoop安装的文件地址
scp -r /export/hadoop node01:/export
scp -r /export/hadoop node02:/export
hadoop-ha启动配置
启动JournalNode服务
JournalNode是Hadoop高可用架构中的一个重要组件,它负责编辑日志的管理和存储,以确保NameNode的数据一致性和高可用性。
先关闭hadoop集群包括hdfs,yarn和zookeeper,咋master节点启动JournalNode。
hdfs --daemon start journalnode
master节点初始化namenode
hdfs namenode -format
三个节点都启动zookeeper
zkServer.sh start
查看zookeeper启动状态,三个节点查看状态,只会有一个节点显示active,是正确的
zkServer.sh status
在master节点初始化ZKFC
这个命令会清除ZKFC的元数据,包括故障转移控制器的状态和配置信息。在使用此命令之前,需要确保ZooKeeper服务已经启动并且可用。该命令的主要作用是初始化或重置ZKFC,以便创建一个新的ZKFC实例或清除旧的配置信息和状态。
hdfs zkfc -formatZK
在node01、node02节点复制NameNode元数据
命令用于将Active NameNode的元数据目录内容复制到Standby NameNode的元数据目录下,以实现两者之间的元数据同步。这一操作通常在HDFS高可用(HA)配置中执行,特别是在初始化Standby NameNode或需要同步两个NameNode的元数据时。执行此命令可以确保Standby NameNode拥有与Active NameNode相同的元数据状态,从而在Active NameNode发生故障时,Standby NameNode能够迅速接管并继续提供服务,实现无缝的故障转移。
hdfs namenode -bootstrapStandby
启动hadoop
start-all.sh #启动全部
start-dfs.sh #启动dfs
start-yarn.sh #启动yarn
查看yarn服务状态
yarn rmadmin -getServiceState rm1
yarn rmadmin -getServiceState rm2
yarn rmadmin -getServiceState rm3
hadoop高可用启动结果入下,即为正确
版权归原作者 prince&陌 所有, 如有侵权,请联系我们删除。