大数据时代的发展

大数据时代

我们现处于一个大数据的时代,信息呈现指数级的暴增,这里的信息主要是非结构化的数据。

结构化数据:运营数据、公司的经营数据、销售数据等可以在数据库中存储、管理的数据
非结构化数据:聊天记录、发送的邮件、视频、图片、文本等数据

随着科技的进步,这些非结构化的数据激增,我们可以利用这些大量数据进行统计、分析、挖掘出具有价值的信息,例如通过统计大量人群的购买记录,给用户推荐当前在看物品的相似物品;通过大量邮件信息的统计,可以过滤出垃圾邮件等等。

这些非结构化的数据,并不好处理。图像和视频需要图像处理和计算机视觉等技术,文本信息需要自然语言处理技术等等,这些技术大多都是以数据为驱动,通过大量数据去学习其中的规律以及模式。

大数据的特点:

  • 数据量大(高达TB、PB的数据量)
  • 数据类型多(视频、图片、文本、语音等)
  • 实时性(要求实时快速的生成决策结果)

大数据的关键技术

大数据的技术有:

  • 数据的采集
  • 数据的存储和管理
  • 数据的处理和分析
  • 数据的安全

其中关键技术为:

  • 数据的存储和管理
  • 数据的处理和分析

对于大量数据的处理和分析,我们直接想到的方法有:

  1. 提高电脑的配置(增大磁盘、内存)
  2. 由多个电脑协同工作,处理大数据

思路一的做法简单有效,但是成本过高,以及单机的性能是有限的,对于TB、PB的数据规模更是驾驭不了的,
思路二我们可以使用大量廉价的机器,来搭建一个巨大的集群,处理和分析数据,是一个有效且符合实际的做法

分布式存储分布式处理

代表性的大数据技术:

  • Hadoop
  • Spark
  • Flink
  • Beam

我们以关键计算来分析不同生态的区别和优缺点:

Hadoop:

Hadoop不是单一的产品,而是一个完整的生态系统,如下图所示:

在这里插入图片描述

  • HDFS(分布式文件系统):海量分布式文件的存储,HDFS将文件分成不同的block块,存储在不同的机器上,在HDFS中,一份文件有多份分布在不同的机器上,因此某一机器挂掉,数据也不会完全丢失,具备很高的安全性。

  • YARN(资源调度和管理框架):提供资源调度和管理服务,即计算时所需的底层内存资源

  • MapReduce(分布式计算框架):MapReduce负责数据的处理和分析,其主要分为Map和Reduce两个阶段,在Map阶段,其将数据划分为很多块读入,然后将数据解析为方便计算的Key-Value形式,在Reduce阶段,数据按照Key的不同被再次划分到不同的机器,然后每台机器对数据进行聚合操作,最终得到用户想要的结果,如下图所示:
    在这里插入图片描述

  • Hive(数据仓库):相当于编程接口,将SQl语句自动转化为对应MapReduce语句,来对HDFS中的数据进行分析处理

  • Pig(数据流处理):一般和HIve组合使用,Pig负责数据的清洗和转化,其可以通过Pig Latin的语言实现一个复杂的功能开发,只需要很少的代码就可以实现一个需要很多代码的MapReduce的实现。

  • Mahout(数据挖掘库):实现了常见的数据挖掘算法,如分类、聚类、回归等算法

  • Ambari(安装、部署、配置和管理工具):完成自动的安装配置等功能

  • Zookeeper(分布式协作服务):对管家的选取,以及系统整齐任意的调配

  • HBase(分布式数据库):用于实时处理中的分布式数据库

  • Flume(日志的采集):用于日志的采集分析

  • Sqoop(数据库ETL):完成Hadoop系统组件之间的联通,如从MySQL中导入数据到HDFS,从HDFS导入数据到MySQL中等等。

其两大核心组件是:

  • HDFS:分布式文件管理系统(数据存储)
  • MapReduce:分布式计算框架(数据计算)

Spark:

Spark也不是单一产品,而是一个丰富的生态系统,如下图:
在这里插入图片描述

  • Spark Core:主要用于批数据的处理
  • Spark SQL:处理关系型数据,满足数据的查询和处理
  • Spark Streaming:流计算,进行实时数据处理
  • MLlib:机器学习算法库
  • GraphX:编写图计算程序

Hadoop VS Spark:

Hadoop的缺点:

Hadoop的缺点,主要是指其中MapReduce(计算框架)的缺点,而不是HDFS(分布式存储系统)的缺点:

  • 表达能力有限:
    在这里插入图片描述
    无论多么复杂的任务,MapReduce对其划分为Map和Reduce两个阶段,大大简化了任务的复杂度,但同时也降低了其表达能力,因为不是所有的任务都可以分为Map和Reduce两个阶段。

  • 磁盘开销大:
    在这里插入图片描述
    Map阶段完成后,写入磁盘,再读取到Reduce中,有些任务是需要迭代的,这样会不断的进行磁盘的读取和写入,效率非常的底

  • 延迟高:

    • 读写磁盘,延迟高
    • 任务之间的衔接及IO开销(只有将所有的Map阶段执行完毕后,才能开始Reduce阶段)
      在这里插入图片描述
Spark的优点:
  • 表达能力强:
    Spark在继承Hadoop的优点后,对其缺点进行了改进,Spark的计算框架依然是MapReduce,但是不局限于MapReduce模式,其还包含:join、groupby、filter等等操作,操作类型更多,表达能力更强

  • Spark提供了内存计算,可以将中间结果存放到内存中,对于迭代运算效率更高

  • Spark基于DAG的任务调度执行机制(使得数据可以像流水线一样处理),要优于Hadoop MapReduce的迭代执行机制
    在这里插入图片描述
    在这里插入图片描述

Spark和Hadoop数据处理对比图:

在这里插入图片描述

Hadoop:迭代处理和查询处理时,每一轮都要经过磁盘的写入和读取

Spark:迭代处理和查询处理时,先将数据加载到内存中,再去迭代处理,不用去底层读取数据

Spark是否会取代Hadoop呢?

Spark比Hadoop优点这么多的,能否取代Hadoop呢?其实这种说法是很不严谨的,Spark和Hadoop就不是一个对等的关系,Hadoop有两大框架,HDFS和MapReduce,而Spark是对其中MapReduce框架的优化,只是一个单纯的计算框架,不具有存储能力
在这里插入图片描述