Hadoop(hdfs, yarn, mapreduce)理论详解_大宁哥的博客-优快云博客
HDFS读写流程(史上最精炼详细)_bw_233的博客-优快云博客_hdfs 读取
HDFS读写数据流程 - CoderZZZ - 博客园 (cnblogs.com)
深入浅出 Hadoop YARN - 知乎 (zhihu.com)
hadoop之mapreduce详解(基础篇) - 一寸HUI - 博客园 (cnblogs.com)
Hadoop生态之Mapreduce_小滴杂货铺的博客-优快云博客
Hadoop中的MapReduce是什么?体系结构|例 (guru99.com)
MapReduce shuffle过程详解!_<一蓑烟雨任平生>的博客-优快云博客_mapreduce shuffle过程详解
Hadoop简介
-
Hadoop 生态圈:(或者泛生态圈)是一个能够对大量数据进行分布式处理的软件框架,是大数据平台的开发工具,但不是一个单一的工具,也不是一种单一的技术,而是一系列技术和工具的合集。用户在不需要了解分布式底层细节的情况下,能够开发分布式程序。
-
Hadoop是基于Java语言开发的,具有很好的跨平台特性,并且可以部署在廉价的计算机集群中。
-
Hadoop大数据平台,采用分布式架构,包含多个与大数据处理相关的组件:HDFS、MapReduce、Yarn、Hbase、Hive、Spark、Kafak、Storm、HDF、Ambari等,并根据用户的实际需求完成功能定制。
-
Hadoop框架中其中最核心的组件有三个:HDFS、MapReduce和Yarn。
- HDFS为海量数据提供了存储;
- MapReduce则为海量的数据提供了计算;
- Yarn为海量数据的处理提供了良好的系统调度。
以下是Hadoop生态中的成员:
一、HDFS——分布式文件系统
1、简介总结
总结
-
HDFS(分布式文件系统,Hadoop Distributed File System)是Hadoop的核心组件之一,是分布式计算中数据存储管理的基础,被设计成适合运行在通用硬件上的分布式文件系统。
-
设计思想:(分而治之)将大文件、大批量文件,分布式存放在大量服务器上,以便于采取分而治之的方式对海量数据进行运算分析。
-
在大数据系统中作用:为各类分布式运算框架(如:mapreduce,spark,tez,……)提供数据存储服务。
-
HDFS架构中有两类节点:
1)NameNode元数据节点。
2)DataNode数据节点, 其分别执行Master和Worker任务。
-
HDFS也可以理解为一个Master+Slave体系,“一次写入,多次读取”。
HDFS的优缺点:
优点:
-
高容错。因为其保存多个副本,通过增加副本的形式提高容错性,某个副本丢失之后,他可以通过其他副本自动恢复。通过多副本机制提高可靠性,提供容错和恢复机制。
-
适合存储大批量数据。处理达到GB,TB,甚至PB级别的数据,处理百万规模以上的文件,处理10K节点的规模。
-
流式文件访问,而不是随机读写
-
一次写入多次读取,文件一旦写入不能修改,只能追加,保证数据的一致性。
- write-once-read-many一次写入多次读取的模式(无数据一致性问题)
-
可以构建在普通的机器上,硬件要求不高。对机器要求不高,硬盘大一点就行。
-
存储处理非结构化数据
-
注重数据处理的吞吐量(延迟不敏感)??
缺点:
- 不适合低延迟数据访问。做不到毫秒级别的存储,但是适合高吞吐率场景(某一时间写入大量的数据)。
- 不适合小文件存储。存储大量小文件会占用NameNode大量的内存来存储文件,目录、和块信息。
- 不适合并发写入。一个文件只能有一个写入者,不允许多个线程同时写入。
- 不适合文件随机写入修改。仅仅支持追加写入,不支持文件随机修改。
hdfs不适合场景
- 存储海量小文件
- 文件被修改
- 大量随机读取,对于大数据的文件读取,更倾向于顺序读。因为随机读取需要寻址,浪费时间影响效率,而且顺序读取的效率会比内存读取要高
为什么HDFS更倾向于存储大文件?----结合分块存储思想
NameNode内存有限,如果内存存放大量小文件,会占用大量内存和I/O资源,使得集群反应速度慢。所以,Hadoop不适合存储大量的小文件。hdfs1.0的块大小是64M,hdfs2.0是128M。
总结:
- 对于集群硬盘资源造成严重浪费;
- NameNode本身内存有限,造成NameNode内存溢出;
假设有一个块,大小64m,但是存储的文件大小是10m,就浪费了54m的空间,对集群的硬盘资源造成了严重浪费。
2、HDFS架构
HDFS采用了主从式(Master/Slave)的体系结构,分NameNode、SecondaryNameNode、DataNode这几个角色。
- NameNode:是Master节点,是大领导。管理数据块映射;处理客户端的读写请求;配置副本策略;管理HDFS的名称空间;
- SecondaryNameNode:是一个小弟,分担大哥NameNode的工作量;是NameNode的冷备份;合并fsimage和fsedits然后再发给NameNode。
- DataNode:是Slave节点,工作者,干活的。负责存储client发来的数据块block;执行数据块的读写操作。