当前位置: 代码迷 >> 综合 >> 5节点Hadoop-2.6.0-cdh5.14.2 HA集群搭建详细步骤
  详细解决方案

5节点Hadoop-2.6.0-cdh5.14.2 HA集群搭建详细步骤

热度:10   发布时间:2024-02-09 17:22:31.0

目录

一、集群规划

二、五节点Hadoop HA搭建

1. 虚拟机环境准备

2. 安装ZooKeeper集群

3. 五节点Hadoop HA搭建

3.1 解压hadoop压缩包

3.2 修改hadoop-env.sh

3.3 修改core-site.xml

3.4 修改hdfs-site.xml

3.5 修改mapred-site.xml

3.6 修改yarn-site.xml

3.7 修改slaves

3.8 远程拷贝hadoop文件夹

3.9 修改两个RM的yarn-site.xml

3.10 配置环境变量

4. 启动与初始化hadoop集群

4.1 启动zookeeper集群

4.2 启动HDFS

4.3 启动YARN

4.4 启动JobHistory

5. 验证集群是否可用

5.1 验证HDFS HA

5.2 验证Yarn HA

6. 集群常用命令

6.1 关闭Hadoop HA集群

6.2 常用命令


一、集群规划

说明:

  • 集群共5个节点,主机名分别是node01、node02、node03、node04、node05

  • 初始启动集群

    • node01上运行active namenode即主namenode;node02上运行standby namenode即从namenode

    • node04上运行主resourcemanager;node05上运行从resourcemanager

  • 每个节点运行的进程如下表

机器名 运行进程
node01 NameNode/zkfc/Zookeeper/Journalnode/DataNode/NodeManager
node02 NameNode/zkfc/Zookeeper/Journalnode/DataNode/NodeManager
node03 Zookeeper/Journalnode/DataNode/NodeManager/JobHistoryServer
node04 ResourceManager
node05 ResourceManager

二、五节点Hadoop HA搭建

1. 虚拟机环境准备

  • 准备5台虚拟机

  • 在做五节点hadoop HA集群搭建之前,要求先完成每台虚拟机的基本环境准备

    • 每个节点都要做好“在node01上开始解压hadoop的tar.gz包之前的环境配置”

    • 主要包括如下步骤:

      • windows|mac安装VMWare虚拟化软件

      • VMWare下安装CenoOS7

      • 虚拟机关闭防火墙

      • 禁用selinux

      • 配置虚拟网卡

      • 配置虚拟机网络

      • 安装JDK

      • 配置时间同步

      • 修改主机名

      • 修改ip地址

      • 修改/etc/hosts

      • 各节点免密钥登陆

      • 重启虚拟机

2. 安装ZooKeeper集群

Hadoop高可用集群需要使用ZooKeeper集群做分布式协调;所以先安装ZooKeeper集群

  • 在node01、node02、node03上安装ZooKeeper集群(Zookeeper(1)集群的安装部署)

3. 五节点Hadoop HA搭建

注意:

①3.1到3.8在node01上操作

此文档使用普通用户操作,如hadoop

hadoop安装到用户主目录下,如/xsluo/install

请根据自己的实际情况修改

3.1 解压hadoop压缩包

  • hadoop压缩包hadoop-2.6.0-cdh5.14.2.tar.gz上传到node01的/xsluo/soft路径中

  • 解压hadoop压缩包到/xsluo/install

#解压hadoop压缩包到/xsluo/install
[hadoop@node01 ~]$ cd
[hadoop@node01 ~]$ cd /xsluo/soft/
[hadoop@node01 soft]$ tar -xzvf hadoop-2.6.0-cdh5.14.2.tar.gz -C /xsluo/install/

3.2 修改hadoop-env.sh

  • 进入hadoop配置文件路径$HADOOP_HOME/etc/hadoop

[hadoop@node01 soft]$ cd /xsluo/install/hadoop-2.6.0-cdh5.14.2/
[hadoop@node01 hadoop-2.6.0-cdh5.14.2]$ cd etc/hadoop/
  • 修改hadoop-env.sh,修改JAVA_HOME值为jdk解压路径;保存退出
