Hadoop大数据笔记
- 行业动态
- 2025-05-16
- 6
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上,保证高可用性 |
一次写入,多次读取 | 文件写入后不可修改,适合静态数据存储 |
高容错性 | 通过心跳检测和副本恢复机制,自动处理节点故障 |
数据读写流程:
- 写入流程:客户端将文件切分为Block,向NameNode请求存储位置,随后将Block并行写入多个DataNode。
- 读取流程:客户端从NameNode获取文件Block的位置信息,直接从DataNode读取数据。
MapReduce:分布式计算模型
MapReduce是Hadoop的计算引擎,基于“分而治之”思想,将任务分解为Map(映射)和Reduce(归约)两个阶段:
Map阶段:
- 输入数据被分割为多个Split(通常等于HDFS的Block)。
- 每个Split由一个Mapper任务处理,输出键值对(Key-Value)。
- 输出结果通过Shuffle阶段按Key分组并排序,分发到对应的Reducer。
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:每个应用独立的调度器,负责任务拆分与调度。
工作流程:
- 客户端提交应用,ResourceManager分配容器资源。
- ApplicationMaster根据任务需求启动多个Map/Reduce任务。
- NodeManager监控任务执行状态,并向ResourceManager反馈。
Hadoop生态系统组件
Hadoop生态包含多种工具,覆盖数据存储、计算、管理等场景:
组件 | 功能 |
---|---|
Hive | 数据仓库,提供SQL查询接口 |
HBase | 分布式NoSQL数据库,支持实时读写 |
Spark | 内存计算框架,提升迭代式计算效率 |
ZooKeeper | 分布式协调服务,管理集群元数据 |
Flume/Kafka | 日志采集与流数据处理工具 |
Hadoop优缺点分析
优点 | 缺点 |
---|---|
支持PB级数据存储与计算 | 实时性差,不适合低延迟场景 |
高扩展性(横向扩展) | MapReduce编程模型复杂 |
硬件容错性强(自动恢复) | 依赖Java环境,资源消耗较高 |
开源免费,社区活跃 | 小数据集处理效率低 |
应用场景
- 日志处理:收集服务器日志,统计访问量、错误率等。
- 数据仓库:通过Hive分析历史数据,支持BI报表生成。
- 推荐系统:基于用户行为数据训练模型(如协同过滤)。
- 基因测序分析:处理海量生物序列数据。
FAQs(常见问题解答)
Q1:Hadoop适合处理哪些类型的数据?
A:Hadoop适用于批量处理结构化/非结构化数据,如日志、传感器数据、社交媒体数据等,但其不适合实时计算(如金融交易),此类场景建议使用Spark Streaming或Flink。
Q2:HDFS中Block大小如何设置?
A:默认Block大小为128MB,可根据实际需求调整:
- 增大Block size:适合大文件存储(如视频、基因组数据),减少NameNode元数据压力。
- 减小Block size:适合小文件(如日志),但可能导致过多碎片,建议结合Hadoop Archive