第一章 为什么会有大数据

什么是大数据

  1. 随着近年来计算机技术的不断革新,数字传感器的进步使得通信系统的使用越来越广泛,其中移动平台和移动终端飞速增长,以系统运行产生的大量日志以及企业开展无纸化办公,企业积攒了海量数据资源。
  2. 摩尔定律告诉我们,大约每两年计算机的性能将历史性提升一倍,可是如今数据处理需求的增长速度已经快于计算机资源处理能力的提升速度。为此人们提出了一种解决办法:数据的并行处理,通过利用多台计算机并行处理这些海量数据。其中Hadoop就是利用互联网的多台计算机使用MapReduce来并行的处理和计算大量的数据。
  3. 目前大数据可以被定义为无法被符合服务等级协议的单台计算机处理或者存储的任何数据集。理论上单台计算机可以处理任意规模的数据,对于超过单台计算机存储量的海量数据,我们可以存放到类似网络附属存储(NAS)这样的共享存储设备中,然后通过计算机去处理,可是这样处理数据所花费的时间往往会大大的超过允许的数据处理时间。

大数据首要解决问题

目前大数据系统在处理方法上有一些共同特点:

  • 数据分布在多个节点(网络I/O速度<<本地磁盘I/O速度)
  • 计算程序离数据更近(集群上的点)
  • 数据的处理尽量都在本地完成(网络I/O速度<<本地磁盘I/O速度)
  • 使用可顺序读取磁盘I/O代替随机读取磁盘I/O(数据交换速度<<数据寻道时间)

所有大数据计算处理模式都有一个目的,就是使输入和输出并行化,从而提高数据处理性能。大数据分发到多个节点有两个好处:

  • 每个数据块会在多个节点上有多份拷贝,这样使得系统具有容错性,当一个节点发生故障,其他节点还备份有故障节点上的数据。
  • 为了达到数据并行处理的目的,多个节点同时参与数据处理的过程。至于为什么不存放到网络文件系统中,每个节点去读取它要处理的部分,是因为本地存储磁盘的数据读取速度要远远高于通过网络来读取数据的速度。

大数据无法处理网络过载的问题,如果传输动辄上T的数据,会使网络带宽耗尽,网络拥挤,甚至导致系统故障,为了更好的处理,我们要把数据分布到各个节点上,而且除了把程序要移动到存放数据的节点,程序运行所依赖的函数库也需要移动到节点上,这样大数据可以让我们集中式的部署程序代码,大数据系统后台会在计算任务启动之前把这些程序移动到各个数据处理节点上。
虽然典型的大数据处理系统都希望把数据处理过程放在拥有数据节点的本地完成,但并不是每次都能实现,大数据系统会把计算任务尽量调度到离数据点最近的节点。

大数据运行实例

假设我们要计算2000年美国各州的总销售量,并按州排序,销售数据已经随机分发到各个计算节点,利用大数据技术主要分为如下步骤:

  • 每个计算节点读取分发给自己的全部数据,然后过滤掉不是2000年的销售数据,计算节点从本地磁盘顺序读取被随机分发到该节点上的数据,在内存中过滤掉不用的数据,而不是在磁盘上过滤,这样可以避免磁盘的寻道时间。
  • 各个计算节点在处理数据的时候,每发现一个新的州,就为它新建一个分组,并把销售数据加到对应的已存在的州分组中。(程序会在各个计算节点运行,分别做本地数据处理)
  • 当所有的节点都完成了本地所有数据的磁盘读取工作,按照州编号分别计算其销售总额,它们会分别把各自的计算结果发送到一个特定的计算节点,这个汇聚节点是各个计算节点在计算任务伊始由所有节点协商出来的。
  • 这个指定的汇聚节点会从所有计算节点按照编号汇聚全部结果,然后把各个州的来自不同计算节点的数据分别相加。- 汇聚节点按照州把最终结果排序,并输出排序结果。

大数据的编程模式

  • 大规模并行处理(MPP)数据库系统: EMC公司的Greenplum系统和IBM的Netezza系统
  • 内存数据库系统: Oracle公司的Exalytics和SAP公司的HANA
  • MapReduce系统: 使用广泛的Hadoop
  • 整体同步并行系统(BSP): Apache的HAMA

大规模并行处理(MPP)数据库系统

