科普spark,spark是什么,如何使用spark?
自己写的spark入门实战教程,适合于有一定hadoop和数据分析经验的朋友。
spark简介
spark是一个开源的计算框架平台,使用该平台,数据分析程序可自动分发到集群中的不同机器中,以解决大规模数据快速计算的问题,同时它还向上提供一个优雅的编程范式,使得数据分析人员通过编写类似于本机的数据分析程序即可实现集群并行计算。
spark项目由多个紧密集成的组件组成。核心是sparkcore组件
,它实现了spark的基本功能,包括:任务调度、内存管理、错误恢复、与存储系统交互等模块,特别的,sparkcore还定义了弹性分布式数据集(rdd)的api,是spark内存计算与并行计算的主要编程抽象。
在sparkcore上有一系列软件栈,用于满足了各种不同数据分析计算任务需求,包括连接关系型数据库或hadoophive的sql/hql的查询组件sparksql,对实时数据进行流式计算的组件sparksteaming,支持常见机器学习算法并行计算组件mllib,支持并行图计算组件graphx等。
为了进一步支持在数千个计算节点上的伸缩计算,sparkcore底层支持在各种集群管理器上运行,包括hadoopyarn、apachemesos,或者spark自带的standalone独立调度器。
spark部署
安装spark比较简单,只要在机器上配置好最新版java环境,下载编译好的spark软件包后即可在本地运行。当然,也可以根据具体环境,使用maven编译需要的spark功能。
spark部署有两种,一是本地部署,二是集群部署。前者只需启动本地的交互式环境脚本即可,常用在本机快速程序测试,后者的应用场景更多些,具体根据集群环境不同,可部署在简易的spark独立调度集群上、部署在hadoopyarn集群上、或部署在apachemesos上等。
其中,spark自带的独立调度器是最简单实现spark集群环境的一种,只需在多网计算机上安装好spark,然后在其中一台启动集群管理器(通过脚本),然后再在其他计算机上启动工作节点(通过脚本),并连接到管理器上即可。
spark编程
使用spark编程,需要先在本机安装好spark环境,然后启动spark上下文管理器连接到本机(本地部署)或是集群上的集群管理器(集群部署),再使用spark提供的抽象接口编程即可。
支持spark的原生语言是scala,一种支持jvm的脚本语言,可以避免其他语言在做数据转化过程的性能或信息丢失。但随着spark项目的不断完善,使用python和pyspark包、或者r和sparkr包进行spark编程也都是不错的选择。
不论使用何种编程语言,使用spark进行数据分析的关键在于掌握spark抽象的编程范式,其基本流程包括4步:
初始化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包提供了更简洁易用的sparkr编程接口,dplyr包提供了一个语法可扩展的数据操作接口,支持与主流sql/nosql数据库连接,同时使数据操作与数据集数据结构解耦合,并且和spark原生算子可基本对应。
若第一次运行,先在本机安装必要的包和spark环境:
之后运行下面的小例子,可以发现,除了需要初始化sparkcontext、导入rdd数据和导出数据外,其他数据处理操作都与在本机做数据分析是一样的。
此外,除了dplyr接口外,sparklyr还封装了一套特征工程和常用机器学习算法,足以满足80%常见的数据分析与挖掘工作,至于剩余的20%定制算法或是流处理、图计算等任务,便需要了解更多高阶的spark接口来实现了。
springboot使用shiro还是secuitry好?
应该是springsecurity。众所周知,springboot/springcloud是java开发中最主流的技术栈,而在springboot/springcloud中做安全管理,springsecurity一定是最方便的;这样,如果要保护springboot中的接口,添加一个springsecurity的dependency,差不多就没问题了,所有接口也就保护起来了(这几乎不需要任何一行配置,就能搞定)。
拿microservice的场景举例,如果你想用shiro代替springsecurity,无疑shiro的代码量会非常恐怖,而反观springsecurity则可以非常容易的集成到springboot/springcloud技术栈中,可以和springboot、springcloud、springsocial、websocket等非常方便的整合。
原文标题:nosql的应用场景 科普Spark,Spark是什么,如何使用Spark?,如若转载,请注明出处:https://www.taihaichina.com/tag/26991.html
免责声明:此资讯系转载自合作媒体或互联网其它网站,「泰海号」登载此文出于传递更多信息之目的,并不意味着赞同其观点或证实其描述,文章内容仅供参考。