作者:mobiledu2502859223 | 来源:互联网 | 2023-07-24 09:28
第一章 Hadoop
Hadoop是一个开源的分布式计算平台,核心包括分布式文件系统HDFS和并行运算方法MapReduce。
1.1 关于Hadoop
1.1.1 Hadoop 特性
- 高可靠性、高容错性
- 高效性
- 高可扩展性
- 成本低
- 运行在Linux平台上
- 支持多种编程语言
1.1.2 Hadoop 项目结构
组件 |
功能 |
HDFS |
分布式文件系统 |
MapReduce |
分布式并行编程模型 |
YARN |
资源管理和调度器 |
Tez |
运行在YARN之上的下一代Hadoop查询处理框架 |
Hive |
Hadoop上的数据仓库 |
HBase |
Hadoop上的非关系型的分布式数据库 |
Pig |
一个基于Hadoop的大规模数据分析平台,提供类似SQL的查询语言 |
Sqoop |
用于在Hadoop与传统数据库之间进行数据传递 |
Oozie |
Hadoop上的工作流管理系统 |
Zookeeper |
提供分布式协调一致性服务 |
Storm |
流计算框架 |
Flume |
一个高可用的,高可靠的,分布式的海量日志采集、聚合和传输的系统 |
Ambari |
Hadoop快速部署工具,支持Apache Hadoop集群的供应、管理和监控 |
Kafka |
一种高吞吐量的分布式发布订阅消息系统 |
Spark |
类似于Hadoop MapReduce的通用并行框架 |
1.1.3 Hadoop与Spark
-
Hadoop实质上是一个分布式数据基础设施,它将巨大的数据集分派到一个由普通计算机组成的集群中的多个节点进行存储,意味着不需要购买和维护昂贵的服务器硬件。
-
Spark则是那么一个专门用来对那些分布式存储的大数据进行处理的工具,它并不会进行分布式数据的存储。
-
它们两者可合可分,Hadoop还提供了叫做MapReduce的数据处理功能。所以这里我们完全可以抛开Spark,使用MapReduce来完成数据的处理。Spark也不是非要依附在Hadoop身上才能生存。但毕竟它没有提供文件管理系统,所以,它必须和其他的分布式文件系统进行集成才能运作。
1.2 HDFS
HDFS是一种分布式文件系统,它具有极高的吞吐量和容错率,共有两类节点,一类为主节点——“NameNode”,另一类为从节点——“DataNode”。
1.2.1 HDFS块存储
HDFS使用块结构存储数据,其优点为:
- 支持大规模文件存储。
- 简化系统设计,方便数据管理和储存管理。
- 适合数据备份。
1.2.2 HDFS的局限性
- 命名空间的限制:名称节点是保存在内存中的,因此,名称节点能够容纳的对象的个数会受到内存空间大小的限制。
- 性能的瓶颈:整个分布式文件系统的吞吐量,受限于单个名称节点的吞吐量。
- 隔离问题:由于集群中只有一个名称节点,只有一个命名空间,因此,无法对不同应用程序进行隔离。
- 集群的可用性:一旦这个唯一的名称节点发生故障,会导致整个集群变得不可用。
1.2.3 HDFS读过程
- 打开文件(DFS),创建输入流。
- 获取块信息。
- 处理读取请求。
- 读取数据。
- “处理读取请求”与“读取数据”两步循环,直至结束。
1.2.4 HDFS写过程
- 打开文件。
- 创建文件元数据。
- 处理写入请求。
- 写入数据包。
- 接收确认包。
- 关闭文件。
1.3 MapReduce
MapReduce将大规模计算抽象到了两个函数:Map和Reduce。在MapReduce中,一个大规模数据集,会被切分成许多小数据块,这些小数据块可以被多个Map任务并行处理。Map任务生成的结果会继续作为Reduce任务的输入,最终由Reduce任务输出最后结果,并写入到分布式文件系统中。
1.3.1 MapReduce执行阶段
- InputFormat:进行数据预处理,如校验格式等。
- Split:将输入文件切分为逻辑上的多个InputSplit。
- RecordReader:加载数据并转换为map任务读取的键值对。
- Map:执行Map函数。
- Shuffle:溢写过程。
- Reduce:执行Reduce函数。
- OutputFormat:进行数据后处理,如变换格式等。