大数据与Scala:从MapReduce到动态调用
1. 超越MapReduce
在大数据处理领域,实时处理事件的需求日益增长。然而,传统的MapReduce仅适用于批处理作业,而HDFS直到最近才支持对文件的增量更新,并且大多数Hadoop工具尚未支持这一特性。
这种趋势促使了新工具的诞生,例如Storm,它是一个集群事件处理系统。此外,MapReduce还存在性能限制,如前文提到的过多磁盘I/O,以及编程API和底层模型的复杂性。
为了应对这些问题,主要的Hadoop供应商采用了名为Spark的MapReduce替代方案。Spark支持批处理模式和流处理模式,它用Scala编写,与MapReduce相比,性能更出色。这部分归因于它在处理步骤之间将数据缓存在内存中。更重要的是,Spark提供了类似于Scalding的直观API,简洁而富有表现力。
Scalding和Cascading使用管道隐喻,而Spark使用弹性分布式数据集(RDD),这是一种分布在集群上的内存数据结构。RDD具有弹性,如果某个节点出现故障,Spark能够从源数据中重建缺失的部分。
以下是一个Spark实现的Word Count示例:
// src/main/scala/progscala2/bigdata/WordCountSpark.scalaX
package bigdata
import org.apache.spark.SparkContext
import org.apache.spark.SparkContext._
object SparkWordCount {
def
超级会员免费看
订阅专栏 解锁全文
992

被折叠的 条评论
为什么被折叠?



