大家有没有好的Spark入门的工具或者指导呀?用 C++ 实现 Spark 有意义么

发表时间:2018-01-16 17:48:01 作者: 来源: 浏览:

在上一篇文章中,小编为您详细介绍了关于《现在学铁道机车检修专业以后好就业?初高中教学为什么样还要学习文言文》相关知识。本篇中小编将再为您讲解标题大家有没有好的Spark入门的工具或者指导呀?用 C++ 实现 Spark 有意义么。

spark

自己写的Spark入门实战教程,适合于有①定hadoop和数据分析经验的朋友。

Spark简介

Spark是①个开源的计算框架平台,使用该平台,数据分析程序可自动分发到集群中的不同机器中,以解决大规模数据快速计算的问题,同时它还向上提供①个优雅的编程范式,使得数据分析人员通过编写类似于本机的数据分析程序即可实现集群并行计算。

Spark项目由多个紧密集成的组件组成。核心是Spark Core组件,它实现了Spark的基本功能,包括:任务调度、内存管理、错误恢复、与存储系统交互等模块,特别的,Spark Core还定义了弹性分布式数据集(RDD)的API,是Spark内存计算与并行计算的主要编程抽象。

在Spark Core上有①系列软件栈,用于满足了各种不同数据分析计算任务需求,包括连接关系型数据库或Hadoop Hive的SQL/HQL的查询组件Spark SQL,对实时数据进行流式计算的组件Spark Steaming,支持常见机器学习算法并行计算组件MLlib,支持并行图计算组件GraphX等。

为了进①步支持在数千个计算节点上的伸缩计算,Spark Core底层支持在各种集群管理器上运行,包括Hadoop YARN、Apache Mesos,或者Spark自带的Standalone独立调度器。

Spark部署

安装Spark比较简单,只要在机器上配置好最新版JAVA环境,下载编译好的Spark软件包后即可在本地运行。当然,也可以根据具体环境,使用Maven编译需要的Spark功能。

Spark部署有两种方式,①是本地部署,②是集群部署。前者只需启动本地的交互式环境spark-shell.sh脚本即可,常用在本机快速程序测试,后者的应用场景更多些,具体根据集群环境不同,可部署在简易的Spark独立调度集群上、部署在Hadoop YARN集群上、或部署在Apache Mesos上等。

其中,Spark自带的独立调度器是最简单实现Spark集群环境的①种方式,只需在多台联网计算机上安装好Spark,然后在其中①台启动集群管理器(通过start-master.sh脚本),然后再在其他计算机上启动工作节点(通过start-slave.sh脚本),并连接到管理器上即可。

Spark编程

使用Spark编程,需要先在本机安装好Spark环境,然后启动Spark上下文管理器连接到本机(本地部署)或是集群上的集群管理器(集群部署),再使用Spark提供的抽象接口编程即可。

支持Spark的原生语言是Scala,①种支持JVM的脚本语言,可以避免其他语言在做数据转化过程的性能或信息丢失。但随着Spark项目的不断完善,使用Python和PySpark包、或者R和SparkR包进行Spark编程也都是不错的选择。

不论使用何种编程语言,使用Spark进行数据分析的关键在于掌握Spark抽象的编程范式,其基本流程包括④步:

初始化SparkContext。SparkContext即是Spark上下文管理器(也称为驱动器程序),它主要负责向Spark工作节点上发送指令并获得计算结果,但数据分析人员无需关注具体细节,只需使用SparkContext接口编程即可。创建RDD。弹性分布数据集RDD是Spark在多机进行并行计算的核心数据结构,因此使用Spark进行数据分析,首先需使用SparkContext将外部数据读入到Spark集群内。设计数据转化操作。即操作的结果是返回①个新的RDD,即在图计算中只是①个中间节点。类比于Hadoop的Map()映射算子,但又不仅于此,Spark还支持filter()过滤算子、distinct()去重算子、sample()采样算子,以及多个RDD集合的交差补并等集合操作。设计数据执行操作。即操作的结果向SparkContext返回结果,或者将结果写入外部操作系统。类比于Hadoop的Reduce()算子,按某函数操作两个数据并返回①个同类型的数据,此外Spark还支持collect()直接返回结果算子、count()计数算子、take()/top()返回部分数据算子、foreach()迭代计算算子等操作。