export JAVA_HOME=/xsluo/install/jdk1.8.0_141

注意:JAVA_HOME值修改为自己jdk的实际目录

3.3 修改core-site.xml

注意:

情况一:值/xsluo/install/hadoop-2.6.0-cdh5.14.2/tmp根据实际情况修改

情况二:值node01:2181,node02:2181,node03:2181根据实际情况修改,修改成安装了zookeeper的虚拟机的主机名

<configuration><!-- 指定hdfs的nameservice id为ns1 --><property><name>fs.defaultFS</name><value>hdfs://ns1</value></property><!-- 指定hadoop临时文件存储的基目录 --><property><name>hadoop.tmp.dir</name><value>/xsluo/install/hadoop-2.6.0-cdh5.14.2/tmp</value></property><!-- 指定zookeeper地址,ZKFailoverController使用 --><property><name>ha.zookeeper.quorum</name><value>node01:2181,node02:2181,node03:2181</value></property>
</configuration>

3.4 修改hdfs-site.xml

注意:

情况一:属性值qjournal://node01:8485;node02:8485;node03:8485/ns1中的主机名,修改成实际安装zookeeper的虚拟机的主机名

情况二:属性值/xsluo/install/hadoop-2.6.0-cdh5.14.2/journal中”/xsluo/install/hadoop-2.6.0-cdh5.14.2”替换成实际hadoop文件夹的路径

情况三:属性值/home/hadoop/.ssh/id_rsa中/home/hadoop根据实际情况替换

<configuration><!--指定hdfs的nameservice列表,多个之前逗号分隔;此处只有一个ns1,需要和core-site.xml中的保持一致 --><property><name>dfs.nameservices</name><value>ns1</value></property><!-- ns1下面有两个NameNode,分别是nn1,nn2 --><property><name>dfs.ha.namenodes.ns1</name><value>nn1,nn2</value></property><!-- nn1的RPC通信地址 --><property><name>dfs.namenode.rpc-address.ns1.nn1</name><value>node01:8020</value></property><!-- nn1的http通信地址,web访问地址 --><property><name>dfs.namenode.http-address.ns1.nn1</name><value>node01:50070</value></property><!-- nn2的RPC通信地址 --><property><name>dfs.namenode.rpc-address.ns1.nn2</name><value>node02:8020</value></property><!-- nn2的http通信地址,web访问地址 --><property><name>dfs.namenode.http-address.ns1.nn2</name><value>node02:50070</value></property><!-- 指定NameNode的元数据在JournalNode上的存放位置 --><property><name>dfs.namenode.shared.edits.dir</name><value>qjournal://node01:8485;node02:8485;node03:8485/ns1</value></property><!-- 指定JournalNode在本地磁盘存放数据的位置 --><property><name>dfs.journalnode.edits.dir</name><value>/xsluo/install/hadoop-2.6.0-cdh5.14.2/journal</value></property><!-- 开启NameNode失败自动切换 --><property><name>dfs.ha.automatic-failover.enabled</name><value>true</value></property><!-- 此类决定哪个namenode是active,切换active和standby --><property><name>dfs.client.failover.proxy.provider.ns1</name><value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value></property><!-- 配置隔离机制方法,多个机制用换行分割,即每个机制暂用一行--><property><name>dfs.ha.fencing.methods</name><value>sshfenceshell(/bin/true)</value></property><!-- 使用sshfence隔离机制时需要ssh免密登陆到目标机器 --><property><name>dfs.ha.fencing.ssh.private-key-files</name><value>/home/hadoop/.ssh/id_rsa</value></property><!-- 配置sshfence隔离机制超时时间 --><property><name>dfs.ha.fencing.ssh.connect-timeout</name><value>30000</value></property>
</configuration>

3.5 修改mapred-site.xml

  • 重命名文件

[hadoop@node01 hadoop]$ mv mapred-site.xml.template mapred-site.xml
  • 修改mapred-site.xml
