近日,Spark从Apache孵化器毕业。Spark声称,与Apache Hadoop相比,它在内存数据集上的性能提升了高达100倍,而在磁盘数据集上的性能则正常回落到10倍。自2010年开源以来,Spark一直是社区中最活跃的项目之一。 它的快速成长可以归于几个原因。为了利用众所周知的SQL语言,它可以将自身的DSL与SQL相结合。Spark的基本API是一种Scala DSL,围绕名为弹性分布式数据集(RDD)的分布式项集合构建。利用分布式执行,RDD可以支持批量和聚集操作,如筛选、映射和reduceByKey。Spark可以使用Hive SQL提供具有同等执行速度的原生Scala API。重用Hive的前端和后端意味着它可以与Hive一起使用,共享数据、查询和UDFs。 Spark使用MLib提供了一系列开箱即用的机器学习算法,涉及分类、回归分析、聚簇和推荐领域。MLib只是MLBase的一个组件。MLBase是一个分布式机器学习系统,旨在使机器学习任务对于终端用户和ML研究人员都更简单易懂。它是第一个将用户从算法选择中解放出来的系统,并针对分布式执行进行自动优化。算法选择是根据ML最佳实践和基于成本的模型实现的。分布式执行与Apache Mahout类似,并针对机器学习的数据访问模式进行了优化。 图算法可以用GraphX实现,后者结合了数据并行和“图并行(graph-parallel)”两种系统语义。GraphX提供了可以与Apache Giraph相媲美甚或更好的性能,而Apache Giraph则是Facebook使用的著名的图处理系统。 SparkR向R暴露了Spark API,允许统计人员从R函数直接向Apache Spark集群提交作业。除了RDBMS之外,R是最受数据科学家欢迎的工具。它的主要问题是单线程以及本来不是为大型数据集而设计。SparkR解决了这些问题,但有限制,它只对像梯度下降法这种本来就并行的算法才有效。 Spark可以部署在Apache YARN上,易于与异构系统集成和共存。它还是由Cloudera和Databricks支持的Cloudera企业数据中心版的一部分,其中Databricks是Spark商业化的推动者。最后,Streaming可以帮助快速创建原型及应用有效的分布式系统语义。读者可以从GitHub上获取Spark的代码。 |