Hadoop 分布式集群搭建

HDFS分布式集群搭建

  • 一、部署规划
    • [1.1 进程规划](#1.1 进程规划)
    • [1.2 软件规划](#1.2 软件规划)
    • [1.3 用户规划](#1.3 用户规划)
    • [1.4 目录规划](#1.4 目录规划)
  • [二、 搭建HDFS 分布式集群](#二、 搭建HDFS 分布式集群)
    • [2.1 HDFS 集群配置](#2.1 HDFS 集群配置)
      • [2.1.1 下载安装 Hadoop](#2.1.1 下载安装 Hadoop)
      • [2.1.2 修改 hadoop-env.sh 配置文件](#2.1.2 修改 hadoop-env.sh 配置文件)
      • [2.1.3 修改 core-site.xml 配置文件](#2.1.3 修改 core-site.xml 配置文件)
      • [2.1.4 修改 hdfs-site.xml 配置文件](#2.1.4 修改 hdfs-site.xml 配置文件)
      • [2.1.5 修改 slaves 配置文件](#2.1.5 修改 slaves 配置文件)
      • [2.1.6 配置文件同步集群其他节点](#2.1.6 配置文件同步集群其他节点)
    • [2.2 启动 zookeeper 集群](#2.2 启动 zookeeper 集群)
    • [2.3 启动 Journalnode 集群](#2.3 启动 Journalnode 集群)
    • [2.4 格式化主节点 NameNode](#2.4 格式化主节点 NameNode)
    • [2.5 备用 NameNode 同步主节点元数据](#2.5 备用 NameNode 同步主节点元数据)
    • [2.6 关闭 Journalnode 集群](#2.6 关闭 Journalnode 集群)
    • [2.7 一键启动 HDFS 集群](#2.7 一键启动 HDFS 集群)
    • [2.8 HDFS 集群测试](#2.8 HDFS 集群测试)
  • [三、部署 YARN 集群搭建](#三、部署 YARN 集群搭建)
    • [3.1 修改 mapred-site.xml 配置](#3.1 修改 mapred-site.xml 配置)
    • [3.2 修改 yarn-site.xml 配置](#3.2 修改 yarn-site.xml 配置)
    • [3.3 向所有节点同步 YARN 配置文件](#3.3 向所有节点同步 YARN 配置文件)
    • [3.4 启动 YARN 集群](#3.4 启动 YARN 集群)
      • [3.4.1 启动 YARN 集群](#3.4.1 启动 YARN 集群)
      • [3.4.2 启动备用 ResourceManager](#3.4.2 启动备用 ResourceManager)
    • [3.5 YARN 集群测试](#3.5 YARN 集群测试)
      • [3.5.1 shell 命令查看RM状态](#3.5.1 shell 命令查看RM状态)
      • [3.5.2 Web 界面查看 YARN 集群](#3.5.2 Web 界面查看 YARN 集群)
      • [3.5.3 测试 YARN 集群是否可以正常运行 MapReduce程序](#3.5.3 测试 YARN 集群是否可以正常运行 MapReduce程序)

在此之前已经搭建 ZooKeeper 集群,可以参考《部署伪分布式 Hadoop集群》

一、部署规划

1.1 进程规划

守护进程 hadoop1/192.168.220.151 hadoop2/192.168.220.152 hadoop3/192.168.220.153
NameNode
DataNode
ResourceManager
NodeManager
Journalnode
Zookeeper

1.2 软件规划

软件 版本
JDK JDK 1.8
CentOS CentOS 7
Zookeeper Apache Zookeeper 3.8.4
Hadoop Apache Hadoop 2.10.2

1.3 用户规划

节点名称 用户组 用户
hadoop1 root root
hadoop1 root root
hadoop1 root root

备注 此处的用户组和用户 也最好自己创建用户,如 hadoop

1.4 目录规划

名称 路径
所有软件目录 /usr/local/
所有软件目录 /usr/local/data

二、 搭建HDFS 分布式集群

2.1 HDFS 集群配置

2.1.1 下载安装 Hadoop

可以参考文章《部署伪分布式 Hadoop集群》:2.2 章节部分

2.1.2 修改 hadoop-env.sh 配置文件

hadoop-env.sh 文件主要配置跟 hadoop 环境相关的变量,这里主要修改 JAVA_HOME的安装目录,具体操作如下所示。

bash 复制代码
[root@hadoop1 hadoop]# vim /usr/local/hadoop/etc/hadoop/hadoop-env.sh 
# 修改jdk 的安装目录
export JAVA_HOME=/usr/local/jdk

2.1.3 修改 core-site.xml 配置文件

core-site.xml文件主要配置 Hadoop 的公有属性,具体需要配置的每个属性如下所示。

bash 复制代码
[root@hadoop1 hadoop]# vim /usr/local/hadoop/etc/hadoop/core-site.xml 

修改内容如下:

powershell 复制代码
<configuration>
<!--这里的值指的是默认的 HDFS 路径,取名为 mycluster-->
<property>
        <name>fs.defaultFS</name>
        <value>hdfs:mycluster</value>
</property>
<!--hadoop 的临时目录,目录需要我们自己创建-->
<property>
        <name>hadoop.tmp.dir</name>
        <value>/usr/local/data/tmp</value>
</property>
<!--配置 Zookeeper 管理 HDFS-->
<property>
        <name>ha.zookeeper.quorum</name>
        <value>hadoop1:2181,hadoop2:2181,hadoop3:2181</value>
</property>
</configuration>

2.1.4 修改 hdfs-site.xml 配置文件

hdfs-site.xml 文件主要配置跟 HDFS 相关的属性,具体需要配置的每个属性如下所示。

bash 复制代码
[root@hadoop1 local]# vim /usr/local/hadoop/etc/hadoop/hdfs-site.xml 

修改内容如下:

powershell 复制代码
<configuration>
	<property>
                <name>dfs.replication</name>
                <value>3</value>
        </property>
		<!--数据块副本数为3-->
	<property>
                <name>dfs.permissions</name>
                <value>false</value>
        </property>
	<property>
                <name>dfs.permissions.enabled</name>
                <value>false</value>
        </property>
		<!--权限默认配置为false-->
	<property>
                <name>dfs.nameservices</name>
                <value>mycluster</value>
        </property>
		<!--命名空间,它的值与fs.defaultFS的值要对应,namenode高可用之后有两个namenode,mycluster是对外提供的统一入口-->
	<property>
                <name>dfs.ha.namenodes.mycluster</name>
                <value>nn1,nn2</value>
        </property>
		<!-- 指定 nameService 是 mycluster时的nameNode有哪些,这里的值也是逻辑名称,名字随便起,相互不重复即可-->
        <property>
                <name>dfs.namenode.rpc-address.mycluster.nn1</name>
                <value>hadoop1:9000</value>
        </property>
        <property>
                <name>dfs.namenode.http-address.mycluster.nn1</name>
                <value>hadoop1:50070</value>
        </property>
	<property>
                <name>dfs.namenode.rpc-address.mycluster.nn2</name>
                <value>hadoop2:9000</value>
        </property>
        <property>
                <name>dfs.namenode.http-address.mycluster.nn2</name>
                <value>hadoop2:50070</value>
        </property>
	<property>
                <name>dfs.ha.automatic-failover.enabled</name>
                <value>true</value>
        </property>
		<!--启动故障自动恢复-->
        <property>
                <name>dfs.namenode.shared.edits.dir</name>
                <value>qjournal://hadoop1:8485;hadoop2:8485;hadoop3:8485/mycluster</value>
        </property>
		<!--指定NameNode的元数据在JournalNode上的存放位置-->
	<property>
                <name>dfs.client.failover.proxy.provider.mycluster</name>
                <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
        </property>
		<!--指定 mycluster 出故障时,哪个实现类负责执行故障切换-->
        <property>
                <name>dfs.journalnode.edits.dir</name>
                <value>/usr/local/data/journaldata/jn</value>
        </property>
		<!-- 指定JournalNode在本地磁盘存放数据的位置 -->
	<property>
                <name>dfs.ha.fencing.methods</name>
                <value>shell(/bin/true)</value>
        </property>
		<!-- 配置隔离机制,shell通过ssh连接active namenode节点,杀掉进程-->
        <property>
                <name>dfs.ha.fencing.ssh.private-key-files</name>
                <value>/root/.ssh/id_rsa</value>
        </property>
		<!-- 为了实现SSH登录杀掉进程,还需要配置免密码登录的SSH密匙信息 -->
	<property>
                <name>dfs.ha.fencing.ssh.connect-timeout</name>
                <value>10000</value>
        </property>
        <property>
                <name>dfs.namenode.handler.count</name>
                <value>100</value>
        </property>
</configuration>

2.1.5 修改 slaves 配置文件

bash 复制代码
[root@hadoop1 local]# vim /usr/local/hadoop/etc/hadoop/slaves 

修改如下内容:

powershell 复制代码
hadoop1
hadoop2
hadoop3

2.1.6 配置文件同步集群其他节点

powershell 复制代码
[root@hadoop1 local]# deploy.sh usr/local/hadoop-2.10.2 /usr/local/ slave

备注deploy.sh 是工具脚本,支持将 usr/local/hadoop-2.10.2 文件推送到 slave组当中的 /usr/local 目录下

2.2 启动 zookeeper 集群

powershell 复制代码
[root@hadoop1 local]# runRemoteCmd.sh "/usr/local/zookeeper/bin/zkServer.sh start" all
[root@hadoop1 local]# runRemoteCmd.sh "/usr/local/zookeeper/bin/zkServer.sh status" all

备注runRemoteCmd.sh 是工具脚本,支持按照分组执行脚本,上面脚本表示在所有服务器执行脚本:/usr/local/zookeeper/bin/zkServer.sh start

2.3 启动 Journalnode 集群

在集群所有节点分布启动 Journalnode 服务,具体操作如下所示。

powershell 复制代码
[root@hadoop1 local]# runRemoteCmd.sh "/usr/local/hadoop/sbin/hadoop-daemon.sh start journalnode" all
[root@hadoop1 local]# jps

2.4 格式化主节点 NameNode

在 hadoop1 节点(NameNode 主节点)上,使用如下命令对 NameNode 进行格式化。

powershell 复制代码
[root@hadoop1 hadoop]# /usr/local/hadoop/bin/hdfs namenode -format  // NameNode 格式化
[root@hadoop1 hadoop]# /usr/local/hadoop/bin/hdfs zkfc -formatZK  // 格式化高可用
[root@hadoop1 hadoop]# /usr/local/hadoop/bin/hdfs namenode  // 启动 namenode 节点



2.5 备用 NameNode 同步主节点元数据

在 hadoop1 节点启动 NameNode 服务的同时,需要在 hadoop2 节点(NameNode 备用节点)上执行如下命令同步主节点的元数据

javascript 复制代码
[root@hadoop2 local]# /usr/local/hadoop/bin/hdfs namenode -bootstrapStandby

2.6 关闭 Journalnode 集群

hadoop2节点同步完主节点元数据之后,紧接着在hadoop1节点上,按下(Ctrl+C)组合键来结束 NameNode 进程,然后关闭所有节点上面的Jounalnode,进程,具体操作如下所示。

javascript 复制代码
[root@hadoop1 local]# runRemoteCmd.sh "/usr/local/hadoop/sbin/hadoop-daemon.sh stop journalnode" all

2.7 一键启动 HDFS 集群

如果上面操作没有问题,在 hadoop1 节点上,可以使用脚本一键启动 HDFS 集群所有相关进程

javascript 复制代码
[root@hadoop1 local]# /usr/local/hadoop/sbin/start-dfs.sh 

2.8 HDFS 集群测试

在浏览器中输入网址 http://hadoop1:50070,通过 Web 界面査看 hadoop1 节点的NameNode 的状态,结果如图 6-2所示。该节点的状态为 active,表示 HDFS 可以通过 hadoop1节点的 NameNode 对外提供服务。

三、部署 YARN 集群搭建

3.1 修改 mapred-site.xml 配置

mapred-site.xml 文件主要配置跟 MapReduce 相关的属性,这里主要将 MapReduce 的运行环境指定为 YARN ,核心配置如下所示

javascript 复制代码
[root@hadoop1 hadoop]# vim /usr/local/hadoop/etc/hadoop/mapred-site.xml

添加如下内容:

javascript 复制代码
<!--MapReduce以yarn模式运行-->
<configuration>
<property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
</property>
</configuration>

3.2 修改 yarn-site.xml 配置

yarn-site.xml 文件主要配置跟 YARN 相关的属性,核心配置如下所示。

javascript 复制代码
[root@hadoop1 hadoop]# vim /usr/local/hadoop/etc/hadoop/mapred-site.xml

添加如下内容:

javascript 复制代码
<configuration>
<property>
	<name>yarn.resourcemanager.connect.retry-interval.ms</name>
	<value>2000</value>
</property>
<property>
	<name>yarn.resourcemanager.ha.enabled</name>
	<value>true</value>
</property>
<!--打开高可用-->
<property>
	<name>yarn.resourcemanager.ha.automatic-failover.enabled</name>
	<value>true</value>
</property>
<!--启动故障自动恢复-->
<property>
	<name>yarn.resourcemanager.ha.automatic-failover.embedded</name>
	<value>true</value>
</property>
<!--rm启动内置选举active-->
<property>
	<name>yarn.resourcemanager.cluster-id</name>
	<value>yarn-rm-cluster</value>
</property>
<!--给yarn cluster 取个名字yarn-rm-cluster-->
<property>
	<name>yarn.resourcemanager.ha.rm-ids</name>
	<value>rm1,rm2</value>
</property>
<!--ResourceManager高可用 rm1,rm2-->
<property>
	<name>yarn.resourcemanager.hostname.rm1</name>
	<value>hadoop1</value>
</property>
<property>
	<name>yarn.resourcemanager.hostname.rm2</name>
	<value>hadoop2</value>
</property>
<property>
	<name>yarn.resourcemanager.recovery.enabled</name>
	<value>true</value>
</property>
<!--启用resourcemanager 自动恢复-->
<property>
	<name>hadoop.zk.address</name>
	<value>hadoop1:2181,hadoop2:2181,hadoop3:2181</value>
</property>
<!--配置Zookeeper地址作为状态存储和leader选举-->
<property>
	<name>yarn.resourcemanager.address.rm1</name>
	<value>hadoop1:8032</value>
</property>
<!--rm1端口号-->
<property>
	<name>yarn.resourcemanager.scheduler.address.rm1</name>
	<value>hadoop1:8034</value>
</property>
<!-- rm1调度器的端口号-->
<property>
	<name>yarn.resourcemanager.webapp.address.rm1</name>
	<value>hadoop1:8088</value>
</property>
<!-- rm1 webapp端口号-->
<property>
	<name>yarn.resourcemanager.address.rm2</name>
	<value>hadoop2:8032</value>
</property>
<property>
	<name>yarn.resourcemanager.scheduler.address.rm2</name>
	<value>hadoop2:8034</value>
</property>
<property>
	<name>yarn.resourcemanager.webapp.address.rm2</name>
	<value>hadoop2:8088</value>
</property>
<property>
	<name>yarn.nodemanager.aux-services</name>
	<value>mapreduce_shuffle</value>
</property>
<property>
	<name>yarn.nodemanager.aux-services.mapreduce_shuffle.class</name>
	<value>org.apache.hadoop.mapred.ShuffleHandler</value>
</property>
<!--执行MapReduce需要配置的shuffle过程-->
<property>
        <name>yarn.nodemanager.vmem-check-enabled</name>
        <value>false</value>
</property>
<property>
        <name>yarn.nodemanager.vmem-pmem-ratio</name>
        <value>4</value>
</property>
</configuration>

3.3 向所有节点同步 YARN 配置文件

在 hadoop1 节点上修改完 YARN 相关配置之后,将修改的配置文件远程复制到 hadoop2节点和 hadoop3 节点,具体操作如下所示。

javascript 复制代码
[root@hadoop1 hadoop]# deploy.sh /usr/local/hadoop/etc/hadoop/mapred-site.xml /usr/local/hadoop/etc/hadoop/ slave
[root@hadoop1 hadoop]# deploy.sh /usr/local/hadoop/etc/hadoop/yarn-site.xml /usr/local/hadoop/etc/hadoop/ slave

3.4 启动 YARN 集群

YARN HA 的实现依赖于 Zookeeper,所以需要优先启动 Zookeeper 集群。因为前面操作已经启动 Zookeeper 集群,所以该步骤可以跳过。

3.4.1 启动 YARN 集群

在 hadoop1 节点上,使用脚本一键启动 YARN 集群,具体操作如下所示:

javascript 复制代码
[root@hadoop1 hadoop]# /usr/local/hadoop/sbin/start-yarn.sh 

3.4.2 启动备用 ResourceManager

因为 start-yarn.sh 脚本不包含启动备用 ResourceManager 进程的命令,所以需要在hadoop2 节点上单独启动 ResourceManaggr,具体操作如下所示。

javascript 复制代码
[root@hadoop2 hadoop]# /usr/local/hadoop/sbin/yarn-daemon.sh start resourcemanager

3.5 YARN 集群测试

3.5.1 shell 命令查看RM状态

如果一个 ResourceManagsr 为 active 状态,另外一个说明 YARN 集群构建成功。

ResourceManager为standby 状态,

javascript 复制代码
[root@hadoop2 hadoop]# /usr/local/hadoop/bin/yarn rmadmin -getServiceState rm1
active
[root@hadoop2 hadoop]# /usr/local/hadoop/bin/yarn rmadmin -getServiceState rm2
standby

3.5.2 Web 界面查看 YARN 集群

在浏览器中输入网址 http://hadoop1:8088(或者 http://hadoop2:8088),通过web 界面查看 YARN 集群消息,结果如果所示:

3.5.3 测试 YARN 集群是否可以正常运行 MapReduce程序

为了测试 YARN 集群是否可以正常运行 MapReduce程序,我们以 Hadoop 自带的wordcount示例来进行演示,具体操作如图 6-8所示。

javascript 复制代码
[root@hadoop1 hadoop]# /usr/local/hadoop/bin/yarn jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.10.2.jar wordcount /test/words.log /test/out


至此 HADOOP的搭建基本完成,后续介绍 HADOOP 集群的运维管理

相关推荐
苏小夕夕5 分钟前
spark-streaming(二)
大数据·spark·kafka
珈和info8 分钟前
珈和科技助力“农险提效200%”!“遥感+”技术创新融合省级示范项目荣登《湖北卫视》!
大数据·科技·无人机·智慧农业
盈达科技12 分钟前
盈达科技:登顶GEO优化全球制高点,以AICC定义AI时代内容智能优化新标杆
大数据·人工智能
〆、风神14 分钟前
Spring Boot 整合 Lock4j + Redisson 实现分布式锁实战
spring boot·分布式·后端
橘猫云计算机设计1 小时前
springboot基于hadoop的酷狗音乐爬虫大数据分析可视化系统(源码+lw+部署文档+讲解),源码可白嫖!
数据库·hadoop·spring boot·爬虫·python·数据分析·毕业设计
胡萝卜糊了Ohh1 小时前
kafka
分布式·kafka
电商数据girl2 小时前
产品经理对于电商接口的梳理||电商接口文档梳理与接入
大数据·数据库·python·自动化·产品经理
敖云岚2 小时前
【AI】SpringAI 第五弹:接入千帆大模型
java·大数据·人工智能·spring boot·后端
宅小海2 小时前
spark和Hadoop的区别和联系
大数据·hadoop·spark
root666/2 小时前
【大数据技术-联邦集群RBF】DFSRouter日志一直打印修改Membership为EXPIRED状态的日志分析
java·大数据·hadoop