1.存储设备容量不断增加。
2.CPU处理能力大幅度提升。
3.网络带宽不断增加。
1.数据量大。
2.数据类型繁多,包括结构化数据和非结构化数据。
3.处理速度快,大数据时代的很多应用都需要基于快速生产的数据给出实时分析结果,用于指导生产和生活实践。
4.价值密度低。
1.数据采集与预处理。
2.数据的存储和管理
3.数据处理和分析
4.数据安全和隐私保护
1.批处理计算 :批处理计算主要解决针对大规模数据的批量处理,也是我们日常数据分许工作中非常常见的一类数据处理需求。
2.流计算 :流数据(或数据流)是指在时间分布和数量上无限的一系列动态数据的集合体。数据的价值随着时间的流逝而降低,因此必须采用实时计算的方式给出秒级响应。
3.图计算
4.查询分析计算 :针对超大规模数据的存储管理和查询分析,需要提供实时或准实时的响应,才能很好地满足企业经营管理需求。
1.云计算的概念
云计算实现了通过网络提供可伸缩的、廉价的分布式计算能力,用户只需要在具备网络接入条件的地方,就可以随时随地获得所需的各种IT资源。云计算代表了以虚拟化为核心、以低成本为目标的、动态可扩展的网络应用基础设施,是近年最有代表性的网络计算技术与模式。
2.物联网的概念
物联网是物物相连的互联网,是互联网的延申,它利用局部网络或互联网等通信技术把传感器、控制器、机器、人员和物等通过新的方式连在一起,形成人与物、物与物相连,实现信息化和远程管理控制。
3.联系
P26 第二段
在传统的文件系统中,为了提高磁盘读写效率,一般以数据块为单位,而不是以字节为单位。
因此,以块为单位读写数据,可以把磁盘寻道时间分摊到大量数据中。
HDFS也同样采用了块的概念,默认一个块的大小是64MB,这么做的原因,是为了最小化寻址开销。
好处:
1.支持大规模文件存储
2.简化系统设计
3.适合数据备份
1.名称节点(NameNode)负责管理分布式文件系统的命名空间,保存了两个核心的数据结构,即FsImage和EditLog。FsImage用于维护文件系统树以及文件树中所有的文件和文件夹的元数据,操作日志文件EditLog记录了所有针对文件的创建、重命名等操作。名称节点记录了每个文件中各个块所在的数据节点为位置信息(相当于一个数据目录),但是并不持久化存储这些信息,而是在系统每次启动时扫描所有数据节点重构得到这些信息。
2.数据节点(DataNode)是分布式文件系统HDFS的工作节点,负责数据的存储和读取,会根据客户端或者名称节点的调度来进行数据的存储和检索,并且向名称节点定期发送自己所存储的块的列表。
具体实现方法: 作为一个分布式文件系统,为了保证系统的容错性和可用性,HDFS采用了多副本方式对数据进行冗余存储,通常一个数据块的多个副本会被分布到不同的数据节点上。
优势:
1.加快数据传输速度。当多个客户端需要同时访问一个文件时,可以让多个客户端分别从不同的数据块副本中读取数据,这就大大加快了数据的传输速度。
2.容易检查数据错误。HDFS的数据节点之间通过网络传输数据,采用多个副本可以容易判断数据传输是否出错。
3.保证数据的可靠性。即使某个数据节点出现故障失效,也不会造成数据的丢失。
1.数据存放策略:为了提高数据的可靠性于系统的可用性,以及充分利用网络带宽,HDFS采用了以机架为基础的数据存放策略。
原因:首先,可以获得很高的数据可靠性,即使一个机架发生故障,位于其他机架上的数据副本仍然可用的。其次,在读取数据的时候,可以在多个机架上并行的处理数据,大大提高了数据读取速度;最后,可以更容易地实现系统内部负载均衡和错误处理。
2.数据读取
HDFS提供了一个API可以确定一个数据节点所属地机架ID,客户端也可以调用API获取自己所属地机架ID。当客户端读取数据时,从名称节点获得数据块不同副本地存放位置列表,列表中包含了副本所在的数据节点,可以调用API来确定客户端和这些数据节点所属的机架ID。当发现某个数据块副本对应的机架ID和客户端对用的机架ID相同时,就优先选择该副本读取数据,如果没有发现,就随机选择一个副本读取数据。
3.数据复制
HDFS的数据复制采用了流水线复制的策略,大大提高了数据复制过程的效率。
1.名称节点出错
恢复:第一,把名称节点上的元数据信息同步存储到其他文件系统中;第二,运行一个第二名称节点,当名称节点宕机以后,可以把第二名称节点作为一种弥补措施,利用第二名称节点的元数据信息进行系统恢复,但是从前面对第二名称节点的介绍中可以看出,这样做仍然会丢失部分数据。因此,一般会把上述两种方法结合使用,当名称节点发生宕机时,首先到远程挂载的网络文件系统中获取备份的元数据信息,放到第二名称节点上进行恢复,并把第二名称节点作为名称节点来使用。
2.数据节点出错
恢复:每个数据节点会定期向名称节点发送“心跳”信息,向名称节点报告自己的状态。发生宕机,一般使用冗余复制成为新副本。
3.数据出错
1.数据类型。 关系数据库采用关系模型,具有丰富的数据类型和存储方式。HBase采用更简单的数据模型,它把数据存储为未经解释的字符串。
2.数据操作。 关系数据库中包含了丰富的操作,如插入、删除、更新、查询等,其中会涉及到多表连接。HBase操作则不存在复杂的表与表之间的关系,只有简单的插入、查询、删除、清空等(没有更新是因为HDFS文件系统只允许在文件后追加内容,而不允许修改)。
3.存储模式。 关系数据库基于行模式存储,HBase基于列存储。
4.数据索引。 关系数据库通常可以针对不同列构建复杂的多个索引以提高数据访问性能。HBase只有一个索引—行键。
5.数据维护。 关系数据库更新操作会覆盖掉原来的值,HBase的更新操作并不会删除数据旧的版本,二是生产一个新的版本,旧的版本仍然保留。
6.可伸缩性。
1.表
2.行
3.列族
4.列限定符
5.单元格
6.时间戳
对于我们熟悉的关系数据块而言,数据定位可以理解为采用”二维坐标“。即根据行和列就可以确定表中一个确定的值。HBase中需要根据行键、列族、列限定符和时间戳来确定一个单格,即四维坐标{行键,列族,列限定符,时间戳}
根据上面表格,我们确定一个坐标,{”201505003”,“Info”,“email",“1174184620720”},可以确定这个单元格存储的值为”[email protected]"
1.灵活的可扩展性
2.灵活的数据模型
3.与云计算紧密融合
1.Web2.0网站系统通常不需要严格的数据库事务。
2.Web2.0并不要求严格的读写实时性。
3.Web2.0通常不包括大量的复杂SQL查询。
1.键值数据库
键值数据库会使用一个哈希表,这个表中有一个特定的Key和一个指针指向特定的Value.
2.列族数据库
列族数据库一般采用列族数据模型,数据库由多个行构成,每个数据库包含多个列族,不用的行可以具有不同数量的列族,属于同一列族的数据会被存放在一起。
3.文档数据库
在文档数据库中,文档是数据库的最小单位。
4.图数据库
图数据库以图论为基础,一个图是一个数学模型,用来表示一个对象集合,包括顶点以及连接顶点的边。
1.基本可用
基本可用是指一个分布式系统的一部分发生问题变得不可用时,其他部分仍然可以正常使用,也就是允许分区失败的情形出现。
2.软状态
“软状态”是与“硬状态”相对应的一种提法。数据库保存的数据是“硬状态”时,可以保证数据的一致性,即保证数据一直是正确的。“软状态”是指状态可以有一段时间不同步,具有一定的滞后性。
3.最终一致性
一致性的类型包括强一致性和弱一致性,二者的主要区别在于高并发的数据访问操作下,后续操作是否能够获取最新数据。
MapReduce的核心思想是“分而治之”
1.就是把一个大的数据集拆分成多个小数据块在多台机器上并行处理,也就是说,一个大的MapReduce作业,首先拆分成多个小数据块在多台机器上并行执行,每个Map任务通常运行在数据存储的节点上,这样计算和数据就可以放在一起运行,不需要额外数据传输的开销。
2.当Map任务结束后,会生成以
在这之前我们要理解一个概念:
合并是指combiner的过程,combiner是对重复的key合并在一起,减少冗余信息。是对key的操作。
归并是两个有序文件合并成一个有序文件,是对文件的操作。
1.map的过程,把每句话的单词作为key,数量作为value
2.用户没有定义Combiner时的Reduce过程,就是进行了归并,即具有相同key键值对会被归并成一个新的键值对,键值对形式为
3.用户进行了Combiner的操作,即合并
1.首先将每个每张表转换成>的形式,b就是两张表需要连接的字段的值,即图中的Orderid字段,S就是每张表的名字,如文中的一直张的名字 Order,c就是剩下字段值的集合,如文中Order表的第一条记录(a,d1)
如果把Order中的第一条记录转换成一个
2.reduce,把表名为Order和Item具有共同属性Orderid字段进行合并,如图所示。
1.Spark的计算模式也属于MapReduce,但不局限与Map和Reduce操作,还提供了多种数据集操作类型,编程模型比MapReduce更灵活。
2.Spark提供了内存计算,中间结果直接放在内存中,带来了更高的迭代运算效率。
3.Spark基础DAG的任务调度机制,要优于MapReduce的迭代执行机制。
原因:使用Hadoop进行迭代计算非常耗资源,因为每次迭代都需要从磁盘中写入、读取中间数据,IO开销大。而Spark将数据载入内存后,之后的迭代计算都可以直接使用内存中的中间结果作运算,避免了从磁盘中频繁读取数据。
1.Spark Core
Spark Core包含了Spark基本功能,如内存计算、任务调度、部署模式、故障恢复、存储管理等,主要面对批数据处理场景。
2.Spark SQL
Spark SQL允许开发人员直接处理RDD,同时也可查询Hive、HBase等外部数据源。Spark SQL的一个重要特点是其能够统一处理关系表和RDD,使得开发人员不需要自己编写Spark应用程序,开发人员可以轻松使用你SQL命令进行查询,并进行更复杂的数据分析。
3.Spark Streaming
Spark Streaming支持高吞吐量、可容错处理的实时流数据处理,其核心思路是将流数据分解成一系列短小的批处理作业,每个短小的批处理作业都可以使用Spark Core进行快速处理。
4.MLlib(机器学习)
MLlib提供了常用机器学习算法的实现,包括聚类、分类、回归、协同过滤等,降低了机器学习的门槛,开发人员只需要具备一定的理论知识就能进行机器学习工作。
5.GraphX(图计算)
GraphX是Spark中用于图计算的API,可认为是Pregel在Spark上的重写优化,GraphX性能良好,拥有丰富的功能和运算符,能在海量数据上自如地运行复杂地图算法。
1.数据快速持续到达,潜在大小也许是无穷无尽地。
2.数据来源众多,格式复杂。
3.数据量大,但是不十分关注存储,一旦流数据中的某个元素经过处理,要么被丢弃,要么被归档存储。
4.注重数据的整体价值,不过分关注个别数据。
5.数据顺序颠倒,或者不完整,系统无法控制将要处理的新到达的数据元素顺序。
1.流处理系统处理的是实时的数据,而传统的数据处理系统处理的是预先存储好的静态数据。
2.用户通过流处理系统获取的是实时结果,而通过传统的数据处理系统获取的是过去某一时刻的结果。并且,流处理系统,无需用户主动发出查询,实时查询服务可以主动将实时结果推送给用户。
MapReduce是用来离线处理大量批数据的,需要将中间结果存入磁盘,再将中间结果读取,做不到实时响应结果。
1.数据实时采集
2.数据实时计算
3.实时查询计算
Spark Streaming的基本原理是将实时输入数据流以时间片(秒级)为单位进行拆分,然后经Spark引擎以类似批处理的方式处理每个时间片数据