一、大数据的特征
大数据主要具有四个方面的特征,通常指的4V,即大量(Volume)、多样(Variety)、高速(Velocity)和价值(Value)。
(1)数据量大(Volume) 非结构化数据的超大规模和增长,导致数据集合的规模不断扩大,数据单位已从GB到TB再到PB级,甚至开始以EB和ZB来计数。
(2)类型繁多(Variety) 大数据的类型不仅包括网络日志、音频、视频、图片、地理位置信息等结构化数据,还包括半结构化数据甚至是非结构化数据,具有异构性和多样性的特点。
(3)价值密度低(Value) 大数据本身存在较大的潜在价值,但由于大数据的数据量过大,其价值往往呈现稀疏性的特点。虽然单位数据的价值密度在不断降低,但是数据的整体价值在提高。
(4)速度快时效高(Velocity) 要求大数据的处理速度快,时效性高,需要实时分析而非批量式分析,数据的输入、处理和分析连贯性地处理。
二、结构化数据和非结构化数据
(1)结构化数据:即行数据,存储在数据库里,可以用二维表结构来逻辑表达实现的数据。结构化数据类型是一种用户定义的数据类型,它包含一些非原子的元素,更确切地说,这些数据类型是可以分割的,它们既可以单独使用,又可以在适当情况下作为一个独立的单元使用。结构化数据类型 是一种用户定义的数据类型,它包含了一系列的属性,每一个属性都有一个数据类型。属性 是专门用来帮助描述类型实例的特性。
例如: id name age gender
1 Liu Yi 20 male
2 Chen Er 35 female
3 Zhang San 28 male
(2)非结构化数据:不方便用数据库二维逻辑表来表现的数据,包括所有格式的办公文档、文本、图片、XML、HTML、各类报表、图像和音频视频信息等等。非结构化数据库是指其字段长度可变,并且每个字段的记录又可以由可重复或不可重复的子字段构成的数据库,用它不仅可以处理结构化数据(如数字、符号等信息)而且更适合处理非结构化数据(全文文本、图象、声音、影视、超媒体等信息)。
三、Hadoop生态圈
Hadoop是一个由Apache基金会所开发的分布式系统基础架构。用户可以在不了解分布式底层细节的情况下,开发分布式程序。是目前应用最为广泛的分布式大数据处理框架,其具备可靠、高效、可伸缩等特点。
Hadoop的核心组件是HDFS、MapReduce。随着处理任务不同,各种组件相继出现,丰富Hadoop生态圈。根据服务对象和层次分为:数据来源层、数据传输层、数据存储层、资源管理层、数据计算层、任务调度层、业务模型层。
四、Hadoop hdfs 架构
(1)HDFS(Hadoop Distributed File System),它是一个文件系统;HDFS的使用场景:适合一次写入,多次读出的场景。
(2)组成架构:
NameNode(nn):
1)管理HDFS的名称空间;
2)配置副本策略;
3)管理数据块(Block) 映射信息;
4)处理客户端读写请求。
DataNode:就是Slave,NameNode下达命令,DataNode执行实际操作。
1)存储实际的数据块
2)执行数据块的读写操作
Client:就是客户端。
1)文件切分。文件上传HDFS的时候, Client将文件切分成一 个个的Block, 然后进行上传
2)与NameNode交互,获取文件的位置信息
3)与DataNode交互,读取或者写入数据
4)Client提供一 些命 令来管理HDFS,比如NameNode格式化
5)Client可以通过一些命令来访问HDFS,比如对HDFS增删查改操作
Secondany NameNode:并非NameNode的热备。当NameNode挂掉的时候, 它并不能马上替换NameNode并提供服务。
1)辅助NameNode,分担其工作量,比如定期台并fsimage和edits,并推送给NameNode ;
2)在紧急情况下,可辅助恢复NameNode。
(3)HDFS特性
1)能够保存PB级的数据量,将数据散布在大量的计算机(节点)上,支持更大的文件。
2)使用数据备份的方法解决文件存储的可靠性,如果集群中单个节点故障则启用备份。
3)很好的与Map-Reduce集成,为减小计算时的数据交互,HDFS允许数据在本地计算。
(4) HDFS局限性
1)针对高速流式读取进行优化,查询性能低下(可利用Hive查询)
2)一次写入多次读取,不支持并发写入,并发读取性能很高
3)不支持文件修改
4)不支持缓存,每次读取文件须从硬盘上重新读取,当然对于大文件顺序读取性能影响不大
5)不适合存储小文件
五、hdfs 读流程
(1)HDFS Client 调用Filesystem.open(filePath)方法,与NN进行RPC通信
(2)NN对文件进行权限检查(存在?权限?)然后根据就近返回相应的block列表给Client
(3)Client与相应的每个block主机建立PipeLine(并行)
(4)client调用FSDataInputStream.read方法同样以package为单位进行读取,读取完后进行检查
(5)将读取的不同block进行合并
(6)client调用FSDataInputStream的close方法关闭数据流
版权归原作者 2301_77733819 所有, 如有侵权,请联系我们删除。