@TOC
基础知识
吞吐量
首先在书面解释时,速率是额定或标称的,但是实际传输时,其实不稳定的,吞吐量就是取平均值。假设你从学校骑电动车回家,这条公路限速80km/h,这就可以理解成“带宽”,也就是“最高传输速率”。所骑电动车厂家宣称最高时速30km/h,这可以理解成“速率”,也就是“额定速率或标称速率”。但是你不可能全程以30km/h速度行驶,可能会碰到红灯或者堵车,这时你的速度就会放慢了,这条路的长度除以你行驶时间所得平均行驶速度,就可以理解成“吞吐量”。
数据块
每个磁盘都有默认的数据块大小,数据块是磁盘读、写的最小单位。HDFS同样也有块(block)的概念,但是比磁盘的数据块大的多,默认为128mb,作为独立的存储单元,但与面向单一磁盘的文件系统不同的是,HDFS中小于一个数据块大小的文件不会占据整个块的空间,(例如1mb的文件储存在128mb的块中,文件只使用1mb的储存空间,而不是128mb)
并行,并发,串行三者之间的区别
1、 我中午12:00开始吃饭,吃到一半,女朋友打来一个电话,我需要等到我吃完饭才可以接电话,这说明我不支持并行与并发,我的运作方式属于串行,串行有一个执行单元(只有一个执行任务单元的cpu核)。
2、我中午12:00开始吃饭,吃到一半,女朋友打来一个电话,我可以接起电话,跟女朋友打完电话继续吃饭,这说明我支持并发与串行,
3、我中午12:00开始吃饭,吃到一半,女朋友打来一个电话,我可以一边接电话一边吃饭,这说明我支持并行与并发。(并行有多个任务执行单元,多个任务可以同时执行)
4、所谓并发,是指我有没有同时处理多个任务的能力,不一定要同时。
进程、线程
- 一个进程包括多个线程。
- 不同进程之间数据很难共享。
- 同一个进程下的不同线程数据很容易共享。
- 进程比线程消耗更多计算机资源。
- 进程之间互不影响,但是一个进程挂掉,他所在的整个进程都会挂掉。
- 进程可以拓展到多机,适合多核与分布式。
- 进程使用的内存地址可以限定使用量
HDFS概述
1、hsfs集群有两类节点(管理节点-工作节点)的运行模式,即一个namenode与多个datanode。
2、客户端(client)代表用户通过与namenode和datanode交互来访问整个系统,客户端提供一个类似于posix(可以移植操作系统界面)的文件系统接口,因此用户不需要知道datanode与namenode也可以实现其功能。
DataNode
datanode是文件系统的工作节点,它根据需求储存或者检索数据块(受客户端与namenode调度),并定期向namenode发送datanode储存的数据块列表(心跳信息)。负责为客户端提供读写服务。
NameNode
namenode负责储存文件的元数据.(文件分块信息,储存节点信息,副本储存等信息)。
1.namenode管理文件系统的命名空间,它维护者文件系统树及整棵树所有的文件和目录,这些信息以两个文件形式永久保存在本地磁盘(命名空间经镜像文件和编辑日志文件),镜像文件为:fsimage(用于维护hdfs中所有文件和文件夹的元数据),edits:编辑日志文件(用于记录所有针对文件的创建,删除,修改等操作)
2.namenode也记录着每个文件中各个快的数据节点信息,但它并不永久保存数据节点的位置信息,因为这些信息在系统启动时根据数据节点信息重建。
3.namenode会定时接受datanode的心跳信息,如果发现datanode节点有故障,就会重新为失败的任务分配节点。
4.负责接收client(客户端)的请求,提供metadata数据信息。
5。namenode的启动:以只读方式启动,加载fsimage文件到内存,edits文件会定期合并,形成新的fsimage文件用来替代旧的fsimage文件。
6.没有namenode,文件系统无法使用,如果namenode服务器宕机,文件系统上的所有文件将丢失,因为我们不知道如何根据datanode快重新拼接文件。
为什么HDFS(分布式文件系统)不适合批量存储小文件
- 小文件数量过多(例如图片)会占用批量占用namenode的内存,浪费block,因为每个储存在HDFS中的文件的元数据(包括目录树,位置信息,命名空间镜像,文件编辑信息)都会在namenode中占用150b的内存,如果namenode存储空间满了,就不能继续存储新文件了。
- 如果有多小文件,会造成寻道时间>=读取文件时间(传输文件时间=寻道时间+读取文件时间),这与HDFS的原理想违背,hdfs的设计是为了减小寻道时间,是其远小于读取文件的时间。