<configuration><!-- 指定运行mr job的运行时框架为yarn --><property><name>mapreduce.framework.name</name><value>yarn</value></property><!-- MapReduce JobHistory Server IPC host:port --><property><name>mapreduce.jobhistory.address</name><value>node03:10020</value></property><!-- MapReduce JobHistory Server Web UI host:port --><property><name>mapreduce.jobhistory.webapp.address</name><value>node03:19888</value></property>
</configuration>

3.6 修改yarn-site.xml

注意:

情况一:属性yarn.resourcemanager.hostname.rm1的值node04根据实际情况替换

情况二:属性yarn.resourcemanager.hostname.rm2的值node05根据实际情况替换

情况三:属性值node01:2181,node02:2181,node03:2181根据实际情况替换;替换成实际安装zookeeper的虚拟机的主机名

<configuration><!-- 是否启用日志聚合.应用程序完成后,日志汇总收集每个容器的日志,这些日志移动到文件系统,例如HDFS. --><!-- 用户可以通过配置"yarn.nodemanager.remote-app-log-dir"、"yarn.nodemanager.remote-app-log-dir-suffix"来确定日志移动到的位置 --><!-- 用户可以通过应用程序时间服务器访问日志 --><!-- 启用日志聚合功能,应用程序完成后,收集各个节点的日志到一起便于查看 --><property><name>yarn.log-aggregation-enable</name><value>true</value></property><!-- 开启RM高可靠 --><property><name>yarn.resourcemanager.ha.enabled</name><value>true</value></property><!-- 指定RM的cluster id为yrc,意为yarn cluster --><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>node04</value></property><!-- 指定第二个RM的地址 --><property><name>yarn.resourcemanager.hostname.rm2</name><value>node05</value></property><!-- 配置第一台机器的resourceManager通信地址 --><!--客户端通过该地址向RM提交对应用程序操作--><property><name>yarn.resourcemanager.address.rm1</name><value>node04:8032</value></property><!--向RM调度资源地址--> <property><name>yarn.resourcemanager.scheduler.address.rm1</name><value>node04:8030</value></property><!--NodeManager通过该地址交换信息--><property><name>yarn.resourcemanager.resource-tracker.address.rm1</name><value>node04:8031</value></property><!--管理员通过该地址向RM发送管理命令--><property><name>yarn.resourcemanager.admin.address.rm1</name><value>node04:8033</value></property><!--RM HTTP访问地址,查看集群信息--><property><name>yarn.resourcemanager.webapp.address.rm1</name><value>node04:8088</value></property><!-- 配置第二台机器的resourceManager通信地址 --><property><name>yarn.resourcemanager.address.rm2</name><value>node05:8032</value></property><property><name>yarn.resourcemanager.scheduler.address.rm2</name><value>node05:8030</value></property><property><name>yarn.resourcemanager.resource-tracker.address.rm2</name><value>node05:8031</value></property><property><name>yarn.resourcemanager.admin.address.rm2</name><value>node05:8033</value></property><property><name>yarn.resourcemanager.webapp.address.rm2</name><value>node05:8088</value></property><!--开启resourcemanager自动恢复功能--><property><name>yarn.resourcemanager.recovery.enabled</name><value>true</value></property>	<!--在node4上配置rm1,在node5上配置rm2,注意:一般都喜欢把配置好的文件远程复制到其它机器上,但这个在YARN的另一个机器上一定要修改,其他机器上不配置此项--><!--<property>       <name>yarn.resourcemanager.ha.id</name><value>rm1</value><description>If we want to launch more than one RM in single node, we need this configuration</description></property>--><!--用于持久存储的类。尝试开启--><property><name>yarn.resourcemanager.store.class</name><!-- 基于zookeeper的实现 --><value>org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore</value></property><!-- 单个任务可申请最少内存,默认1024MB --><property><name>yarn.scheduler.minimum-allocation-mb</name><value>512</value></property><!--多长时间聚合删除一次日志 此处--><property><name>yarn.log-aggregation.retain-seconds</name><value>2592000</value><!--30 day--></property><!--时间在几秒钟内保留用户日志。只适用于如果日志聚合是禁用的--><property><name>yarn.nodemanager.log.retain-seconds</name><value>604800</value><!--7 day--></property><!-- 指定zk集群地址 --><property><name>yarn.resourcemanager.zk-address</name><value>node01:2181,node02:2181,node03:2181</value></property><!-- 逗号隔开的服务列表,列表名称应该只包含a-zA-Z0-9_,不能以数字开始--><property><name>yarn.nodemanager.aux-services</name><value>mapreduce_shuffle</value></property>
</configuration>

