杰瑞科技汇

Hadoop基础教程,核心概念与实践要点有哪些?

Hadoop基础教程


目录

  • 第一章:初识Hadoop

    Hadoop基础教程,核心概念与实践要点有哪些?-图1
    (图片来源网络,侵删)
    • 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 本章小结
  • 第四章:HDFS操作实践

    • 1 HDFS Shell命令
      • 1.1 文件与目录操作 (ls, mkdir, rm, mv)
      • 1.2 文件上传与下载 (put, get)
      • 1.3 查看文件内容 (cat, text)
      • 1.4 查看磁盘使用情况 (df, du)
    • 2 通过Java API操作HDFS
      • 2.1 搭建Java开发环境
      • 2.2 读取HDFS文件
      • 2.3 写入HDFS文件
    • 3 本章小结
  • 第五章:MapReduce编程实践

    Hadoop基础教程,核心概念与实践要点有哪些?-图2
    (图片来源网络,侵删)
    • 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 查看任务日志
    • 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 本章小结
  • 第七章: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 来描述:

Hadoop基础教程,核心概念与实践要点有哪些?-图3
(图片来源网络,侵删)
  • 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的核心架构由三个主要部分组成,它们协同工作,共同构成了一个强大的分布式计算平台。

  1. HDFS (Hadoop Distributed File System):分布式文件系统,负责数据的存储。
  2. YARN (Yet Another Resource Negotiator):资源管理器,负责集群资源(CPU、内存)的调度和管理。
  3. 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的读写流程

  • 写入流程
    1. 客户端向NameNode请求上传文件。
    2. NameNode检查目标文件是否已存在、权限是否足够,然后返回一个可用的DataNode列表(包含3个节点)。
    3. 客户端将数据流式式地写入第一个DataNode,第一个DataNode接收数据后,会将一部分数据传给第二个DataNode,第二个再传给第三个,形成“管道”。
    4. 当所有DataNode都确认写入成功后,会向客户端和NameNode返回确认信息。
  • 读取流程
    1. 客户端向NameNode请求读取文件。
    2. NameNode返回文件的元数据,包括数据块的位置列表(会优先选择离客户端最近的副本)。
    3. 客户端从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的工作流程

  1. 客户端向RM提交一个应用程序。
  2. RM为该应用程序分配一个容器,并在其中启动AM。
  3. AM向RM注册自己,然后根据需求向RM申请资源。
  4. RM返回可用的容器列表给AM。
  5. AM与相应的NM通信,要求NM在容器中启动任务。
  6. NM启动任务,并监控其状态,同时向AM和RM汇报。
  7. 任务完成后,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 伪分布式环境搭建详细步骤

  1. 下载与解压:从Apache Hadoop官网下载稳定版本的二进制包,并解压到指定目录。
  2. 配置环境变量:在~/.bashrc/etc/profile中添加JAVA_HOMEHADOOP_HOME
  3. 修改核心配置文件
    • 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>
  4. 格式化HDFS:首次启动前,需要格式化NameNode,命令为hdfs namenode -format
  5. 启动与验证集群
    • 启动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)。

后续章节内容预览

  • 第四章将详细介绍如何通过命令行和Java API与HDFS进行交互,这是日常操作和开发的基础。
  • 第五章将通过经典的WordCount案例,带您亲手编写、运行和调试第一个MapReduce程序,深入理解其工作原理。
  • 第六章将带您进入Hadoop的“朋友圈”,了解Hive如何让SQL用户查询HDFS数据,HBase如何提供高效的随机读写等。
  • 第七章和第八章则着眼于提升和未来,探讨性能优化技巧,并介绍Hadoop在技术浪潮中的演进和未来的学习方向。
分享:
扫描分享到社交APP
上一篇
下一篇