大数据平台搭建 | Hadoop 集群搭建

1、环境说明

2、Hadoop架构

  • 狭义上的hadoop主要包括三大组件 分布式存储HDFS分布式计算MapReduce分布式资源管理和调度YARN

2.1 HDFS架构

  • 主要负责数据的存储
    在这里插入图片描述

  • NameNode: 管理命名空间、存储数据块映射信息(元数据)、 负责处理客户端对HDFS的访问.

  • SecondaryNameNode: NameNode 的热备, 会定期合并命名空间镜像 fsimage和命名空间镜像的编辑日志fsedits, 在主NameNode发生故障时, 可以 快速切换为新的 Active NameNode

  • DataNode: 负责实际文件数据的存储、文件会被拆分成多个块, 以多副本方式存储在不同的DataNode

2.2 Yarn 架构

  • 主要负责作业的调度 和 资源的管理
    在这里插入图片描述
  • ResourceManager(RM):
    • 处理提交的作业请求, 资源申请请求.
    • 监控NodeManager的状态
    • 启动和监控ApplicationMaster
  • NodeManager(NM):
    • 管理每个节点上运行的资源
    • 定时向 RM 汇报本节点上的资源使用情况和各个 Container 的运行状态
    • 处理来自AM 对 各个Container 启动/停止等请求
  • Container:
    • 即是任务运行的容器又是Yarn对资源的抽象, 封装了某个节点上的多维度资源,如内存、CPU、磁盘、网络等. RM 为 AM 返回的资源便是用 Container 表示的。 YARN 会为每个任务分配一个 Container 且该任务只能使用该 Container 中描述的资源
  • ApplicationMaster(AM):
    • 每个作业会在NM中启动一个AM, 然后由AM去负责发送MapTask、ReduceTask任务的启动请求给NM, 以及向RM申请任务执行所需要的资源
    • 与RM交互去申请资源Container(比如作业执行的资源, 任务执行的资源)
    • 负责启动、停止任务, 并且监控所有任务的运行状态,当任务Task有失败时,重新为任务申请资源并重启任务

3、集群规划

如无特别说明,每台服务器要保持一样的配置

Hadoop300 Hadoop301 Hadoop302
NameNode V
DataNode V V V
SecondaryNameNode V
ResourceManger V
NodeManger V V V

4、下载解压

4.1 安装包放置

  • 将下载的hadoop3.1.3解压并创建快捷方式到~/app目录下, hadoop301,hadoop302同理
[hadoop@hadoop300 app]$ pwd
/home/hadoop/app
[hadoop@hadoop300 app]$ ll
lrwxrwxrwx   1 hadoop hadoop  47 2月  21 12:33 hadoop -> /home/hadoop/app/manager/hadoop_mg/hadoop-3.1.3

4.2 配置Hadoop环境变量

  • vim ~/.bash_profile
# ============ java =========================
export JAVA_HOME=/home/hadoop/app/jdk
export PATH=$PATH:$JAVA_HOME/bin

# ======================= Hadoop ============================
export HADOOP_HOME=/home/hadoop/app/hadoop
export PATH=$PATH:$HADOOP_HOME/bin
export PATH=$PATH:$HADOOP_HOME/sbin

5、hadoop配置

5.1 env文件

  • 修改${HADOOP_HOME}/etc/hadoop下的hadoop-env.sh, mapred-env.sh、yarn-env.sh这三个文件都添加JDK的环境变量
export JAVA_HOME=/home/hadoop/app/jdk

5.2 core-site.xml

  • 修改 ${HADOOP_HOME}/etc/hadoop/core-site.xml 文件
  • 关于代理用户的配置见官网 Proxy User
<!-- 指定HDFS中NameNode的地址, -->
<property>
	<name>fs.defaultFS</name>
    <value>hdfs://hadoop300:8020</value>
</property>

<!-- 指定Hdfs的NameNode、DataNode数据存储路径, 默认在/tmp/hadoop-${user.name}下 -->
<!--
	 <property>
		<name>hadoop.tmp.dir</name>
		<value>/tmp/hadoop-${user.name}</value>
	</property>
 -->

	 <!-- 配置HDFS管理页面登陆的静态用户为 hadoop -->
	 <property>
			<name>hadoop.http.staticuser.user</name>
			<value>hadoop</value>
	 </property>

	<!-- 配置该hadoop用户允许通过代理访问的主机节点-->
	<property>
		<name>hadoop.proxyuser.hadoop.hosts</name>
		<value>*</value>
	</property>
	<!-- 配置该hadoop用户允许代理的用户所属组-->
	<property>
		<name>hadoop.proxyuser.hadoop.groups</name>
	 	<value>*</value>
	</property>
	<!-- 配置该hadoop用户允许代理的用户, *代表所有-->
	<property>
		<name>hadoop.proxyuser.hadoop.users</name>
	 	<value>*</value>
	</property>

5.3 hdfs-site.xml 文件 (hdfs配置)

  • 配置HDFS相关属性
<!-- 指定HDFS副本的数量-->
<property>
	<name>dfs.replication</name>
	<value>2</value>
</property>

<!-- SecondaryNameNode启动地址 -->
<property>
	<name>dfs.namenode.secondary.http-address</name>
	<value>hadoop302:9868</value>
</property>

5.4 yarn-site.xml (yarn配置)

  • 配置yarn相关属性
<!-- Reducer获取数据的方式, 使用shuffle -->
<property>
 		<name>yarn.nodemanager.aux-services</name>
 		<value>mapreduce_shuffle</value>
</property>

<!-- 指定YARN的ResourceManager的主机地址 -->
<property>
	<name>yarn.resourcemanager.hostname</name>
  <value>hadoop301</value>
</property>