3.7 修改slaves

node01、node02、node03上运行了datanode、nodemanager,所以修改slaves内容替换为:

node01
node02
node03

3.8 远程拷贝hadoop文件夹

拷贝到node02~node05

[hadoop@node01 hadoop]$ scp -r /xsluo/install/hadoop-2.6.0-cdh5.14.2/ node02:/xsluo/install/
[hadoop@node01 hadoop]$ scp -r /xsluo/install/hadoop-2.6.0-cdh5.14.2/ node03:/xsluo/install/
[hadoop@node01 hadoop]$ scp -r /xsluo/install/hadoop-2.6.0-cdh5.14.2/ node04:/xsluo/install/
[hadoop@node01 hadoop]$ scp -r /xsluo/install/hadoop-2.6.0-cdh5.14.2/ node05:/xsluo/install/

3.9 修改两个RM的yarn-site.xml

node04上,找到属性yarn.resourcemanager.ha.id去除注释①、②

[hadoop@node04 ~]$ cd /xsluo/install/hadoop-2.6.0-cdh5.14.2/etc/hadoop
[hadoop@node04 hadoop]$ vim yarn-site.xml 

node05

  • 找到属性yarn.resourcemanager.ha.id去除注释①、②

  • 修改成rm2

[hadoop@node05 ~]$ cd /xsluo/install/hadoop-2.6.0-cdh5.14.2/etc/hadoop/
[hadoop@node05 hadoop]$ vim yarn-site.xml

修改后,结果如下

3.10 配置环境变量

  • node01到node05五个节点都配置环境变量

#将hadoop添加到环境变量中
vim /etc/profile
  • 添加内容如下(注意:若HADOOP_HOME已经存在,则修改):

export HADOOP_HOME=/xsluo/install/hadoop-2.6.0-cdh5.14.2/
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
  • 编译文件,使新增环境变量生效

source /etc/profile

4. 启动与初始化hadoop集群

注意:严格按照下面的步骤 先检查各台hadoop环境变量是否设置好

4.1 启动zookeeper集群

注意:根据zookeeper实际安装情况,启动zookeeper

分别在node01、node02、node03上启动zookeeper

zkServer.sh start

#查看状态:一个为leader,另外两个为follower

zkServer.sh status

4.2 启动HDFS

4.2.1 格式化ZK

node01上执行即可

  • 集群有两个namenode,分别在node01、node02上

  • 每个namenode对应一个zkfc进程;

  • 在主namenode node01上格式化zkfc

hdfs zkfc -formatZK

4.2.2 启动journalnode

  • node01上执行

    • 会启动node01、node02、node03上的journalnode

    • 因为使用的是hadoop-daemons.sh

hadoop-daemons.sh start journalnode
  • 运行jps命令检验,node01、node02、node03上多了JournalNode进程

4.2.3 格式化HDFS

在node01上执行

根据集群规划node01、node02上运行namenode;所以只在主namenode节点即node01上执行命令:

  • 此命令慎用;只在集群搭建(初始化)时使用一次;

  • 一旦再次使用,会将HDFS上之前的数据格式化删除掉

hdfs namenode -format

4.2.4 初始化元数据、启动主NN

  • node01上执行(主namenode)

hdfs namenode -initializeSharedEdits -force
#启动HDFS
start-dfs.sh