大规模并行处理数据库系统核心思想是把数据按照某一列或者某一组列的值,按照某种形式划分,以分别处理。但是这系统的缺陷在于需要在算法设计的时候就决定数据如何划分,而划分的准则通常由底层的用例来决定,如此一来,就不适合临时的数据查询需求。

  • 数据按州划分,分配到不同的计算节点
  • 各个计算节点都拥有程序所需的执行库,并对分配到该节点的数据进行数据处理
  • 每个计算节点读取本地数据,一个例外是你未考虑数据的分布情况就进行了数据查询,这时,计算任务会通过网络从其他节点来获取数据。
  • 每个任务都是顺序读取数据,所需要的所有数据都存放在磁盘的相邻位置,并且被一次性读取,并在内存中应用过滤条件(year==2000)

内存数据库系统

内存数据库系统类似于MPP系统,他们的不同之处在于内存数据库系统的每个节点都拥有巨大的内存,并且大部分数据会被预先加载到内存中。系统的缺陷是采用了大量的硬件和软件,费用高昂。

  • 数据按州划分,各个节点把数据加载到内存中。
  • 各个计算节点都拥有程序所需的执行库,并对分配到该节点的数据进行数据处理- 每个计算节点读取本地数据,一个例外是你未考虑数据的分配情况就进行数据查询请求,这时候,计算任务会从其他节点来获取所需数据。
  • 由于数据是被缓存到内存中的,所以除了最初的数据加载到内存的过程外,这里不适用顺序读取数据的特性。

MapReduce系统

Hadoop系统对MapReduce框架的实现具有如下几个重要的特征:

  • 使用商用级别的硬件,这个商用硬件的要求不是指笔记本或者台式机,我们可以使用常用的硬件设备来搭建。
  • 无需事先定义数据划分准则来把数据分配到各个计算节点
  • 用户仅需要定义两个独立的处理过程:Map和Reduce下面我们介绍下MapReduce大数据系统定义:
  • 数据以较大的数据块的形式存放在HDFS上,HDFS是一个分布式文件系统,数据块分散存储到各个节点,数据块是冗余的。
  • 程序运行依赖库,包括Map和Reduce代码被复制发送到所有任务节点
  • 每个计算节点仅读取节点本地数据,集群中的所有节点运行Mapper,从节点本地读取数据到Mapper中(大多数情况下,哪个节点的Mapper读取哪个节点磁盘的数据库,这是由调度程序管理阶段定,调度程序可能会分配某个节点的Mapper任务来处理远程节点的数据块,以保持集群中的所有节点负载均衡)
  • 数据被每个节点的任务以数据块的方式一次性顺序读取

MapReduce编程泛型的一个重要不足是它不适合迭代算法。大量的数据科学计算算法很自然需要使用到迭代,并最终收敛到一个解。当使用这样的算法时候,MapReduce任务每次都要从持久性存储中重新读取数据,所以每次迭代产生的结果需要存到持久性存储中供下次迭代计算使用,这个过程导致了不必要的I/O操作,对系统吞吐量造成重大的影响。

整体同步并行系统

整体同步并行系统和MapReduce过程十分相似,与MapReduce程序不同之处在于,BSP系统程序执行由一系列的超步(这个和Map处理的过程类似)组成,这些超步保持栅栏同步,向主节点发送数据并进行相关的信息交换。每当一次迭代执行完毕,主节点会通知每个数据处理节点进行下一次迭代。

大数据和事物性系统

Hadoop系统使用HBase来作为自己的NoSQL数据存储,大多数的RDBMS使用者都要求数据库必须遵守ACID准则,但是遵守这些准则是需要系统代价的。当数据库后台需要处理峰值为每秒数百万次的事务操作时候,要求苛刻的遵守ACID准则对数据库来说是个巨大的挑战。对苛刻的ACID准则做出妥协是必要的,做出妥协的主要理论依据就是CAP理论:

  • 一致性:在分布式系统的所有数据备份,在同一时刻有同样的值
  • 可用性:在合理且明确的时间内,保证每个请求都能获得成功或者失败的结果的响应。
  • 分区容忍性:在集群中的一部分节点故障后,集群整体仍可以使用。

这个理论可以证明:任何分布式系统只能同时满足其中的两个特性,而无法三者兼顾。

你可能感兴趣的:(第一章 为什么会有大数据)