<!-- 容器向RM的内存申请请求允许的最小值, 即最小分配为该内存大小-->
<property>
  <name>yarn.scheduler.minimum-allocation-mb</name>
  <value>200</value>
</property>
<!-- 容器向RM的内存申请请求允许的最大值, 超出将会抛出 InvalidResourceRequestException异常-->
<property>
	<name>yarn.scheduler.maximum-allocation-mb</name>
  <value>2048</value>
</property>

<!-- 设置Yarn可使用的内存大小, 即可分配给容器的物理内存量(以MB为单位)。如果设置为-1并且yarn.nodemanager.resource.detect-hardware-capabilities为true,则会自动计算(在Windows和Linux中)。在其他情况下,默认值为8192MB。-->
<property>
  <name>yarn.nodemanager.resource.memory-mb</name>
  <value>4096</value>
</property>

<!--  关闭Yarn对物理内存和虚拟内存的限制检查
	  因为内存计算方式不一样, 可能会误认为内存不够然后把作业kill掉
 -->
<property>
  <name>yarn.nodemanager.pmem-check-enabled</name>
  <value>false</value>
</property>
<property>
  <name>yarn.nodemanager.vmem-check-enabled</name>
  <value>false</value>
</property>

<!-- 配置任务历史服务地址  -->
<property>
        <name>yarn.log.server.url</name>
        <value>http://hadoop300:19888/jobhistory/logs/</value> 
</property>

<!-- 开启日志聚集功能使能 
		 日志聚集就是应用运行完成以后,将容器本地运行的日志信息收集上传到HDFS系统上。方便查看
-->
<property>
  <name>yarn.log-aggregation-enable</name>
  <value>true</value>
</property>

<!-- 日志保留时间设置7天 -->
<property>
  <name>yarn.log-aggregation.retain-seconds</name>
  <value>604800</value>
</property>

5.5 mapred-site.xml (MapReduce配置)

  • 配置MapReduce相关设置
<!-- 指定MR运行在YARN上, 默认运行在local本地 -->
<property>
		<name>mapreduce.framework.name</name>
		<value>yarn</value>
</property>
	
	<!-- 指定jobhistory地址 -->
  <property>
    <name>mapreduce.jobhistory.address</name>
    <value>hadoop300:10020</value>
  </property>
  <property>
    <name>mapreduce.jobhistory.webapp.address</name>
    <value>hadoop300:19888</value>
  </property>

<!-- 指定hadoop环境变量 -->
<property>
  <name>yarn.app.mapreduce.am.env</name>
  <value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>
</property>
<property>
  <name>mapreduce.map.env</name>
  <value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>
</property>
<property>
  <name>mapreduce.reduce.env</name>
  <value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>
</property>

5.6 workers 文件配置

  • 修改 ${HADOOP_HOME}/etc/hadoop/workers 文件, 设置Hadoop集群节点列表
    • tip: 注意不要出现空行和空格
hadoop300
hadoop301
hadoop302

6、启动测试

6.1 格式化NameNode

  • 在hadoop300执行
[hadoop@hadoop300 app]$ hdfs namenode -format

6.2 启动Hdfs

  • 在hadoop300启动
[hadoop@hadoop300 ~]$ start-dfs.sh
Starting namenodes on [hadoop300]
Starting datanodes
Starting secondary namenodes [hadoop302]

6.3 启动Yarn

  • 在hadoop301启动
[hadoop@hadoop301 ~]$ start-yarn.sh
Starting resourcemanager
Starting nodemanagers

6.4 启动JobHistory

[hadoop@hadoop300 hadoop]$ mapred --daemon start historyserver

6.5 效果

  • 启动成功后jps查看进程
  • 这时hdfs的nn、dn、sn都启动起来了,
  • 而yarn的RM、NM也启动起来了
  • mr的JobHistory也启动起来了
[hadoop@hadoop300 hadoop]$ xcall jps
--------- hadoop300 ----------
16276 JobHistoryServer
30597 DataNode
19641 Jps
30378 NameNode
3242 NodeManager
--------- hadoop301 ----------
24596 DataNode
19976 Jps
27133 ResourceManager
27343 NodeManager
--------- hadoop302 ----------
24786 SecondaryNameNode
27160 NodeManager
24554 DataNode
19676 Jps

访问HDFS的NameNode界面 在hadoop300:9870
在这里插入图片描述

访问HDFS的SecondaryNameNode界面 在hadoop300:9868
在这里插入图片描述

访问Yarn管理界面: 在hadoop301:8088
在这里插入图片描述

访问JobHistory的界面, 在hadoop300:19888
在这里插入图片描述

7、hadoop集群统一启动脚本

  • vim hadoop.sh
#!/bin/bash

case $1 in
"start"){
    
    
		echo ---------- Hadoop 集群启动 ------------
		echo "启动Hdfs"
        ssh hadoop300 "source ~/.bash_profile;start-dfs.sh"
        echo "启动Yarn"
        ssh hadoop300 "source ~/.bash_profile;mapred --daemon start historyserver"
        echo "启动JobHistory"
        ssh hadoop301 "source ~/.bash_profile;start-yarn.sh"
};;
"stop"){
    
    
		echo ---------- Hadoop 集群停止 ------------
		echo "关闭Hdfs"
        ssh hadoop300 "source ~/.bash_profile;stop-dfs.sh"
        echo "关闭Yarn"
        ssh hadoop300 "source ~/.bash_profile;mapred --daemon stop historyserver"
        echo "关闭JobHistory"
        ssh hadoop301 "source ~/.bash_profile;stop-yarn.sh"
};;
esac

10、打赏

如果觉得文章有用,你可鼓励下作者(支付宝)

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_41347419/article/details/113916436