一、大数据的特征
大数据主要具有四个方面的典型特征,即大量(Volume)、多样(Variety)、高速(Velocity)和价值(Value),即“4V“。
大量(Volume):数据量的存储单位从过去的GB到TB、甚至达到PB、EB
多样(Variety):数据类型复杂多样,包括结构型数据、非结构型数据、源数据、处理数据等
高速(Velocity):大数据采集、处理计算速度较快、能满足实时数据分析需求
价值(Value):将原始数据经过采集、清洗、深度挖掘、数据分析后具有较高的商业价值
二、结构化数据和非结构化数据
结构化数据:
结构化数据也称作行数据,是由二维表结构来逻辑表达和实现的数据,严格地遵循数据格式与长度规范,主要通过关系型数据库进行存储和管理。与结构化数据相对的是不适于由数据库二维表来表现的非结构化数据,包括所有格式的办公文档、XML、HTML、各类报表、图片和音频、视频信息等。
例子:关系数据库中的数据表、Excel电子表格、SQL数据库中的数据
非结构化数据:
非结构化数据是数据结构不规则或不完整,没有预定义的数据模型,不方便用数据库二维逻辑表来表现的数据。包括所有格式的办公文档、文本、图片, HTML、各类报表、图像和音频/视频信息等等。支持非结构化数据的数据库采用多值字段、了字段和变长字段机制进行数据项的创建和管理,广泛应用于全文检索和各种多媒体信息处理领域。
例子:社交媒体帖子、视频和音频文件、文档和PDF文件
三、Hadoop生态圈
Hadoop是目前应用最为广泛的分布式大数据处理框架,其具备可靠、高效、可伸缩等特点。
Hadoop的核心组件是HDFS、MapReduce。随着处理任务不同,各种组件相继出现,丰富Hadoop生态圈,目前生态圈结构大致如图所示:
根据服务对象和层次分为:数据来源层、数据传输层、数据存储层、资源管理层、数据计算层、任务调度层、业务模型层。
四、Hadoop hdfs架构
1、HDFS(分布式文件系统)
HDFS,是Hadoop Distributed File System的简称,是Hadoop抽象文件系统的一种实现。Hadoop抽象文件系统可以与本地系统、Amazon S3等集成,甚至可以通过Web协议(webhsfs)来操作。HDFS的文件分布在集群机器上,同时提供副本进行容错及可靠性保证。例如客户端写入读取文件的直接操作都是分布在集群各个机器上的,没有单点性能压力。
HDFS是整个hadoop体系的基础,负责数据的存储与管理。HDFS有着高容错性(fault-tolerant)的特点,并且设计用来部署在低廉的(low-cost)硬件上。而且它提供高吞吐量(high throughput)来访问应用程序的数据,适合那些有着超大数据集(large data set)的应用程序。
2、HDFS适用场景:适合一次写入,多次读出的场景。一个文件经过创建、写入和关闭之后就不需要改变。HDFS只支持文件追加,而不支持在任意位置对文件进行修改。
3、HDFS优缺点
优点:
1)高容错性:数据自动保存多个副本,它能够通过增加副本的形式,提高容错性。当某一个副本丢失后,它可以根据其他节点上的副本数据自动恢复。
2)适合处理大数据
数据规模:能够处理数据规模达到GB、TB甚至PB级别的数据;
文件规模:能够处理百万规模以上的文件数量。
3)高可扩展性: HDFS可以轻松扩展以处理大规模数据,只需添加更多的节点即可。这种可扩展性使其适用于应对不断增长的数据量。
4)数据本地性: HDFS会在数据节点上存储数据块,这使得计算可以在数据附近进行,减少了网络传输的开销,提高了性能
缺点
1)延迟问题: HDFS通常用于批量数据处理,对于需要低延迟的实时数据访问场景不太适用。读取数据的响应时间可能会较长。做不到向Mysql那样快速相应数据。
2)无法高效的对大量小文件进行存储
对于每一个存储在HDFS文件系统中的文件,HDFS都会开销一部分内存来存储它的一些元数据(包括目录和块信息等),存储大量小文件的话,会占用NameNode大量的内存来存储文件目录和块信息。这样是不可取的,因为NameNode的内存总是有限的,太多的小文件会徒增NameNode的负担,甚至会使其崩溃。
3)不支持原子性写入操作: HDFS不支持原子性写入操作,这意味着如果多个客户端同时尝试写入同一文件,可能会导致数据不一致性。
4、HDFS架构
- NN(NameNode)是HDFS的管理者,负责管理和维护 HDFS 的命名空间,配置副本策略(根据机架感知与副本冗余存储策略选择节点。⼀个文件分割为若干个数据块,这些数据块并不⼀定存储在相同的数据节点上),管理数据块映射信息,处理客户端读写请求。
- DataNode:NN下达命令,DN(DataNode)执行实际的操作:DN存储实际的数据块(block),数据块副本默认为 3,数据块的⼤⼩默认为 128 M,执⾏数据块的读/写操作。
- 2NN(secondary NameNode):并⾮NN的热备,当NN挂掉的时候,并不能马上替换NN并提供服务,2NN是辅助NN,分担其工作量,比如定期合并fsimage和edits,并推送给NN 。
- Client:就是客户端。文件上传给HDFS时进行文件切分,与NN交互,获取⽂件的位置信息。
- 与 DN交互,读取或者写入数据。Client 提供⼀些命令来管理 HDFS。也可以通过⼀些命令来访问 HDFS。
五、hdfs读的流程
1)客户端传递一个文件Path给FileSystem的open方法
2)DFS采用RPC远程获取文件最开始的几个block的datanode地址。Namenode会根据网络拓扑结构决定返回哪些节点(前提是节点有block副本),如果客户端本身是Datanode并且节点上刚好有block副本,直接从本地读取
3)客户端使用open方法返回的FSDataInputStream对象读取数据(调用read方法)
4)DFSInputStream(FSDataInputStream实现了改类)连接持有第一个block的、最近的节点,反复调用read方法读取数据
5)第一个block读取完毕之后,寻找下一个block的最佳datanode,读取数据。如果有必要,DFSInputStream会联系Namenode获取下一批Block 的节点信息(存放于内存,不持久化),这些寻址过程对客户端都是不可见的
6)数据读取完毕,客户端调用close方法关闭流对象
在读数据过程中,如果与Datanode的通信发生错误,DFSInputStream对象会尝试从下一个最佳节点读取数据,并且记住该失败节点, 后续Block的读取不会再连接该节点
读取一个Block之后,DFSInputStram会进行检验和验证,如果Block损坏,尝试从其他节点读取数据,并且将损坏的block汇报给Namenode。
客户端连接哪个datanode获取数据,是由namenode来指导的,这样可以支持大量并发的客户端请求,namenode尽可能将流量均匀分布到整个集群。
Block的位置信息是存储在namenode的内存中,因此相应位置请求非常高效,不会成为瓶颈。
版权归原作者 Watopos 所有, 如有侵权,请联系我们删除。