4.2.5 同步元数据信息、启动从NN

  • node02上执行(从namenode)

  • 同步元数据信息,并且设置node02上namenode为standBy状态

hdfs namenode -bootstrapStandby
hadoop-daemon.sh start namenode

4.2.6 JPS查看进程

  • node01上

  • node02上

  • node03上

4.3 启动YARN

4.6.1 主resourcemanager

  • node04上执行(主resourcemanager

    • 把namenode和resourcemanager部署在不同节点,是因为性能问题,因为他们都要占用大量资源

    • :在node04上启动yarn之前,先依次从node04 ssh远程连接到node01、node02、node03、node04、node05;因为初次ssh时,需要交互,输入yes,回车

start-yarn.sh

4.6.2 从resourcemanager

  • 从resourcemanagernode05上启动rm

yarn-daemon.sh start resourcemanager

4.6.3 查看resourceManager状态

  • node04上,它的resourcemanager的Id是rm1

yarn rmadmin -getServiceState rm1
  • node05上,它的resourcemanager的Id是rm2
yarn rmadmin -getServiceState rm2

4.4 启动JobHistory

  • node03上执行

mr-jobhistory-daemon.sh start historyserver

5. 验证集群是否可用

5.1 验证HDFS HA

5.1.1 访问WEB UI

node01、node02一主一备

http://node01:50070

http://node02:50070

5.1.2 模拟主备切换

  • 在主namenode节点,运行

hadoop-daemon.sh stop namenode
  • 访问之前为"备namenode"的WEB UI;发现状态更新为active

  • 或者使用命令查看状态

hdfs haadmin -getServiceState nn2

  • 启动刚才手动停掉的namenode
hadoop-daemon.sh start namenode
  • 访问它的WEB UI,发现状态更新为standby

  • 或者使用命令查看状态

hdfs haadmin -getServiceState nn1

5.2 验证Yarn HA

node04、node05主备切换

5.2.1 访问WEB UI

  • node04浏览器访问

http://node04:8088/cluster/cluster

  • node05浏览器访问
http://node05:8088/cluster/cluster

5.2.2 模拟主备切换

  • 在主resourcemanager节点,运行

yarn-daemon.sh stop resourcemanager
  • 访问之前为"备resourcemanager"的WEB UI;发现状态更新为active

  • 或者命令查看状态

yarn rmadmin -getServiceState rm2

  • 启动刚才手动停掉的resourcemanager
yarn-daemon.sh start resourcemanager
  • 访问它的WEB UI,发现状态更新为standby

  • 或者命令查看状态

yarn rmadmin -getServiceState rm1

5.2.3 运行MR示例

  • 运行一下hadoop示例中的WordCount程序:

hadoop fs -put /xsluo/install/hadoop-2.6.0-cdh5.14.2/LICENSE.txt /
hadoop jar /xsluo/install/hadoop-2.6.0-cdh5.14.2/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.6.0-cdh5.14.2.jar wordcount /LICENSE.txt /w0727

6. 集群常用命令

6.1 关闭Hadoop HA集群

正确指令执行顺序如下

  • 主namenode上运行

stop-dfs.sh
  • 主resoucemanager上运行

stop-yarn.sh
  • 从resoucemanager上运行

yarn-daemon.sh stop resourcemanager
  • 关闭zookeeper集群;每个zk服务器运行

zkServer.sh stop

6.2 常用命令

  • 单独启动namenode

hadoop-daemon.sh start namenode
  • 单独启动datanode

hadoop-daemon.sh start datanode
  • 单独启动journalnode

hadoop-daemon.sh start journalnode
  • 启动zookeeper

./zkServer.sh start
  • 启动hdfs

start-dfs.sh
  • 启动yarn

start-yarn.sh
  • 单独启动resorucemanager

yarn-daemon.sh start resouremanger
  • 查看namenode状态(namenode1)

hdfs haadmin -getServiceState nn1
  • 查看resourcemanager状态(resourcemanager2)

yarn rmadmin -getServiceState rm2