什么样是 Spark?用 C++ 实现 Spark 有意义么

发表时间:2018-03-02 23:00:03 作者: 来源: 浏览:

在上一篇文章中,小编为您详细介绍了关于《Xgboost 对于多分类问题?kaggle数据集很大》相关知识。本篇中小编将再为您讲解标题什么样是 Spark?用 C++ 实现 Spark 有意义么。

云计算。这种问题可以直接去官网看。

关于Spark:

Spark是UC Berkeley AMP lab所开源的类Hadoop MapReduce的通用的并行计算框架,Spark基于map reduce算法实现的分布式计算,

拥有Hadoop MapReduce所具有的优点;但不同于MapReduce的是Job中间输出和结果可以保存在内存中,从而不再需要读写HDFS,

因此Spark能更好地适用于数据挖掘与机器学习等需要迭代的map reduce的算法

Spark与Hadoop的对比

Spark的中间数据放到内存中,对于迭代运算效率更高。

Spark更适合于迭代运算比较多的ML和DM运算。因为在Spark里面,有RDD的抽象概念。

Spark比Hadoop更通用。

Spark提供的数据集操作类型有很多种,不像Hadoop只提供了Map和Reduce两种操作。比如map, filter, flatMap, sample, groupByKey, reduceByKey, union,join, cogroup, mapValues, sort,partionBy等多种操作类型,Spark把这些操作称为Transformations。同时还提供Count, collect, reduce, lookup, save等多种actions操作。

这些多种多样的数据集操作类型,给给开发上层应用的用户提供了方便。各个处理节点之间的通信模型不再像Hadoop那样就是唯①的Data Shuffle①种模式。用户可以命名,物化,控制中间结果的存储、分区等。可以说编程模型比Hadoop更灵活。

不过由于RDD的特性,Spark不适用那种异步细粒度更新状态的应用,例如web服务的存储或者是增量的web爬虫和索引。就是对于那种增量修改的应用模型不适合。

容错性。

在分布式数据集计算时通过checkpoint来实现容错,而checkpoint有两种方式,①个是checkpoint data,①个是loggingthe updates。用户可以控制采用哪种方式来实现容错。

可用性。

Spark通过提供丰富的Scala, Java,PythonAPI及交互式Shell来提高可用性。

Spark与Hadoop的结合

Spark可以直接对HDFS进行数据的读写,同样支持Spark on YARN。Spark可以与MapReduce运行于同集群中,共享存储资源与计算,数据仓库Shark实现上借用Hive,几乎与Hive完全兼容。

Spark的适用场景

Spark是基于内存的迭代计算框架,适用于需要多次操作特定数据集的应用场合。需要反复操作的次数越多,所需读取的数据量越大,受益越大,数据量小但是计算密集度较大的场合,受益就相对较小

由于RDD的特性,Spark不适用那种异步细粒度更新状态的应用,例如web服务的存储或者是增量的web爬虫和索引。就是对于那种增量修改的应用模型不适合。

总的来说Spark的适用面比较广泛且比较通用。

C++ 的坑太多而必要的 feature 又不足(比如可序列化的 closure),不太看好 C++ 版的 Spark,即便做出来,应该也挺难用的。

不过我个人挺期待有人来实现 Rust 版的 Spark。当然 Rust 现在也还没有可序列化的 closure,不过基于 LLVM IR + compiler plugin 目测不是特别困难。或者更进①步说,希望能够出现 native 的类 Spark 计算引擎。当然,跟 Hadoop 的交互会成为①个大问题。不过印象里 Hadoop 本身也有计划通过 Avro RPC 来暴露语言无关的通讯接口,所以这个问题今后或许会有所改善?

Spark 当初选择 Scala,很重要的①个原因当然是为了和 Hadoop 互操作。但 JVM 本身很多时候确实已经成为系统优化的①大桎梏,比如严重的 GC 停顿导致大数据量的分析任务跑不下去。其他答案中说单机性能不足,多上几个节点就好了。但是节点多了,往往也会遇上 scalability 的问题。所以提高单机性能仍然相当有必要。Spark 近期展开的 Project Tungsten 实际上就是为了在维持 JVM 这个大前提下利用 unsafe 尽量往 native 靠近以大幅提升性能,为未来⑤年做准备。目前来看,Tungsten 已经有了明显的效果。①方面是现有作业的性能往往可以有明显的提升,另①方面是原先在给定集群规模下由于受制于 JVM 内存管理而跑不了的数据量,现在也可以轻松跑起来了。\", \"extras\": \"\", \"created_time\": ①④③⑦②⑨④⑧⑥⑤ · \"type\": \"answer

编后语:关于《什么样是 Spark?用 C++ 实现 Spark 有意义么》关于知识就介绍到这里,希望本站内容能让您有所收获,如有疑问可跟帖留言,值班小编第一时间回复。 下一篇内容是有关《ThinkPad X230i(2306-6QC)和ThinkPad X230(2306-8PC)有什么样区别?联想thinkpad e535 进入BIOS设置U盘启动顺序》,感兴趣的同学可以点击进去看看。

资源转载网络,如有侵权联系删除。

相关资讯推荐

相关应用推荐

玩家点评

条评论

热门下载

  • 手机网游
  • 手机软件

热点资讯

  • 最新话题