Linux学习20-hadoop大数据平台部署
hadoop
简介
由 Apache 基金会开发和维护的一个开源分布式计算框架,最初由 Doug Cutting 于 2006 年基于 Google 发表的三篇经典论文(GFS、MapReduce、BigTable)的思想实现
它解决的核心问题是:如何在廉价的普通服务器上,存储和处理海量数据
Hadoop 由以下四大核心模块组成:
HDFS(Hadoop Distributed File System)
分布式文件系统,负责数据的存储
将大文件切分成固定大小的数据块(默认 128MB),分散存储在多台机器上
每个数据块默认保存 3 个副本,保证高可靠性
采用主从(Master/Slave)架构:
NameNode(主节点):管理文件系统的元数据(目录结构、文件与数据块的映射关系等)
DataNode(从节点):实际存储数据块,并定期向 NameNode 汇报状态
MapReduce
分布式计算框架,负责数据的处理
将计算任务拆分为两个阶段:
Map(映射):将输入数据拆分成键值对,并行处理
Reduce(归约):将 Map 的输出结果进行汇总聚合,得出最终结果
计算逻辑向数据靠拢(数据本地化),减少网络传输开销
YARN(Yet Another Resource Negotiator)
集群资源管理和调度框架
负责给各个应用分配 CPU、内存等资源
核心组件:
ResourceManager:全局资源管理器,负责整个集群的资源分配
NodeManager:单节点资源管理器,负责管理每台机器上的资源
Hadoop Common
公共基础库,提供其他模块依赖的工具类、通用接口和启动脚本
部署
官网下载
![]()
![]()
之后所有的操作应该是在新建用户中进行的
再配置Java环境




修改Java路径

配置核心配置文件
![]()

修改副本数
![]()

本机做ssh免密

![]()
如果要以root身份启动,需要在hadoop-env.sh的末尾添加

启动
![]()
浏览器访问(端口如果9000不正确那么就在9866到9870之间)

创建 HDFS 用户目录
![]()
创建 input 目录并上传配置文件

运行自带的 WordCount/Grep 示例

查看结果,成功

停止服务,查看是否停止成功

分布式文件系统
介绍
HDFS(Hadoop Distributed File System)分布式文件系统,负责数据的存储将大文件切分成固定大小的数据块(默认 128MB),分散存储在多台机器上
每个数据块默认保存 3 个副本,保证高可靠性
采用主从(Master/Slave)架构:
NameNode(主节点):管理文件系统的元数据(目录结构、文件与数据块的映射关系等)
DataNode(从节点):实际存储数据块,并定期向 NameNode 汇报状态
HDFS 写数据流程
1.client 向 NameNode 发送上传文件请求
2.NameNode 检查权限和目录结构后,返回一组 DataNode 列表(dn1、dn2、dn3)
3.client 将文件切分为多个 block(默认 128MB),以 packet 为单位发送第一个 block 到 dn1
4.三个 DataNode 之间形成流水线(Pipeline)复制:dn1 → dn2 → dn3,实现 3 副本存储
5.所有副本写入完成后,逐层向上确认,最终报告给 NameNode
6.NameNode 将元数据持久化存盘

HDFS 机架感知(Rack Awareness)
集群分为三个机架 r1、r2、r3
当 client 本身就是 dn3(位于 r1 机架)时,3 副本的放置策略为:
第 1 副本:放在 client 所在节点 dn3(本地写入,减少网络传输)
第 2 副本:放在不同机架 r2 的某个节点上(跨机架容灾)
第 3 副本:放在与第 2 副本相同机架 r2 的另一个节点上(平衡带宽和可靠性)

HDFS 心跳机制与故障检测
心跳(Heartbeat) DataNode 每隔 3 秒向 NameNode 发送一次心跳
数据块报告(Block Report) DataNode 定期向 NameNode 汇报自己存储了哪些数据块
故障判定 NameNode 10 分钟收不到某 DataNode 的心跳,就判定该节点宕机
数据校验 Client 读取数据时,DataNode 会发送校验和(Checksum),Client 验证后返回确认码

部署流程
新建两台虚拟机,node2,3,做好基础配置
设置共享目录
![]()
![]()
三台node下载nfs
![]()
node1启动nfs
![]()
node2,3查看

