大数据及大数据框架

信息产业(IT)发展至今,计算要的主要工作之一就是处理各种类型和各种来源的数据。

大数据(BigData)是一种规模庞大的数据集合,一般单台计算机的能力范围无法对数据集进行获取、存储、管理和分析。因此大数据又和云计算和分布式集群密不可分。大数据是互联网发展至今一个时代的产物。所以并没有什么神密和复杂之处。IBM曾提出大数据的5大特性(5V特性),即Volume(大量)、Velocity(高速)、Variety(多样)、Value(低价值密度)、Veracity(真实性)。大数据由于必数据类型的复杂及数据量的庞大,所以须依赖于云计算的分布式处理、分布式存储等分布式片虚拟化技术。那么在分布式环境中进行大数据处理,除了与存储系统外还要涉及到计算任务的分工和分配、集群的负载均衡、数据的迁移转化等工作。这就需要有一个统一的框架来负担这项任务,也就是平时所说的大数据框架。

大数据框架:现阶段用的最多的就hadoop、spark、flinnk。三者都是apache软件基金会的*开源项目。坦白的说,在这三者的官方网站上都没有明确的说明它们是“大数据框架”(BigData Processing Framework)。

我们来看一下官方网站对三者的定义:

Hadoop: Apache Hadoop 软件库是一个允许在计算机集群上通过分布式运算使用简单编程模式处理大型的数据集合(The Apache Hadoop software library is a framework that allows for the distributed processing of large data sets across clusters of computers using simple programming models.

Spark: Apache Spark 是一个为海量数据处理的统一分析引擎。

大数据及大数据框架

Apache Spark 官网截图

           Apache Spark是一个快速通用的计算机集群系统。它提供了高层次的 java, scala,python 和R 语言的API,并且对通用的图计算进行优化。而且它还提供了丰富的高级工具,包括用于sql和结构化数据处理的Spark SQL,用于机器学习的MLib,用于图计算的GraphX和Spark Streaming(Apache Spark is a fast and general-purpose cluster computing system. It provides high-level APIs in Java, Scala, Python and R, and an optimized engine that supports general execution graphs. It also supports a rich set of higher-level tools including Spark SQL for SQL and structured data processing, MLlib for machine learning, GraphX for graph processing, and Spark Streaming.).

Flink: Apache Flinnk 是一个分布式,高效且使终可用的开源流处理框架和精确的数据流应用程序。

大数据及大数据框架


Apace Flink官网截图

我们看到,官方对此的定义非常明确,hadoop:分布式数据处理软件库(可以处理大型数据),spark:通用计算机集群系统,海量数据处理引擎。flink:流处理工具,虽然flink也具有批处理的能力,不过flink是把批处理任务当作一个特殊的流计算来运行。虽然都处理大型数据集,但是大型数据集并不一定是大数据(前面大数据的5V定义)

同时,hadoop又可以为后两者提供适当的分布式工具:分布式文件系统HDFS和资源管理工具YARN。spark的RDD(弹性分布式数据集)和DAG(有向无环图)又能弥补hadoop mapreduce的io开销引起的性能下降

注:在新版2.0以后spark使用了性能更好的Dataset,但是RDD仍然支持。官方原文Note that, before Spark 2.0, the main programming interface of Spark was the Resilient Distributed Dataset (RDD). After Spark 2.0, RDDs are replaced by Dataset, which is strongly-typed like an RDD, but with richer optimizations under the hood. The RDD interface is still supported, and you can get a more complete reference at the RDD programming guide. However, we highly recommend you to switch to use Dataset, which has better performance than RDD. See the SQL programming guide to get more information about Dataset.

Flink又很好的弥补了Spark Streaming的“伪”流处理。并且spark和flink都支持hdfs和yarn,虽然它们都可以运行在standalone模式。

因此,所谓的大数据框架,是我们认为对于我们可以进行大数据分析处理工具的集合。这些工具帮我们在大数据处理中分担了很多重要的和细节上工作:

数据的获取,数据哪里来?处理后数据的去处是哪里?是直接展示给数据大盘?还是存入数据库,或是传输给其他ERP,CRM,OA等管理软件?

数据是主动发送还是被动接收?如果主动发送接收方数据来不及处理该怎么办?如何保持数据的同步?

集群中任务该如何合理分配?如果数据有依赖关系,如何保证依赖关系的数据不会长时间等待或死锁?以及数据的先后顺序等。如何避免数据的重复计算?数据如何存储于物理设备。在集群中某台服务器单点故障如何保证数据不丢失?集群如何协调?是否需要master主机或是需要多少master主机?如果能以最快最方便的方式返回计算结果(比如在交互模式下一条SQL或python语句就能返回结果)

针对以上这些问题,我们在部署了所谓的大数据框架及它们带的工具或第三方工具后基本都能解决。如spark的pyspark或spark-shell就能在交互模式下方便的操作数据集。hdfs为我们提供了分布式文件系统,yarn的资源管理器管理可用资源。虽然spark和flink可以使用性能更好的mesos但是早期部署的基本上都是hadoop,hadoop已经型在了它的生态圈。

参考:

http://hadoop.apache.org

http://spark.apache.org

http://flink.apache.org