云计算百科
云计算领域专业知识百科平台

Hadoop核心技术与实战指南

Hadoop学习笔记

一、Hadoop基础认知

1.1 什么是Hadoop

Hadoop是一个开源的、分布式的大数据处理框架,由Apache基金会开发,核心目标是高效处理海量数据(TB/PB级),适用于数据量大、数据类型复杂(结构化、半结构化、非结构化)、实时性要求不高的场景(离线计算)。

核心优势:高可靠性(多副本存储)、高扩展性(横向扩展节点)、高容错性(节点故障不影响整体任务)、低成本(基于普通服务器集群,无需高端硬件)。

1.2 Hadoop的起源与发展

源于Google的三篇核心论文(大数据领域的“三大支柱”):

  • GFS(Google File System):分布式文件系统,对应Hadoop的HDFS;

  • MapReduce:分布式计算模型,对应Hadoop的MapReduce;

  • BigTable:分布式数据库,对应Hadoop的HBase。

Apache Hadoop版本演进:主要分为1.x、2.x、3.x三个系列,目前主流使用3.x版本(解决2.x的性能瓶颈,支持更多节点、更高效的计算引擎)。

1.3 Hadoop生态系统(核心组件+周边工具)

Hadoop核心3大组件(Hadoop Core):HDFS(存储)、MapReduce(计算)、YARN(资源调度);

周边生态工具(常用):

  • HBase:分布式列式数据库,用于实时查询海量结构化数据;

  • Hive:数据仓库工具,将SQL转换为MapReduce/YARN任务,适用于离线数据分析;

  • Spark:快速通用的分布式计算引擎,速度远超MapReduce,可替代MapReduce作为计算核心;

  • ZooKeeper:分布式协调工具,负责集群的节点管理、选举、配置同步;

  • Flume:日志收集工具,用于采集、聚合、传输海量日志数据;

  • Sqoop:数据迁移工具,实现Hadoop与关系型数据库(MySQL、Oracle)之间的数据导入/导出。

二、Hadoop核心组件详解

2.1 HDFS(Hadoop Distributed File System)——分布式文件系统

2.1.1 核心作用

负责将海量数据分布式存储在集群的多个节点上,突破单台服务器的存储容量限制,同时通过多副本机制保证数据可靠性。

2.1.2 架构模型(主从架构 Master/Slave)

