Hadoop基础教程
目录
-
第一章:初识Hadoop
(图片来源网络,侵删)- 1 什么是大数据?
- 2 Hadoop的定义与起源
- 3 Hadoop的核心思想:分而治之
- 4 Hadoop生态系统概览
- 5 Hadoop的应用场景
- 6 本章小结
-
第二章:Hadoop核心架构
- 1 Hadoop三大核心组件
- 2 HDFS (Hadoop Distributed File System)
- 2.1 设计目标与架构
- 2.2 NameNode 与 DataNode
- 2.3 数据块、副本与机架感知
- 2.4 HDFS的读写流程
- 3 YARN (Yet Another Resource Negotiator)
- 3.1 设计目标与架构
- 3.2 ResourceManager 与 NodeManager
- 3.3 ApplicationMaster
- 3.4 YARN的工作流程
- 4 MapReduce
- 4.1 核心思想:分而治之
- 4.2 Map阶段与Reduce阶段
- 4.3 一个简单的WordCount实例
- 5 Hadoop生态系统组件
- 5.1 数据采集:Flume, Sqoop
- 5.2 数据仓库:Hive
- 5.3 数据查询:HBase, Impala
- 5.4 资源调度与工作流:Oozie
- 5.5 机器学习:Mahout, Spark
- 6 本章小结
-
第三章:Hadoop环境搭建
- 1 环境准备
- 1.1 硬件与操作系统要求
- 1.2 软件依赖 (Java, SSH)
- 1.3 网络配置
- 2 Hadoop安装模式
- 2.1 单机模式
- 2.2 伪分布式模式
- 2.3 完全分布式模式
- 3 伪分布式环境搭建详细步骤
- 3.1 下载与解压
- 3.2 配置环境变量
- 3.3 修改核心配置文件 (core-site.xml, hdfs-site.xml, yarn-site.xml, mapred-site.xml)
- 3.4 格式化HDFS
- 3.5 启动与验证集群
- 4 本章小结
- 1 环境准备
-
第四章:HDFS操作实践
- 1 HDFS Shell命令
- 1.1 文件与目录操作 (
ls,mkdir,rm,mv) - 1.2 文件上传与下载 (
put,get) - 1.3 查看文件内容 (
cat,text) - 1.4 查看磁盘使用情况 (
df,du)
- 1.1 文件与目录操作 (
- 2 通过Java API操作HDFS
- 2.1 搭建Java开发环境
- 2.2 读取HDFS文件
- 2.3 写入HDFS文件
- 3 本章小结
- 1 HDFS Shell命令
-
第五章:MapReduce编程实践
(图片来源网络,侵删)- 1 开发环境准备 (IDEA/Eclipse)
- 2 编写第一个MapReduce程序:WordCount
- 2.1 Mapper类设计
- 2.2 Reducer类设计
- 2.3 Driver主程序
- 2.4 打包与提交任务
- 3 运行与调试MapReduce程序
- 3.1 使用
hadoop jar命令提交 - 3.2 查看任务日志
- 3.1 使用
- 4 本章小结
-
第六章:Hadoop生态系统入门
- 1 Hive:数据仓库工具
- 1.1 Hive是什么?
- 1.2 Hive的架构与HiveQL
- 1.3 一个简单的HiveQL查询示例
- 2 HBase:NoSQL数据库
- 2.1 HBase是什么?(面向列、高可用)
- 2.2 HBase的数据模型
- 2.3 HBase与HDFS的关系
- 3 Sqoop:数据迁移工具
- 3.1 Sqoop的作用
- 3.2 从MySQL导入数据到HDFS
- 4 本章小结
- 1 Hive:数据仓库工具
-
第七章:Hadoop高级与优化
- 1 Hadoop性能优化概述
- 2 MapReduce性能优化
- 2.1 Combiner (合并器)
- 2.2 Partitioner (分区器)
- 2.3 输入输出格式
- 3 HDFS性能优化
- 3.1 合理的块大小
- 3.2 副本策略
- 4 YARN资源调度优化
- 5 本章小结
-
第八章:总结与展望
- 1 Hadoop学习路径回顾
- 2 Hadoop的局限性
- 3 大数据技术演进:从Hadoop到Spark
- 4 持续学习资源
第一章:初识Hadoop
1 什么是大数据?
大数据是指无法在一定时间内用传统数据库软件工具进行采集、存储、管理和分析的数据集合,其核心特征通常用 4V 来描述:

- Volume (大量):数据量巨大,从TB级别到PB、EB级别。
- Velocity (高速):数据生成和处理速度非常快,如实时流数据。
- Variety (多样):数据类型繁多,包括结构化数据(如数据库表)、半结构化数据(如XML、JSON)和非结构化数据(如文本、图片、视频)。
- Value (低价值密度):数据价值密度低,需要通过强大的技术手段进行挖掘才能产生价值。
2 Hadoop的定义与起源
Hadoop是一个由Apache基金会开发的开源分布式计算框架,它诞生于2006年,由Doug Cutting和Mike Cafarella创建,灵感来源于Google发表的几篇关于GFS(Google File System)和MapReduce的论文,最初是为了解决Nutch搜索引擎的海量网页索引问题。
3 Hadoop的核心思想:分而治之
Hadoop的设计哲学是“分而治之”(Divide and Conquer),它将一个巨大的计算任务分解成许多小的子任务,然后将这些子任务分配到集群中的多个节点上并行处理,最后将结果汇总,得到最终结果,这使得Hadoop能够高效地处理海量数据。
4 Hadoop生态系统概览
Hadoop不仅仅是一个框架,它已经发展成为一个庞大的生态系统,包含了许多解决不同问题的组件:
- 存储层:HDFS
- 资源管理层:YARN
- 计算层:MapReduce, Spark, Flink
- 数据仓库:Hive
- NoSQL数据库:HBase
- 数据同步:Sqoop, Flume
- 调度工具:Oozie, Azkaban
- 机器学习库:Mahout, Spark MLlib
5 Hadoop的应用场景
Hadoop广泛应用于互联网、金融、零售、医疗、政府等多个领域,典型场景包括:
- 用户行为分析:如电商网站的用户点击流分析、商品推荐。
- 日志处理:分析服务器日志、应用日志,用于系统监控和安全审计。
- 数据仓库:作为传统数据仓库的补充,存储海量历史数据。
- 搜索引擎:Nutch搜索引擎就是基于Hadoop构建的。
- 图像/视频处理:对海量图片或视频进行内容分析和索引。
第二章:Hadoop核心架构
1 Hadoop三大核心组件
Hadoop的核心架构由三个主要部分组成,它们协同工作,共同构成了一个强大的分布式计算平台。
- HDFS (Hadoop Distributed File System):分布式文件系统,负责数据的存储。
- YARN (Yet Another Resource Negotiator):资源管理器,负责集群资源(CPU、内存)的调度和管理。
- MapReduce:分布式计算框架,负责在HDFS上的数据进行并行计算。
2 HDFS (Hadoop Distributed File System)
2.1 设计目标与架构
HDFS是为运行在廉价硬件上的大型数据集而设计的,它具有高容错性、高吞吐量的特点。 其架构主要由两个角色构成:
- NameNode (主节点):集群的“管家”,它不存储实际的数据文件,而是存储文件的元数据,如文件名、目录结构、文件块列表、副本位置等,NameNode是HDFS的单点故障点。
- DataNode (从节点):集群的“仓库”,它负责存储实际的数据块,DataNode会定期向NameNode汇报自己存储的数据块信息。
2.2 数据块、副本与机架感知
- 数据块:HDFS将大文件切分成固定大小的块,默认大小为128MB(Hadoop 2.x及以后),文件存储为一系列的数据块,而不是连续的字节流,这使得文件可以大于任何单个磁盘的容量。
- 副本:为了数据安全,每个数据块默认会有3个副本,这些副本会被存储到集群中不同的DataNode上,以防止单个节点故障导致数据丢失。
- 机架感知:HDFS会尽量将副本放置在不同的机架上,以防止整个机架断电或网络故障导致数据不可用,同时也能提高数据的读取效率。
2.3 HDFS的读写流程
- 写入流程:
- 客户端向NameNode请求上传文件。
- NameNode检查目标文件是否已存在、权限是否足够,然后返回一个可用的DataNode列表(包含3个节点)。
- 客户端将数据流式式地写入第一个DataNode,第一个DataNode接收数据后,会将一部分数据传给第二个DataNode,第二个再传给第三个,形成“管道”。
- 当所有DataNode都确认写入成功后,会向客户端和NameNode返回确认信息。
- 读取流程:
- 客户端向NameNode请求读取文件。
- NameNode返回文件的元数据,包括数据块的位置列表(会优先选择离客户端最近的副本)。
- 客户端从DataNode获取数据块,如果读取失败,客户端会尝试从另一个副本读取。
3 YARN (Yet Another Resource Negotiator)
3.1 设计目标与架构
YARN是Hadoop的资源管理器,它将资源管理和任务调度/监控的功能分离开来,使得多种计算框架(如MapReduce, Spark, Flink)可以运行在同一个Hadoop集群上,其架构如下:
- ResourceManager (RM):全局的资源管理者,负责整个集群的资源分配和调度,它接收来自客户端的作业请求,并分配容器给应用程序。
- NodeManager (NM):每个工作节点上的代理,负责监控本节点的资源(CPU、内存)和任务,并向RM汇报,它负责启动和监控容器。
- ApplicationMaster (AM):每个应用程序都有一个自己的AM,它的职责是与RM协商资源,并与NM合作来执行和监控任务,AM是应用程序的“管家”。
3.4 YARN的工作流程
- 客户端向RM提交一个应用程序。
- RM为该应用程序分配一个容器,并在其中启动AM。
- AM向RM注册自己,然后根据需求向RM申请资源。
- RM返回可用的容器列表给AM。
- AM与相应的NM通信,要求NM在容器中启动任务。
- NM启动任务,并监控其状态,同时向AM和RM汇报。
- 任务完成后,AM向RM注销,并释放所有容器。
4 MapReduce
4.1 核心思想:分而治之
MapReduce是一种编程模型,用于大规模数据集的并行运算,它将一个大任务分解成两个阶段:Map阶段和Reduce阶段。
4.2 Map阶段与Reduce阶段
- Map阶段:处理输入数据,将其分解成一系列的
<key, value>键值对,这个过程是并行的,每个输入块都会被一个Map任务处理。 - Shuffle & Sort阶段:MapReduce框架自动执行,它将Map阶段输出的
<key, value>对进行分区、排序和分组,确保所有相同key的<key, value>对被发送到同一个Reduce任务。 - Reduce阶段:对分组后的数据进行聚合处理,输出最终的
<key, value>结果。
4.3 一个简单的WordCount实例
这是MapReduce的“Hello, World!”程序,功能是统计文本中每个单词出现的次数。
- Mapper:
- 输入:
<行偏移量, 行内容> - 处理:将一行内容按空格切分成单词,为每个单词输出
<单词, 1>。 - 输出:
<"hadoop", 1>,<"is", 1>,<"good", 1>, ...
- 输入:
- Reducer:
- 输入:
<单词, [1, 1, 1, ...]>(所有值为1的列表) - 处理:对列表中的值进行求和。
- 输出:
<"hadoop", 3>,<"is", 2>, ...
- 输入:
第三章:Hadoop环境搭建
1 环境准备
- 操作系统:Linux (推荐CentOS/Ubuntu)。
- Java环境:Hadoop基于Java开发,需要安装JDK 1.8或更高版本。
- SSH免密登录:Hadoop节点之间需要通过SSH进行通信,需要配置主节点到所有从节点的免密登录。
2 Hadoop安装模式
- 单机模式:所有组件运行在一个JVM进程中,仅用于开发和调试。
- 伪分布式模式:在单台机器上模拟Hadoop集群的各个角色,NameNode、DataNode、ResourceManager、NodeManager等都在同一台机器上以不同进程运行,这是学习和验证Hadoop功能的最佳模式。
- 完全分布式模式:在多台物理机器上搭建真正的Hadoop集群,用于生产环境。
3 伪分布式环境搭建详细步骤
- 下载与解压:从Apache Hadoop官网下载稳定版本的二进制包,并解压到指定目录。
- 配置环境变量:在
~/.bashrc或/etc/profile中添加JAVA_HOME和HADOOP_HOME。 - 修改核心配置文件:
hadoop-env.sh:设置JAVA_HOME路径。core-site.xml:配置HDFS的默认地址。<configuration> <property> <name>fs.defaultFS</name> <value>hdfs://localhost:9000</value> </property> </configuration>hdfs-site.xml:配置HDFS的副本数和临时数据目录。<configuration> <property> <name>dfs.replication</name> <value>1</value> </property> <property> <name>dfs.namenode.name.dir</name> <value>/path/to/dfs/name</value> </property> <property> <name>dfs.datanode.data.dir</name> <value>/path/to/dfs/data</value> </property> </configuration>yarn-site.xml:配置YARN的相关参数。<configuration> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> </configuration>mapred-site.xml:指定MapReduce运行在YARN上。<configuration> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> </configuration>
- 格式化HDFS:首次启动前,需要格式化NameNode,命令为
hdfs namenode -format。 - 启动与验证集群:
- 启动HDFS:
start-dfs.sh - 启动YARN:
start-yarn.sh - 验证:使用
jps命令,主节点上应看到NameNode,ResourceManager,从节点上应看到DataNode,NodeManager,也可以通过浏览器访问http://localhost:9870(HDFS Web UI) 和http://localhost:8088(YARN Web UI)。
- 启动HDFS:
后续章节内容预览
- 第四章将详细介绍如何通过命令行和Java API与HDFS进行交互,这是日常操作和开发的基础。
- 第五章将通过经典的WordCount案例,带您亲手编写、运行和调试第一个MapReduce程序,深入理解其工作原理。
- 第六章将带您进入Hadoop的“朋友圈”,了解Hive如何让SQL用户查询HDFS数据,HBase如何提供高效的随机读写等。
- 第七章和第八章则着眼于提升和未来,探讨性能优化技巧,并介绍Hadoop在技术浪潮中的演进和未来的学习方向。
