- 大数据的特征:
- 数据量大(Volume):非结构化数据的超大规模和增长,导致数据集合的规模不断扩大,数据单位已从GB到TB再到PB,甚至开始以EB和ZB来计数。
- 类型繁多(Variety):大数据的类型不仅包括网络日志、音频、视频、图片、地理位置信息等结构化数据,还包括半结构化数据甚至使非结构化数据,具有异构型和多样性的特点。
- 价值密度低(Value):大数据本身存在较大的潜在价值,但由于大数据的数据量大,其价值往往呈现稀疏性的特点。虽然单位价值数据的价值密度在不断降低,但是数据的整体价值在提高。
- 速度快时效高(Velocity):要求大数据的处理速度 快,时效性高,需要实时分析而非批量式分析,数据的输入、处理和分析连贯性的处理。
- 结构化数据和非结构化数据:
- 结构化数据:指关系模型数据,即以关系数据库表形式管理的数据,结合到典型场景中更容易理解,比如企业ERP、OA、HR里的数据。
- 非结构化数据:指数据结构不规则或不完整,没有预定义的数据模型,不方便用数据库二维逻辑表来表现的数据。如word、pdf、ppt及各种形式的图片、视频等。
- 半结构化数据:指非关系模型的、有基本固定结构模式的数据。例如日志文件、XML文档、JSON文档、E-mail等。
- Hadoop生态圈:
我们通常说到的hadoop包括两个部分,一是Hadoop核心技术(或者说狭义上的hadoop),对应为apache开源社区的一个项目,主要包括三部分内容:hdfs,mapreduce,yarn。其中hdfs用来储存海量数据,mapreduce用来对海量数据进行计算,yarn是一个通用的资源调度框架(是在hadoop2.0中产生的)。
另一部分指广义的,广义上指一个生态圈,泛指大数据技术相关的开源组件或产品,如hbase、hive、spack、pig、zookeeper、kafka、flume、phoenix、sqoop等。
生态圈中的这些组件或产品相互之间会有依赖,但又各自独立。比如habse和kafka会依赖zookeeper,hive会依赖mapreduce。
- Hadoop hdfs架构:
- HDFS产生背景:
随着数据量的越来越大,在一个操作系统存不下赛哦有的数据,那么就分配到更多的操作系统管理的磁盘中,但是不方便管理和维护,需要一种系统来管理多台机器上的文件,这就是分布式文件管理系统。HDFS是分布式文件管理系统中的一种。
- HDFS的定义:
HDFS(Hadoop Distributed File Systemctl)是一个文件系统,用于储存文件,通过目录树来定位为文件。它是分布式的,由很多服务器联合起来实现其功能,集群中的服务器有各自的角色。
- HDFS优缺点:
优点:1.高容错性
- 数据自动保存多个副本。通过增加副本的形式提高容错性。
- 某一个副本丢失后,可以自动恢复。
- 适合处理大数据。
- 数据规模:能够处理数据规模达到GB、TB、甚至PB级别的数据。
- 文件规模:能够处理百万规模以上的文件数量,数量相当之大。
- 可构建在廉价机器上,通过多副本机制,提高可靠性。
缺点:1.不适合低延迟时数据访问,比如我无法处理毫秒级的储存数据。
- 无法高效的对大量小文件进行存储。
- 储存大量小文件会占用NameNode大量的内存来储存文件目录和快信息,而NameNode的内存是有限的。
- 小文件存储的寻址时间会超过读取时间,违反HDFS的设计目标。
- 不支持并发写入、文件会随即修改
- 一个文件只能有一个写,不允许多个线程同时写
- 仅支持数据追加(append),不支持文件的随即修改
- HDFS组成构架
- Namenode(nn)就是master,是一个主管者、管理者。
- 管理HDFS的名称空间
- 配置副本策略
- 管理数据块(block)映射信息
- Datanode就是slave。Nameenode下达命令,datanode执行实际的操作
- 存储实际的数据块
- 执行数据块的读/写操作
- Client就是客户端。客户端是一个抽象的概念,无论是命令行还是通过API还是web界面来操作都是客户端。
- 文件切分。文件上传HDFS的时候,client将文件切分成一个个Block,然后进行上传
- 与NameNode交互,获取文件的位置信息
- 与DataNode交互,获取或写入数据
- Client提供一些命令来管理HDFS,比如NameNode格式化
- Client可以通过一些命令来访问HDFS ,比如对HDFS增删改查操作
- Secondary NameNode并非NameNode的热备。当NameNode挂掉的时候,并不能马上替换NameNode并提供服务
- 辅助NameNode,分担其工作量,比如定期合并Fsimage和Edits,并推送给NameNode
- 在紧急情况下,可辅助回复NameNode
- HDFS文件块大小
HDFS中的文件在物理上是分块存储(Block)块的大小可以通过配置参数(dfs。Blocksize)来规定,默认大小在Hadoop2.x/3.x版本中是128M。
寻址时间为传输时间的1%时,则为最佳状态。因此,传输时间=10ms/0.01=1000ms=1s而目前磁盘传输速率普遍为100MB/s。
- HDFS读的流程
- 读取数据流程
- 客户端通过Distributed File System向NameNode请求下载文件,NameNode通过查询元数据,找到文件所在的DataNode地址
- 挑选一台DataNode(就近原则,然后随机)服务器。请求读取数据
- DataNode开始数据传输数据给客户端(从磁盘里面读取数据输入流,以Packet为单位来做实验)
- 客户端以Packet为单位接受,先在本地缓存,然后写入目标文件
- 写数据流程
- 客户端通过Distributed File System模块向NameNode请求上传文件,NameNode检查目标文件是否已存在,父目录是否存在
- NameNode返回是否可以上传
- 客户端请求第一个Block上传到哪几个DataNode服务器上
- NameNode返回3个DataNode节点,分别为dn1、dn2、dn3
- 客户端通过FSDataOutputSteram模块请求dn1上传数据,dn1收到请求会继续调用dn2,然后dn2调用dn3,将这个通信管道建立完成
- dn1、dn2、dn3逐级应答客户端
- 客户端开始往dn1上传第一个Block(先从磁盘读取数据放到一个本地内存缓存),以Packet为单位,dn1收到一个Packet就会传给dn2,dn2传个dn3;dn1每传一个packet会放入一个应答队列等待应答。
- 当一个Block传输完成之后,客户端再次请求NameNode上传第二个Block的服务器。(重复执行3-7步)