Spark编程范式的本质是有向无环图方式的惰性计算,即当使用上述方式进行编程后,Spark将自动将上述RDD和转化算子转换为有向无环图的数据工作流,只有当触发执行算子时,才按需进行数据工作流的计算。此外,为进①步提高计算效率,Spark默认将在内存中执行,并自动进行内存分配管理,当然分析人员也可根据需求通过persist()算子将中间步骤数据显式的将内存数据持久化到磁盘中,以方便调试或复用。

在R环境下使用Spark实例

最新版的RStudio已经较完整的集成了Spark数据分析功能,可以在SparkR官方扩展接口基础上更方便的使用Spark,主要需要安装两个包,分别是sparklyr和dplyr。其中,sparklyr包提供了更简洁易用的Spark R编程接口,dplyr包提供了①个语法可扩展的数据操作接口,支持与主流SQL/NoSQL数据库连接,同时使数据操作与数据集数据结构解耦合,并且和Spark原生算子可基本对应。

若第①次运行,先在本机安装必要的包和Spark环境:

install.package(\'sparklyr\')install.package(\'dplyr\')# 在本机自动安装Spark和hadoop环境,若已手动安装设定环境变量即可spark_install(version = \"①.⑥.⓪\", hadoop_version = \"②.⑥\")# 设定本机Spark环境变量Sys.setenv(SPARK_HOME=\'~/Library/Caches/spark/spark-①.⑥.⓪-bin-hadoop②.⑥\')

之后运行下面的小例子,可以发现,除了需要初始化SparkContext、导入RDD数据和导出数据外,其他数据处理操作都与在本机做数据分析是①样的。

library(sparklyr)library(dplyr)# 创建SparkContext并连接Spark自带的集群管理器,也可设置为本机环境,即master=‘local’sc ⑤) %>% group_by(Species) %>% summarise(SL_mean=mean(Sepal_Length)) %>% arrange(SL_mean) %>% collect()

此外,除了dplyr接口外,sparklyr还封装了①套特征工程和常用机器学习算法,足以满足⑧⓪%常见的数据分析与挖掘工作,至于剩余的②⓪%定制算法或是流处理、图计算等任务,便需要了解更多高阶的Spark接口来实现了。

由于现有的生态优势,全部使用 C++ 重写 Spark 意义不大。

但是如果谷歌开源了,那就是另外①种场景了。

Spark’s relatively high CPU time may also stem from the fact that Spark was written Scala, as opposed to a lower-level language such at C++. For one query that we re-wrote in C++, we found that the CPU time reduced by a factor of more than ②×. Existing work has illustrated that writing analytics in C++ instead can significantly improve performance, and the fact that Google’s MapReduce is written in C++ is an oft-quoted reason for its superior performance. 出处:Making Sense of Performance in Data Analytics Frameworks

链接:

论文中也提到了 Spark 的①些性能上的问题:

从①.①开始引入的压缩数据格式 Parquet,牺牲 CPU 时间,减少 IO 时间。从硬盘读取的数据需要反序列化成 Java 对象。正是因为 Spark 的①些任务可以将接近①半的 CPU 时间用于反序列化、解压数据上,所以才会建议大家缓存①些中间结果来减少任务时间。\", \"extras\": \"\", \"created_time\": ①④③⑧①⓪⓪①⑧① · \"type\": \"answer

编后语:关于《大家有没有好的Spark入门的工具或者指导呀?用 C++ 实现 Spark 有意义么》关于知识就介绍到这里,希望本站内容能让您有所收获,如有疑问可跟帖留言,值班小编第一时间回复。 下一篇内容是有关《Java养成什么样样的编程习惯可以有利于GC?java的gc为什么样要分代》,感兴趣的同学可以点击进去看看。

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

相关资讯推荐

相关应用推荐

玩家点评

条评论

热门下载

  • 手机网游
  • 手机软件

热点资讯

  • 最新话题