【笔记】大数据概念与技术概述

1 大数据概念

大数据4V(四个特点):

  • 数据量大(Volume)

    大数据摩尔定律:人类社会产生的数据一致以每年50%的速度增长。

  • 数据类型多(Variety)、

    结构化和非结构化的数据

  • 处理速度快(Velocity)

    数据处理和分析的速度通常要达到秒级响应。

  • 价值密度低(Value)

    很多有价值的信息都是分散在海量数据中的。

2 大数据关键技术

  • 数据采集与预处理

    将异构数据源中的数据抽取到临时中间层进行清洗、转换、集成,加载到数据仓库。

  • 存储管理

    分布式文件系统、数据仓库、关系/非关系数据库、云数据库

  • 处理分析

    分布式并行编程模型和计算框架。

  • 数据可视化

    对分析结果进行可视化呈现,帮助人们理解、分析数据

  • 数据安全和隐私保护

    构建隐私数据保护体系和数据安全体系,有效保护个人隐私和数据安全。


3 大数据计算模式和产品

大数据计算模式 解决问题 代表产品
批处理计算 针对大规模数据的批量处理 MapReduce、Spark
流计算 针对流数据的实时计算 Storm、S4、Flume、Stream、Puma、DStream、Super Mario等
图计算 针对大规模图结构数据的处理 Pregel、GraphX、Giraph、PowerGraph、Hama、GoldenOrb等
查询分析计算 大规模数据的存储管理和查询分析 Dremel、Hive、Cassandra、Impala等

4 代表性大数据技术

4.1 Hadoop

Hadoop是Apache软件基金会旗下的一个开源分布式计算平台,为用户提供了系统底层细节透明的分布式计算架构。
特点:

  • java语言开发的
  • 跨平台
  • 核心是
    • HDFS、很好的容错能力,兼容廉价设备。主从结构模型,名称节点(NameNode)作为中心服务器,负责文件系统的命名空间(存储文件数据的元数据信息,文件名、后缀、属性等)以及客户端多文件的访问。在名称节点的统一调度下数据节点进行数据块的创建、删除、复制等操作。当客户端要访问一个文件时,首先将文件名发送给名称节点,名称节点根据文件名找到对应的数据块,再根据每个数据块的信息找到实际存储各个数据块的数据节点的位置,并把数据节点位置发送给客户端,最后客户端直接访问这些数据节点获取数据。名称节点不参与数据的传输。
    • MapReduce、分布式并行编程模型。设计理念是“计算向数据靠拢”,因为移动数据需要大量的网络开销,尤其是在大规模数据的情况下。移动计算比移动数据更加经济。MapReduce框架将Map程序就近地在HDFS数据所在的节点运行,即计算节点和存储节点放在一起运行,减少数据移动开销。
  • 生态系统不断完善和成熟,还包括
    • YARN、资源调度和管理框架

      YARN的目标就是“一个集群多个框架”,在YARN之上可以部署其他各种计算框架,由YARN为这些计算框架提供同一个资源调度管理服务(CPU、内存),提高集群利用率,降低运营成本。

    • Zookeeper、分布式协作服务
    • HBase、分布式数据库

      针对Google的BigTable的开源实现,高可靠、高性能、面向列、可伸缩的分布式数据库,存储非结构化和半结构化的松散数据。

    • Hive、数据仓库

      Hive是一个构建于Hadoop顶层的数据仓库工具,允许用户输入类似关系型数据库SQL语句的HiveQL进行查询。在某种程度上可以看做是用户编程接口,其本身并不存储和处理数据,而是依赖于HDFS来存储数据,依赖MapReduce来处理数据。Hive自身可以自动将HiveQL语句快速转换为MapReduce任务运行。

    • Pig、数据流处理
    • Mahout、数据挖掘库
    • Sqoop、数据库ETL(Extraction Transformation Loading)

      SQL-to-Hadoop,Hadoop和关系数据库之间交换数据,改进数据的互操作性。使得传统关系型数据库和Hadoop之间的数据迁移变得非常方便。

    • Flume、日志收集

      高可用,高可靠、分布式海量日志采集、聚合、传输系统。

    • Ambari、安装、部署、配置和管理工具
4.2 Spark

用于大规模数据处理的快速、通用引擎。目前是Apache软件基金会下的顶级开源项目之一。Spark使用简练、优雅的Scala余元编写,还支持Java、python、R等语言。设计遵循“一个软件栈满足不同的应用场景”的理念,形成完整的生态系统。提供内存计算框架,支持SQL即席查询,流式计算、机器学习、图计算。

Spark VS. Hadoop
Hadoop缺点:

  • Hadoop中的MapReduce表达能力有限,难以描述复杂的数据处理过程。
  • 磁盘I/O开销大。每次执行都要性磁盘读取数据,计算完后还要讲中间结果存到磁盘。
  • 延迟高。一次计算要分解成一系列按照顺序执行的MapReduce任务,任务之间涉及到I/O。难以胜任复杂、多阶段的计算任务。

Spark 在借鉴MapReduce的同时,解决了上述问题。

Spark优点:

  • 计算模式属于MapReduce但还提供多种数据集操作类型,编程模型更灵活。
  • 提供了内存计算,中间结果放到内存中,带来更高的迭代运算效率。
  • 基于DAG任务调度执行机制,优于迭代执行机制。

在实际开发时,Hadoop需要编写不少相对底层的代码,不够高效,相对Spark就提供了多种高层次、简洁的API,通常情况下,实现相同功能,Spark代码少很多。

4.2 Flink

Flink也是Apache软件基金会的顶级项目,针对流数据和皮数据的分布式计算框架,处理的主要场景是流数据。Flink和Spark都是非常优秀的基于内存的分布式计算框架,但是Spark的市场影响力和社区活跃度明显超过Flink,在一定程度上限制了Flink的发展空间。

4.3 Beam

谷歌贡献的Apache顶级项目,开源的编程模型,开发者可以使用Beam SDK来创建数据处理管道,然后这些程序可以在任何支持的引擎上执行,比如运行在Spark、Flink上。Beam使用一套高层抽象的API屏蔽多种计算引擎的区别。

Beam是2017年发布的Apache项目,由于诞生时间较短,目前市场接受程度有限,尚未形成广泛的影响力,是否能最终获得市场认可,还有待时间的考验。

5 编程语言

Scala是一门类似Java的多范式语言,整合了面向对象编程和函数式编程的最佳特性。
特点:

  • Scala具备强大的并发性,函数式编程,更好地支持分布式系统。
  • Scala兼容Java,代码文件会编译成Java的class文件(在JVM上运行的字节码),可以很好地和java衔接。
  • 代码简介优雅,非常精炼,实现同样功能的程序,Scala所需的代码量比java要小一半或更多,易维护。
  • 支持高效的交互式编程,很大程度上提升开发效率。
  • 是Spark的开发语言,Spark本身就是爱用Scala语言开发的,可以获得最好的执行性能。

参考:http://dblab.xmu.edu.cn/post/spark

你可能感兴趣的:(大数据)