HDFS由3个核心角色组成,采用“一主多从”架构:

  • NameNode(NN,主节点):

    – 核心职责:管理文件系统的元数据(文件名、路径、文件大小、块信息、副本数量等),不存储实际数据;

    – 特点:整个集群只有1个活跃的NameNode(3.x支持HA高可用,可部署备用NN),是集群的“大脑”,若NN故障,整个HDFS集群无法使用;

    – 元数据存储:默认存储在内存中(提高查询速度),同时持久化到本地磁盘的fsimage(镜像文件)和edits(日志文件)中。

  • DataNode(DN,从节点):

    – 核心职责:存储实际的数据块(Block),执行NameNode下达的读写指令(上传、下载数据);

    – 特点:集群中有多个DataNode(可横向扩展),每个DN将数据存储在本地磁盘上;

    – 数据块(Block):HDFS默认块大小(3.x)为128MB(可配置),将大文件分割成多个小Block分布式存储,小块便于并行处理和容错。

  • SecondaryNameNode(SNN, Secondary NN):

    – 核心职责:辅助NameNode管理元数据,定期合并fsimage和edits文件,生成新的fsimage,减轻NN的负担;

    – 注意:SNN不是NN的备用节点(不能替代NN工作),3.x中可结合HA机制部署,避免NN单点故障。

  • 2.1.3 关键机制

    • 副本机制:默认副本数为3,1个副本存储在本地节点,1个副本存储在同机架的其他节点,1个副本存储在不同机架的节点,保证节点/机架故障时数据不丢失;

    • 机架感知:HDFS会识别节点所在的机架,优化数据存储和读取路径,减少跨机架的数据传输(降低网络带宽压力);

    • 读写流程:

      – 写流程:客户端 → NameNode(申请存储路径和Block分配) → DataNode(按副本机制写入数据) → 反馈写入结果给NN;

      – 读流程:客户端 → NameNode(查询元数据,获取Block所在的DN节点) → 直接从DN读取数据(无需经过NN)。

    2.2 MapReduce——分布式计算模型

    2.2.1 核心作用

    基于“分而治之”的思想,将海量数据的计算任务拆分成多个小任务,分布式运行在集群的DataNode节点上,最终汇总所有小任务的结果,得到最终计算结果(离线计算核心)。

    2.2.2 核心思想与流程

    MapReduce的计算过程分为两个核心阶段:Map阶段(拆分计算)和Reduce阶段(汇总计算),中间包含Shuffle阶段(数据分发与排序),整个流程由YARN调度管理。

  • Map阶段(映射阶段):

    – 输入:HDFS中的数据块(Block),按行解析为键值对(Key-Value);

    – 处理:每个Map任务独立处理一个数据块,对输入的键值对进行过滤、转换,输出中间键值对(Intermediate K-V);

    – 特点:Map任务并行执行,互不依赖,无需交互。

  • Shuffle阶段(洗牌阶段):

    – 核心:将所有Map任务输出的中间键值对,按Key进行分组、排序、合并,分发到对应的Reduce任务中;

    – 关键操作:分区(Partition)、排序(Sort)、合并(Combine)、归约(Reduce),是MapReduce的性能瓶颈(涉及大量数据传输和磁盘IO)。

  • Reduce阶段(归约阶段):

    – 输入:Shuffle阶段分发的、同一Key对应的所有Value集合;

    – 处理:对同一Key的Value集合进行聚合、计算(如求和、计数、去重),输出最终键值对(Final K-V),写入HDFS;

    – 特点:Reduce任务并行执行,依赖Shuffle阶段的结果,不同Reduce任务的输出互不干扰。

  • 2.2.3 核心特点与局限性

    • 特点:易于编程(只需实现Map和Reduce函数)、高容错性(任务失败自动重试)、高扩展性(支持大规模集群);

    • 局限性:实时性差(适合离线计算,延迟分钟/小时级)、不适合迭代计算(如机器学习算法)、Shuffle阶段性能瓶颈明显,目前逐渐被Spark替代。

    2.3 YARN(Yet Another Resource Negotiator)——资源调度与任务管理框架

    2.3.1 核心作用

    Hadoop 2.x新增组件,替代1.x中MapReduce的资源调度功能,实现“资源调度与计算分离”,统一管理集群的CPU、内存、磁盘等资源,为各类计算任务(MapReduce、Spark、Hive等)分配资源,调度任务执行。

    2.3.2 架构模型(主从架构)

  • ResourceManager(RM,主节点):

    – 核心职责:全局资源调度(管理整个集群的资源总量)、接受客户端的任务提交、分配资源给NodeManager、监控NodeManager的状态;

    – 组成:调度器(Scheduler)和应用程序管理器(ApplicationsManager);

    – 调度器:只负责资源分配,不负责任务监控和失败重试(如FIFO调度器、Capacity调度器、Fair调度器)。

  • NodeManager(NM,从节点):

    – 核心职责:管理单个节点的资源(CPU、内存等)、执行ResourceManager下达的指令、启动和监控容器(Container)、向RM汇报节点状态;

    – 容器(Container):YARN的资源分配单元,包含一定量的CPU、内存,每个任务(Map/Reduce/Spark任务)都运行在Container中。

  • ApplicationMaster(AM,应用程序主节点):

    – 核心职责:每个提交的计算任务(如一个MapReduce任务、一个Spark任务)都会对应一个AM,负责与RM协商资源、向NM申请Container、调度任务在Container中执行、监控任务状态(失败自动重试)。

  • 2.3.3 核心流程(任务提交与执行)

  • 客户端提交计算任务(如MapReduce任务)到ResourceManager;

  • RM的应用程序管理器为任务分配第一个Container,启动ApplicationMaster;

  • AM向RM注册,然后向RM协商后续任务所需的资源(Container);

  • RM将分配好的Container信息反馈给AM;

  • AM向对应的NodeManager发送指令,启动Container并执行任务;

  • 任务执行完成后,Container释放资源,AM向RM汇报任务结果,RM注销AM。

  • 三、Hadoop环境搭建(核心步骤)

    Hadoop环境搭建分为3种模式,重点掌握伪分布式模式(单机模拟集群,适合学习):

    3.1 环境准备(前置条件)

    • 操作系统:Linux(推荐CentOS 7/8,Hadoop对Windows支持较差);

    • JDK:Hadoop依赖Java环境,需安装JDK 8(对应Hadoop 3.x,版本需匹配),配置JAVA_HOME环境变量;

    • 关闭防火墙:避免集群节点之间通信受阻(学习环境可直接关闭,生产环境需配置防火墙规则);

    • 免密登录:配置Linux本机免密登录(伪分布式模式需登录本机),集群模式需配置所有节点之间免密登录(ssh密钥配置)。

    3.2 伪分布式模式搭建(核心步骤)

  • 下载Hadoop安装包:从Apache Hadoop官网下载对应版本(如hadoop-3.3.4.tar.gz),解压到指定目录(如/opt/hadoop);

  • 配置环境变量:修改/etc/profile文件,添加HADOOP_HOME、PATH等环境变量,使系统能识别hadoop命令;

  • 修改Hadoop核心配置文件(位于$HADOOP_HOME/etc/hadoop目录):

    – core-site.xml:配置HDFS的NameNode地址、临时文件存储目录;

    – hdfs-site.xml:配置副本数量(伪分布式设为1)、NameNode和DataNode的数据存储目录;

    – mapred-site.xml:配置MapReduce的框架(指定为yarn);

    – yarn-site.xml:配置YARN的ResourceManager地址、节点管理器的资源分配(CPU、内存)。

  • 格式化HDFS:首次搭建需格式化NameNode(执行hdfs namenode -format),格式化后会生成元数据存储目录;

  • 启动Hadoop集群:

    – 启动HDFS:执行start-dfs.sh(启动NameNode、DataNode、SecondaryNameNode);

    – 启动YARN:执行start-yarn.sh(启动ResourceManager、NodeManager);

    – 查看集群状态:执行jps命令,查看所有核心进程是否启动成功。

  • 验证环境:

    – 访问HDFS Web界面:http://虚拟机IP:9870,查看HDFS集群状态;

    – 访问YARN Web界面:http://虚拟机IP:8088,查看YARN集群状态;

    – 运行官方示例程序(如WordCount),验证MapReduce任务能否正常执行。

  • 3.3 常见问题

    • JDK版本不匹配:Hadoop 3.x需JDK 8,若使用JDK 11及以上会报错;

    • 免密登录配置失败:导致start-dfs.sh启动时提示输入密码,需重新配置ssh密钥;

    • 格式化HDFS失败:若多次格式化,会导致NameNode和DataNode的clusterID不一致,需删除数据存储目录后重新格式化;

    • 进程启动失败:查看$HADOOP_HOME/logs目录下的日志文件,定位错误原因(如配置文件写错、端口占用)。

    四、Hadoop核心操作(命令行+实操)

    4.1 HDFS命令行操作(常用)

    HDFS命令格式:hdfs dfs -命令 参数

    • 目录操作:

      – 创建目录:hdfs dfs -mkdir /test(创建根目录下的test目录);

    • 查看目录:hdfs dfs -ls /(查看根目录下的所有内容);

      – 删除目录:hdfs dfs -rm -r /test(递归删除test目录,包括目录内文件)。

    • 文件操作:

      – 上传文件:hdfs dfs -put 本地文件路径 HDFS路径(如hdfs dfs -put /root/test.txt /test);

    • 下载文件:hdfs dfs -get HDFS文件路径 本地路径(如hdfs dfs -get /test/test.txt /root);

      – 查看文件内容:hdfs dfs -cat /test/test.txt;

      – 删除文件:hdfs dfs -rm /test/test.txt。

    • 其他常用命令:

      – 查看HDFS磁盘使用情况:hdfs dfs -df -h;

      – 查看文件副本数:hdfs dfs -ls -h /test/test.txt;

      – 复制文件:hdfs dfs -cp /test/test.txt /test2。

    4.2 MapReduce实操(WordCount示例)

    WordCount是Hadoop的经典示例,功能是统计文本文件中每个单词出现的次数,完整流程如下:

  • 准备输入数据:在本地创建一个文本文件(如words.txt),写入若干单词(每行一个或多个单词,用空格分隔);

  • 上传输入数据到HDFS:hdfs dfs -put /root/words.txt /input;

  • 运行WordCount程序(Hadoop自带示例):

    命令:hadoop jar $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.4.jar wordcount /input /output

    说明:/input是输入数据在HDFS的路径,/output是输出结果路径(必须是不存在的目录,否则报错);

  • 查看输出结果:

    – 查看输出目录:hdfs dfs -ls /output;

    – 查看统计结果:hdfs dfs -cat /output/part-r-00000(part-r-00000是Reduce阶段的输出文件);

  • 删除输出目录(下次运行需删除):hdfs dfs -rm -r /output。

  • 4.3 YARN常用操作

    • 查看YARN集群状态:yarn node -list;

    • 查看正在运行的任务:yarn application -list;

    • 杀死正在运行的任务:yarn application -kill 任务ID;

    • 查看任务日志:yarn logs -applicationId 任务ID。

    五、Hadoop进阶知识点

    5.1 HDFS高可用(HA)

    Hadoop 1.x中NameNode是单点故障,一旦NN故障,整个HDFS集群无法使用。Hadoop 3.x通过HA机制解决单点故障,部署两个NameNode(Active NN和Standby NN):

    • Active NN:正常提供元数据管理和读写服务;

    • Standby NN:实时同步Active NN的元数据(通过JournalNode集群),当Active NN故障时,快速切换为Active状态,保证集群正常运行;

    • JournalNode:用于存储Active NN的edits日志,供Standby NN同步,至少部署3个节点。

    5.2 HDFS Federation(联邦)

    解决单一NameNode的内存瓶颈和扩展性问题,部署多个独立的NameNode(每个NN管理一部分目录,称为Namespace),共享所有DataNode的存储资源:

    • 每个NameNode独立管理自己的元数据,互不干扰;

    • 客户端通过挂载表(Mount Table)访问不同NameNode管理的目录;

    • 适用于超大规模集群(节点数成千上万),提高集群的扩展性和可用性。

    5.3 MapReduce优化

    核心优化方向:减少Shuffle阶段的数据传输和磁盘IO,提高并行度,优化资源分配:

    • Map端优化:增大Map任务的输入块大小、启用Combine(在Map端提前合并相同Key的Value,减少Shuffle数据量)、优化Map任务数量;

    • Reduce端优化:优化Reduce任务数量、启用数据压缩(Shuffle阶段和输出结果压缩,减少数据传输量)、调整Reduce任务的并行度;

    • 资源优化:在yarn-site.xml中调整Container的CPU、内存分配,匹配集群硬件配置。

    六、常见问题与解决方案

    6.1 HDFS相关问题

    • 问题1:DataNode启动失败,日志提示“Incompatible clusterIDs”;

      解决方案:删除DataNode的数据存储目录(配置文件中指定的dfs.datanode.data.dir),重新启动DataNode(会自动同步NameNode的clusterID)。

    • 问题2:HDFS上传文件失败,提示“Name node is in safe mode”;

      解决方案:NameNode处于安全模式(集群启动初期或故障后自动进入),等待安全模式退出,或手动退出:hdfs dfsadmin -safemode leave。

    6.2 MapReduce相关问题

    • 问题1:MapReduce任务执行缓慢,卡在Shuffle阶段;

      解决方案:启用数据压缩、调整Map/Reduce任务数量、优化Combine操作,减少Shuffle阶段的数据量。

    • 问题2:Reduce任务执行失败,提示“Out of memory”;

      解决方案:增大Reduce任务对应的Container内存(在mapred-site.xml中配置),或拆分Reduce任务,减少单个Reduce任务处理的数据量。

    6.3 YARN相关问题

    • 问题1:NodeManager启动失败,日志提示“Port already in use”;

      解决方案:查看端口占用情况(netstat -tunlp | grep 端口号),杀死占用端口的进程,或修改yarn-site.xml中的端口配置。

    • 问题2:任务提交后,一直处于“Accepted”状态,无法进入“Running”状态;

      解决方案:集群资源不足,停止无用任务,或调整YARN的资源分配(增大可用CPU、内存)。

    七、学习总结与进阶方向

    7.1 核心总结

    Hadoop的核心是“分布式存储(HDFS)+ 分布式计算(MapReduce)+ 资源调度(YARN)”,三者协同工作,实现海量数据的高效处理;

    学习重点:掌握HDFS和YARN的架构、MapReduce的计算流程、环境搭建和基础操作,理解分布式系统的核心思想(容错、扩展、并行)。

    7.2 进阶方向

  • Hadoop生态工具:深入学习Hive、HBase、Spark、ZooKeeper的使用和原理,掌握大数据处理的完整流程;

  • Hadoop源码:阅读HDFS和MapReduce的核心源码,理解底层实现机制(如NameNode元数据管理、Shuffle流程);

  • 生产环境部署与调优:学习Hadoop集群的规模化部署、HA/Federation配置、性能调优,适应生产环境需求;

  • 实时计算框架:学习Spark Streaming、Flink等实时计算框架,对比离线计算和实时计算的差异,应对不同业务场景。

  • 赞(0)
    未经允许不得转载:网硕互联帮助中心 » Hadoop核心技术与实战指南
    分享到: 更多 (0)

    评论 抢沙发

    评论前必须登录!