前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Apache Spark:大数据领域的下一件大事?

Apache Spark:大数据领域的下一件大事?

作者头像
用户2176511
发布2018-05-23 15:56:00
3650
发布2018-05-23 15:56:00

Apache Spark正在引起很大的热议。Databricks是为支持Spark而成立的一个公司,它从Andreessen Horowitz募集到了$ 1400万美元Cloudera决定全力支持Spark,其他人也认为这是下一件。所以我认为现在是时候看看并了解整个动态了。

我曾经用过Scala API(Spark是用Scala编写的),说实话,起初我非常不高兴,因为Spark看起来很小。基本的抽象是弹性分布式数据集(RDDs),基本上是分布式的不可变集合,它可以基于本地文件或通过HDFS存储在Hadoop上的文件来定义,并提供像map,foreach等常用的Scala样式集合操作。

我的第一反应是“等等,这就是分布式集群吗?”相比之下,Hadoop似乎要比这个多很多,包括分布式文件系统,显而易见的map reduce,支持各种数据格式,数据源,单元测试,集群变体,等等等等。

其他人很快就指出事实上不止如此,Spark还提供了更复杂的集合操作,如连接,分组或分发操作,以便可以对相当复杂的数据流进行建模(不过无需迭代)。

随着时间的推移,我意识到实际上Spark所感觉到的简洁性更多的是在说Hadoop 的Java API,而不是Spark。在Hadoop中,即使简单示例通常也带有大量样板代码。但从概念上讲,Hadoop非常简单,因为它只提供两种基本操作,即并行映射和汇总合并操作。如果以类似于分布式集群的方式表示,实际上用到的接口会更小(像Scalding这样的一些项目实际上构建了这样的东西,代码看起来与Spark很相似)。

因此,在让我相信Spark实际上提供了一组不重要的操作(真正难以从简单的字数统计中得出结论)之后,我深入了解并阅读了这篇描述一般架构的论文。弹性分布式数据集(RDDs)是Spark的基本构建块,实际上就像分布式不可变集合一样的存在。这些弹性分布式数据集定义了像map或foreach这样易于并行化的操作,也包括了输入两个弹性分布式数据集(RDDs)然后基于一个公共密钥进行汇总的连接操作,以及使用基于给定密钥的用户指定函数汇总结果的分发操作。在单词计数的例子中,你需要将一个文本映射为次数1的单词,然后通过单词的关键字减少它们,并总结计数得到单词总数。弹性分布式数据集(RDDs)可以从磁盘读取,然后保存在内存中以提高速度,也可以缓存,这样不必每次都重新读取它们。与大多数基于磁盘的Hadoop相比,仅仅这一项就在很大程度上提高了速度。

现在,有趣的是Spark的容错方法。Spark不会保留或检查中间结果,而是会记住导致某个数据集的操作顺序。所以当一个节点发生故障时,Spark会根据存储的信息重建数据集。他们认为实际上这是一个不错的方法,因为其他节点将有助于重建。

因此,从本质上讲,与纯粹的Hadoop相比,Spark的接口更小(将来可能会变得相似),但是Hadoop之上有很多项目(例如Twitter的Scalding),它们的表现力达到了类似的水平。另一个主要区别是Spark默认是内存,这自然会导致性能的大幅提升,甚至允许运行迭代算法。Spark没有内置的迭代支持,虽然如此,但那只是他们声称它太快了,以至于如果你想要的话当然可以运行迭代。

Spark Streaming - 微型批次的回报

Spark还带有一个流式数据处理模型,当然这让我很感兴趣,还有一篇文章很好地总结了数据处理设计。与像Twitter的Storm这样的框架相比,Spark采用了一种有趣且不同的方法。Storm基本上就像是一个管道,你可以推送单个事件,然后以分布式方式进行处理。相反,Spark采用另外一种模型,在该模型中收集事件并以批处理的方式在短时间间隔内(假设每隔5秒)进行处理。收集的数据成为自己的一个弹性分布式数据集(RDD),然后使用通常的Spark应用程序进行处理。

作者声称,这种模式对较慢的节点和故障更加稳健,并且对于大多数应用来说,5秒的间隔通常足够快。我不太清楚这一点,因为分布式计算总是很复杂,不能简单地说孰好孰坏。这种方法也很好地将流与非流式部分统一起来,这当然是正确的。

最后的想法

Apache Spark看起来前景光明,并且得到了和Spark一样多的支持和关注,我非常肯定它会成熟并成为该领域的强者。但它不适合所有的东西,正如作者自己所承认的,由于RDD的不可变性质,它并不适合那些只需更改当时数据集的操作。原则上,即使只想更改其中一项,也必须复制整个数据集。这可以很好地并行,当然要付出代价。基于写入时复制方案的更有效的实现可以应用在这样的情况中,但如果我没有弄错,它还没有实现。

平流层是柏林工业大学的研究项目,它有着相似的目标,但通过包括更复杂的迭代操作,不仅存储容错操作顺序,而且还将其用于全局优化调度和并行化。

不变性在这里应用广泛,因为它易于推理,但我想提醒你Baron Schwartz 的这篇优秀的文章,这篇文章(http://www.xaprb.com/blog/2013/12/28/immutability-mvcc-and-garbage-collection/)关于你如何最终用混合策略(可变数据和不可变数据)来使得它在现实中起作用的。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Spark Streaming - 微型批次的回报
  • 最后的想法
相关产品与服务
云 HDFS
云 HDFS(Cloud HDFS,CHDFS)为您提供标准 HDFS 访问协议,您无需更改现有代码,即可使用高可用、高可靠、多维度安全、分层命名空间的分布式文件系统。 只需几分钟,您就可以在云端创建和挂载 CHDFS,来实现您大数据存储需求。随着业务需求的变化,您可以实时扩展或缩减存储资源,CHDFS 存储空间无上限,满足您海量大数据存储与分析业务需求。此外,通过 CHDFS,您可以实现计算与存储分离,极大发挥计算资源灵活性,同时实现存储数据永久保存,降低您大数据分析资源成本。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档