之后创建挂载点并挂载

配置一下java的路径
![]()

查看到版本号即为成功

node之间做一下免密

配置 Hadoop 的核心配置文件,用来告知整个集群HDFS(分布式文件系统)的管理员(NameNode)的位置


设置 HDFS 的数据备份副本数为2
![]()

配置 Hadoop 集群的工作节点(DataNode)列表
![]()

初始化(格式化)HDFS 的 NameNode 元数据目录,选项选择Y
![]()
启动整个 HDFS 分布式存储集群
![]()
如果在node2,3找不到目录,检查nfs服务是否正常,2,3是否挂载


启动成功

查看,node1上是namenode

浏览器访问node1的9870端口查看

进入datanode下,看到node2,3

创建用户,上传.xml文件作为测试


浏览器进入utils下的browse directory,可以看到上传的文件

Hadoop MapReduce
介绍
Hadoop 1.x 时代的旧架构(MapReduce v1)
早期的单体架构,核心组件只有两个:
JobTracker 既是资源调度器,又是作业控制器,权力高度集中
TaskTracker 执行具体任务的"工人",定期向 JobTracker 发送心跳
工作流程:
1.客户端运行 MapReduce 程序,向 JobTracker 申请新的 Job ID
2.客户端将作业资源(jar、配置等)拷贝到 HDFS
3.客户端向 JobTracker 提交作业
4.JobTracker 初始化作业,读取 HDFS 上的输入分片(input splits)
5.TaskTracker 通过心跳向 JobTracker 领取任务
6.TaskTracker 启动子 JVM 进程运行 MapTask 或 ReduceTask
核心问题: JobTracker 既是裁判又是运动员,既要管资源调度又要管作业执行,集群规模大了就成瓶颈,且不支持其他计算框架(如 Spark、Flink)接入

Hadoop 2.x 时代的新架构(MapReduce v2/YARN)
YARN 框架:
ResourceManager(RM) 全局资源管理器,只负责分配资源,不管具体计算
NodeManager(NM) 单节点资源管理器,管理本机的 CPU、内存
MRAppMaster 每个作业专属的"管家",负责向 RM 申请资源、启动和监控任务
工作流程:
1.客户端向 ResourceManager 申请新应用,获取 Application ID
2.客户端将作业资源拷贝到 HDFS
3.客户端向 RM 提交应用
4.RM 在某个 NodeManager 上启动容器,运行 MRAppMaster
5.MRAppMaster 初始化作业,从 HDFS 读取输入分片
6.MRAppMaster 向 RM 申请运行 Task 所需的资源
7.RM 分配资源后,MRAppMaster 通知对应节点的 NodeManager 启动容器
8.NodeManager 启动子 JVM 运行 MapTask 或 ReduceTask

之后会详细介绍yarn
Hadoop YARN
介绍
YARN 采用主从(Master/Slave)架构,由三大核心组件组成:
ResourceManager(RM)
整个集群只有一个,负责全局资源的统一管理和分配
接收客户端提交的作业申请
接收 NodeManager 的心跳汇报,掌握集群资源状况
不关心具体计算逻辑,只管资源
NodeManager(NM)
每个物理节点上运行一个,负责管理本机资源(CPU、内存)
接收 RM 的指令,启动/停止容器(Container)
定期向 RM 发送心跳,汇报节点健康和资源使用情况
ApplicationMaster(AM)
每个作业独享一个,随作业启动而创建,作业结束而销毁
负责向 RM 申请资源、与 NM 协作启动和监控任务
理解具体计算框架的业务逻辑(MapReduce 的 AM 和 Spark 的 AM 是不同的)
Container(容器)
YARN 对资源的抽象封装,包含内存 + CPU + 环境变量
是资源的分配单位,Task 运行在 Container 内部
计算作业(Application)的完整工作流程
1. 提交数据 client 把数据上传到 HDFS
2. 申请资源 client 向 RM 申请运行 AppMaster,RM 返回资源路径并分配容器
3. 运行任务 AppMaster 从 HDFS 拷贝作业资源,再向 RM 申请资源来启动各个 task 容器;nm 节点发送心跳汇报进度
4. 清理释放 所有 task 完成后,AppMaster 向 RM 注销并释放容器资源

更多推荐

所有评论(0)