Spark因其自身优势,发展势头迅猛,目前几乎所有一站式大数据平台都已集成了Spark,很多行业也都正在用Spark来改善他们的业务,以下是Spark在一些行业的具体用途:
保险行业:通过使用Spark的机器学习功能来处理和分析所有索赔,优化索赔报销流程。
医疗保健:使用Spark Core,Streaming和SQL构建病人护理系统。
零售业:使用Spark分析销售点数据和优惠券使用情况。
互联网:使用Spark的ML功能来识别虚假的配置文件,并增强他们向客户展示的产品匹配。
银行业:使用机器学习模型来预测某些金融产品的零售的资料。
政府:分析地理,时间和财政支出。
科学研究:通过时间,深度,地理分析地震事件来预测未来的事件。
投资银行:分析日内股价以预测未来的价格走势。
地理空间分析:按时间和地理分析Uber旅行,以预测未来的需求和定价。
航空公司:建立预测航空旅行延误的模型。
设备:预测建筑物超过临界温度的可能性
Spark是处理海量数据的快速通用引擎。作为大数据处理技术,Spark经常会被人们拿来与Hadoop比较。
Hadoop已经成了大数据技术的事实标准,Hadoop MapReduce也非常适合于对大规模数据集合进行批处理操作,但是其本身还存在一些缺陷。具体表现在:
1、Hadoop MapRedue的表达能力有限。所有计算都需要转换成Map和 Reduce两个操作,不能适用于所有场景,对于复杂的数据处理过程难以描述。
2、磁盘I/O开销大。Hadoop MapReduce要求每个步骤间的数据序列化到磁盘,所以I/O成本很高,导致交互分析和迭代算法开销很大,而几乎所有的最优化和机器学习都是迭代的。所以,Hadoop MapReduce不适合于交互分析和机器学习。
3、计算延迟高。如果想要完成比较复杂的工作,就必须将一系列的MapReduce作业串联起来然后顺序执行这些作业。每一个作业都是高时延的,而且只有在前一个作业完成之后下一个作业才能开始启动。因此,Hadoop MapReduce不能胜任比较复杂的、多阶段的计算服务。
Spark借鉴Hadoop MapReduce技术发展而来,继承了其分布式并行计算的优点的同时,改进了MapReduce的许多缺陷。具体优势如下:
1、Spark提供广泛的数据集操作类型(20+种),支持Java,Python和Scala API,支持交互式的Python和Scala的shell。比Hadoop更加通用。
2、Spark提供Cache机制来支持需要反复迭代的计算或者多次数据共享,减少数据读取的I/O开销。Spark使用内存缓存来提升性能,因此进行交互式分析也足够快速,缓存同时提升了迭代算法的性能,这使得Spark非常适合数据理论任务,特别是机器学习。
3、Spark提供了内存计算,把中间结果放到内存中,带来了更高的迭代运算效率。通过支持有向无环图(DAG)的分布式并行计算的编程框架,减少迭代过程中数据需要写入磁盘的需求,提高处理效率。
此外,Spark还能与Hadoop无缝衔接,Spark可以使用YARN作为它的集群管理器,可以读取HDFS、HBase等一切Hadoop的数据。
Spark在最近几年发展迅速,相较于其他大数据平台或框架,Spark的代码库最为活跃。截止目前,最新发布的版本为Spark330。
也有许多数据治理工具,为了实现实时、通用的数据治理而采用Spark技术。以飞算推出的SoData数据机器人为例,是一套实时+批次、批流一体、高效的数据开发治理工具,能够帮助企业快速实现数据应用。
相较于传统数据加工流程,SoData数据机器人实现了流批一体数据同步机制,基于Spark和Flink框架进行深度二次开发,实现数据采集、集成、转换、装载、加工、落盘全流程实时+批次处理的极致体验,秒级延迟,稳定高效平均延迟5-10s,快速响应企业数据应用需求。
除了具备Spark数据处理的优势,SoData数据机器人的Spark体系还支持从各种数据源执行SQL生成Spark字典表,边开发边调试的Spark-SQL开发,支持任意结果集输出到各类数据库。可视化的运维、开发方式也能在极大降低数据开发、治理、应用门槛的同时,提升效率。
在某综合医院的信息化建设中,SoData数据机器人曾在5分钟内完成原本需要8-9小时才能完成的数据迁移工作。
目前,SoData数据机器人已应用于金融、医疗、能源等多个行业,将持续通过创新技术,为各行业组织机构带来更优质、快速的数据开发、治理、应用体验。
DJIGO4App。大疆Spark可使用移动设备与DJIGO4App控制飞行器。大疆djigo4是一款专为大疆无人机开发的控制app,它可以通过无人机进行高清摄影,还可以进行实时图像查看,功能非常强大,有需要的可以到当易网下载体验。
ResourceManager:是集群所有应用程序的资源管理器,能够管理集群的计算资源并为每个Application分配,它是一个纯粹的调度器。 NodeManager:是每一台slave机器的代理,执行应用程序,并监控应用程序的资源使用情况。 Application Master:每一个应用程序都会有一个Application Master,它的主要职责是向RM申请资源、在每个NodeManager上启动executors、监控和跟踪应用程序的进程等。
这里写描述
执行过程:
(1)客户端提交Application到RM,这个过程做的工作有判断集群资源是否满足需求、读取配置文件、设置环境变量、设置Application名字等等;
(2)RM在某一台NodeManager上启动Application Master,AM所在的机器是YARN分配的,事先是不知道的;
(3)AM初始化SparkContext,开始驱动程序,这个NodeManager便是Driver;
(4)AM向ResourceManager申请资源,并在每台NodeManager上启动相应的executors;
(5)初始化后的SparkContext中的通信模块可以通过AKKA与NodeManager上的容器进行通信。
比以前的更多的理解:
(1)Application Master所在的NodeManager是Yarn随机分配的,不是在主节点上,下图是实验室集群上跑得一个Spark程序,tseg0是主节点,tseg1~tseg4是workers,IP1010324029指的是tseg3:
这里写描述
(2)在上图还可以看出,executor的容器和AM容器是可以共存的,它们的封装都是容器;
(3)AM是Yarn启动的第一个容器;
(4)AM所在的NodeManager就是平常说的Driver端,因为这个AM启动了SparkContext,之前实验室说的“谁初始化的SparkContext谁就是Driver端”一直理解错了,以为这句话是相对于机器说的,但其实是相对于Cluster和Client的集群模式来说的(不知道其他模式Mesos、standalone是不是也是这样)。
(5)在Application提交到RM上之后,Client就可以关闭了,集群会继续运行提交的程序,在实际使用时,有时候会看到这样一种现象,关闭Client会导致程序终止,其实这个Application还没有提交上去,关闭Client打断了提交的过程,Application当然不会运行。
这里写描述
(1)Client Application会初始化SparkContext,这是Driver端;
(2)提交Application到RM;
(3)应该是在RM所在的机器上启动AM(
?不确定
);
(4)AM向RM申请资源,并启动NodeManager上的Executors;
(5)Executors与SparkContext初始化后的通信模块保持通信,因为是与Client端通信,所以Client不能关闭。
(1)SparkContext初始化不同,这也导致了Driver所在位置的不同,YarnCluster的Driver是在集群的某一台NM上,但是Yarn-Client就是在RM在机器上; (2)而Driver会和Executors进行通信,这也导致了Yarn_cluster在提交App之后可以关闭Client,而Yarn-Client不可以; (3)最后再来说应用场景,Yarn-Cluster适合生产环境,Yarn-Client适合交互和调试。
之前实验室配过Hadoop多用户
,最近因为培训Spark,又得在这个基础上再能够运行Spark。做的工作很简单,就是把Spark以及Spark依赖的环境scp过去,然后再改一下相应的配置就可以了。猜想的不同用户运行Spark On Yarn Cluster如下图所示,无非就是多增加了一个用户Client,因为ResourceManager是唯一的,所以不同用户CLient提交的Spark Application在集群上运行都是一样的。
欢迎分享,转载请注明来源:品搜搜测评网