当前位置:首页 > 行业动态 > 正文

Hadoop大数据笔记

Hadoop核心组件包括HDFS、MapReduce、YARN,实现分布式存储与计算,具备高扩展性和容错性,适用于海量数据处理,生态系统涵盖Hive、

Hadoop大数据笔记:核心原理与实践指南

Hadoop

Hadoop是Apache基金会开发的开源分布式计算框架,专为大规模数据处理设计,其核心优势在于高扩展性高容错性低成本存储,通过并行化计算解决传统单机系统无法处理的海量数据问题,Hadoop生态系统包含多个组件,其中最核心的是HDFS(分布式文件系统)MapReduce(分布式计算模型)YARN(资源调度系统)


HDFS:分布式存储基石

HDFS(Hadoop Distributed File System)是Hadoop的存储层,采用主从架构,分为NameNode(管理元数据)和DataNode(存储实际数据),其核心特性包括:

特性 说明
块存储 数据被分割为固定大小(默认128MB)的Block,分散存储在不同DataNode上
副本机制 每个Block默认存储3份副本,分别存放在不同机架的DataNode上,保证高可用性
一次写入,多次读取 文件写入后不可修改,适合静态数据存储
高容错性 通过心跳检测和副本恢复机制,自动处理节点故障

数据读写流程

  1. 写入流程:客户端将文件切分为Block,向NameNode请求存储位置,随后将Block并行写入多个DataNode。
  2. 读取流程:客户端从NameNode获取文件Block的位置信息,直接从DataNode读取数据。

MapReduce:分布式计算模型

MapReduce是Hadoop的计算引擎,基于“分而治之”思想,将任务分解为Map(映射)Reduce(归约)两个阶段:

  1. Map阶段

    • 输入数据被分割为多个Split(通常等于HDFS的Block)。
    • 每个Split由一个Mapper任务处理,输出键值对(Key-Value)。
    • 输出结果通过Shuffle阶段按Key分组并排序,分发到对应的Reducer。
  2. Reduce阶段

    Reducer接收相同Key的键值对集合,进行汇总或计算,输出最终结果。

示例代码(WordCount):

// Mapper类
public static class WordCountMapper extends Mapper<LongWritable, Text, Text, IntWritable> {
    private final static IntWritable one = new IntWritable(1);
    private Text word = new Text();
    public void map(LongWritable key, Text value, Context context) throws IOException {
        String[] words = value.toString().split("\s+");
        for (String w : words) {
            word.set(w);
            context.write(word, one);
        }
    }
}
// Reducer类
public static class WordCountReducer extends Reducer<Text, IntWritable, Text, IntWritable> {
    public void reduce(Text key, Iterable<IntWritable> values, Context context) throws IOException {
        int sum = 0;
        for (IntWritable val : values) {
            sum += val.get();
        }
        context.write(key, new IntWritable(sum));
    }
}

YARN:资源管理与调度

YARN(Yet Another Resource Negotator)负责集群资源管理和任务调度,解决MapReduce 1.0中JobTracker的资源瓶颈问题,其核心组件包括:

  • ResourceManager:全局资源管理器,负责分配容器(Container)资源。
  • NodeManager:监控单个节点的资源使用情况(CPU、内存)。
  • ApplicationMaster:每个应用独立的调度器,负责任务拆分与调度。

工作流程

  1. 客户端提交应用,ResourceManager分配容器资源。
  2. ApplicationMaster根据任务需求启动多个Map/Reduce任务。
  3. NodeManager监控任务执行状态,并向ResourceManager反馈。

Hadoop生态系统组件

Hadoop生态包含多种工具,覆盖数据存储、计算、管理等场景:

组件 功能
Hive 数据仓库,提供SQL查询接口
HBase 分布式NoSQL数据库,支持实时读写
Spark 内存计算框架,提升迭代式计算效率
ZooKeeper 分布式协调服务,管理集群元数据
Flume/Kafka 日志采集与流数据处理工具

Hadoop优缺点分析

优点 缺点
支持PB级数据存储与计算 实时性差,不适合低延迟场景
高扩展性(横向扩展) MapReduce编程模型复杂
硬件容错性强(自动恢复) 依赖Java环境,资源消耗较高
开源免费,社区活跃 小数据集处理效率低

应用场景

  1. 日志处理:收集服务器日志,统计访问量、错误率等。
  2. 数据仓库:通过Hive分析历史数据,支持BI报表生成。
  3. 推荐系统:基于用户行为数据训练模型(如协同过滤)。
  4. 基因测序分析:处理海量生物序列数据。

FAQs(常见问题解答)

Q1:Hadoop适合处理哪些类型的数据?
A:Hadoop适用于批量处理结构化/非结构化数据,如日志、传感器数据、社交媒体数据等,但其不适合实时计算(如金融交易),此类场景建议使用Spark Streaming或Flink。

Q2:HDFS中Block大小如何设置?
A:默认Block大小为128MB,可根据实际需求调整:

  • 增大Block size:适合大文件存储(如视频、基因组数据),减少NameNode元数据压力。
  • 减小Block size:适合小文件(如日志),但可能导致过多碎片,建议结合Hadoop Archive
0