虽然 Hadoop 在分布式数据分析方面备受关注,但是仍有一些替代产品提供了优于典型 Hadoop 平台的令人关注的优势。Spark 是一种可扩展的数据分析平台,它整合了内存计算的基元,它在性能方面更具优势。
Spark 是在 Scala 语言中实现的,并且利用了该语言,为数据处理提供了独一无二的环境。
了解 Spark 的集群计算方法以及它与 Hadoop 的不同之处。
Spark 是一种与 Hadoop 相似的开源集群计算环境,两者之间存在一些不同之处
这些有用的不同之处使 Spark 在某些工作负载方面表现得更加优越
Spark 启用了内存分布数据集,除了能够提供交互式查询外,它还可以优化迭代工作负载。
Spark 是在 Scala 语言中实现的,它将 Scala 用作其应用程序框架。
与 Hadoop 不同,Spark 和 Scala 能够紧密集成,其中的 Scala 可以像操作本地集合对象一样轻松地操作分布式数据集。
尽管创建 Spark 是为了支持分布式数据集上的迭代作业,但是实际上它是对 Hadoop 的补充,可以在 Hadoo 文件系统中并行运行。通过名为Mesos 的第三方集群框架可以支持此行为。
Spark 由加州大学伯克利分校 AMP 实验室开发,可用来构建大型、低延迟数据分析应用程序。
虽然 Spark 与 Hadoop 有相似之处,但它提供了具有有用差异的一个新的集群计算框架。
首先,Spark 是为集群计算中的特定类型的工作负载而设计,即那些在并行操作之间重用工作数据集的工作负载。
为了优化这些类型的工作负载,Spark 引进了内存集群计算的概念,可在内存集群计算中将数据集缓存在内存中,以缩短访问延迟。
Spark 还引进弹性分布式数据集抽象
RDD 是分布在一组节点中的只读对象集合。
这些集合是弹性的,如果数据集一部分丢失,则可以对它们进行重建。重建部分数据集的过程依赖于容错机制,该机制可以维护 “血统”(即充许基于数据衍生过程重建部分数据集的信息)。
RDD 被表示为一个 Scala 对象,并且可以从文件中创建它;一个并行化的切片(遍布于节点之间);另一个 RDD 的转换形式;并且最终会彻底改变现有 RDD 的持久性,比如请求缓存在内存中。
Spark 中的应用程序称为驱动程序,这些驱动程序可实现在单一节点上执行的操作或在一组节点上并行执行的操作。
与 Hadoop 类似,Spark 支持单节点集群或多节点集群。对于多节点操作,Spark 依赖于 Mesos 集群管理器。
Mesos 为分布式应用程序的资源共享和隔离提供了一个有效平台。
该设置充许 Spark 与 Hadoop 共存于节点的一个共享池中。
Spark 编程模式
驱动程序可以在数据集上执行两种类型的操作:动作和转换。
动作 会在数据集上执行一个计算,并向驱动程序返回一个值
转换 会从现有数据集中创建一个新的数据集
动作的示例包括执行一个 Reduce 操作以及在数据集上进行迭代
转换示例包括 Map 操作和 Cache 操作(它请求新的数据集存储在内存中)。
我们随后就会看看这两个操作的示例,但是,让我们先来了解一下 Scala 语言。
Spark的基本API是一种Scala DSL,围绕名为弹性分布式数据集的分布式项集合构建。
利用分布式执行,RDD可以支持批量和聚集操作,如筛选、映射和reduceByKey。
Spark可以使用Hive SQL提供具有同等执行速度的原生Scala API。
重用Hive的前端和后端意味着它可以与Hive一起使用,共享数据、查询和UDFs。
Spark使用MLib提供了一系列开箱即用的机器学习算法,涉及分类、回归分析、聚簇和推荐领域。
MLib只是MLBase的一个组件。
MLBase是一个分布式机器学习系统,旨在使机器学习任务对于终端用户和ML研究人员都更简单易懂。
它是第一个将用户从算法选择中解放出来的系统,并针对分布式执行进行自动优化。
图算法可以用GraphX实现,后者结合了数据并行和图并行两种系统语义。
SparkR向R暴露了Spark API,允许统计人员从R函数直接向Apache Spark集群提交作业。
Spark可以部署在Apache YARN上,易于与异构系统集成和共存。
Streaming可以帮助快速创建原型及应用有效的分布式系统语义。