《Spark:分布式并行计算框架》由会员分享,可在线阅读,更多相关《Spark:分布式并行计算框架(42页珍藏版)》请在金锄头文库上搜索。
1、Spark:分布式并行计算框架内容简介Spark是什么Spark的发展历程Spark能干什么Spark的适用场景Spark的特点Spark生态系统Spark运行模式Spark高可用Spark核心概念:RDDSpark集群搭建Spark与Hadoop整合Spark应用部署模式Spark是什么Spark是一个基于内存基于内存计算的开源的分布式集群并行计算系统Spark非常小巧玲珑,由加州伯克利大学AMP实验室的Matei为主的小团队所开发。使用的语言是Scala,运行在JVM上,项目的core部分的代码只有63个Scala文件,非常短小精悍。是继Hadoop之后的新一代大数据分布式处理框架目前Sp
2、ark在全球已有广泛的应用,其中包括Alibaba、Baidu、TencentYouku、IBM、Intel、雅虎等。Spark发展历程Spark诞生于2009年,那时候它是,加州大学伯克利分校RAD实验室的一个研究项目,后来到了AMP实验室。Spark最初是基于HadoopMapreduce的,后来发现Mapreduce在迭代式计算和交互式上是低效的。因此Spark进行了改进,引入了内存存储和高容错机制。关于Spark的研究论文在学术会议上发表,并且在它被创建的2009年不久之后,对于一些特定的工作,Spark比Mapreduce快10-20倍。2010年3月份Spark开源。2011年,A
3、MP实验室开始在Spark上面开发高级组件,像Shark(HiveonSpark),SparkStreaming。2013年转移到了Apache下,现在已经是顶级项目了。2014年5月份Spark1.0发布。目前:发布最新版Spark1.6.1Spark在7年内迅速发展,较于其他大数据平台或框架,Spark代码库最为活跃Spark发展历程Spark能干什么1.大规模数据处理。例如用户行为数据,电子商务平台用户的操作行为记录,放进Spark系统,然后对数据进行多维度的分析,发现潜在客户,个性化推荐商品2.流数据处理。3.图计算。社交网络4.机器学习。协同过滤Spark的适用场景Spark是基于内
4、存的迭代计算框架,适用于需要多次操作特定数据集的应用场合。需要反复操作的次数越多,所需读取的数据量越大,受益越大,数据量小但是计算密集度较大的场合,受益就相对较小由于RDD的特性,Spark不适用那种异步细粒度更新状态的应用,例如web服务的存储或者是增量的web爬虫和索引。就是对于那种增量修改的应用模型不适合数据量不是特别大,但是要求实时统计分析需求Spark特点SparkSpark是快速的是快速的1.很多任务能够秒级完成,对于一些特定的工作,Spark比Mapreduce快10-20倍。2.Spark扩充了流行的Mapreduce计算模型,使Spark更高效地支持更多类型的计算,包括交互式
5、查询,和流处理。3.速度快的另一个主要原因就是,能够在内存中计算。4.官方提供的数据表明,如果数据由磁盘读取,速度是HadoopMapReduce的10倍以上,如果数据从内存中读取,速度可以高达100多倍。Spark特点Spark是易用的Spark不仅支持Scala编写应用程序,而且支持Java和Python,Python,R等语言进行编写。Spark特点SparkSpark是通用的是通用的1.Spark的设计,容纳了之前很多独立的,分布式系统所拥有的功能。独立的分布式系统包括:批处理,迭代式计算,交互查询和流处理等。2.并且,由之前需要维护不同的集群,到现在只需要维护一个Spark集群。3.
6、Spark生态圈即BDAS(伯克利数据分析栈)包含了SparkCore、SparkSQL、SparkStreaming、MLLib和GraphX等组件,这些组件分别处理SparkCore提供内存计算框架、SparkStreaming的实时处理应用、SparkSQL的即席查询、MLlib或MLbase的机器学习和GraphX的图处理,它们都是由AMP实验室提供,能够无缝的集成并提供一站式解决平台。Spark特点SparkSpark是开放是开放的的1.Spark提供了Java,Scala,Python,R,SQL的API和丰富的内置库。2.同时,Spark和其它的大数据工具整合的很好。尤其,Spa
7、rk能够运行在Hadoop集群上面,能够访问Hadoop数据。Spark特点Spark随随处运行运行Spark具有很强的适应性,能够读取HDFS、Cassandra、HBase、S3和Techyon为持久层读写原生数据,能够以Mesos、YARN和自身携带的Standalone作为资源管理器调度job,来完成Spark应用程序的计算。Spark生态系统Spark生态系统Spark生态圈也称为BDAS(伯克利数据分析栈),是伯克利APMLab实验室打造的,力图在算法(Algorithms)、机器(Machines)、人(People)之间通过大规模集成来展现大数据应用的一个平台。伯克利AMPLa
8、b运用大数据、云计算、通信等各种资源以及各种灵活的技术方案,对海量不透明的数据进行甄别并转化为有用的信息,以供人们更好的理解世界。该生态圈已经涉及到机器学习、数据挖掘、数据库、信息检索、自然语言处理和语音识别等多个领域。Spark生态圈以SparkCore为核心,从HDFS、AmazonS3和HBase等持久层读取数据,以MESS、YARN和自身携带的Standalone为资源管理器调度Job完成Spark应用程序的计算。这些应用程序可以来自于不同的组件,如SparkShell/SparkSubmit的批处理、SparkStreaming的实时处理应用、SparkSQL的即席查询、BlinkD
9、B的权衡查询、MLlib/MLbase的机器学习、GraphX的图处理和SparkR的数学计算等等。Spark生态系统Spark生态系统学习、维护成本很低。要实现一个相对完整的端到端的解决方案,以前需要部署多个专有系统,现在只需要一个SparkSparkCore对应HadoopMRSparkSQL对应HiveSparkStreaming对应StromSparkGraphX对应GiraphSparkMLLib对应MSpark运行模式Spark目前主要有目前主要有4种运行模式种运行模式1.LocalN模式,适用N个线程,用于调试。2.Localcluster伪分布式模式,可以配置worker数量,
10、每个worker管理的cpu和内存,用于调试3.StandaloneCluster集群模式,Spark:/hostname:port,需要部署spark到相关节点,url为master地址和端口4.YARNCluster模式,运行在资源管理器yarn集群中5.MesosCluster模式,运行在资源管理器Mesos集群中Spark运行模式Spark运行模式Spark运行模式1Client提交driver的终端,可以是集群中的任何一个node,也可以是spark集群外的机器,甚至是调试程序的Ide2Driver就是用户提交的程序,这里边定义了SparkContext的实例3SparkContex
11、t初始化过程中Spark会分别创建DAGScheduler作业调度和TaskScheduler任务调度两级调度模块4DAGScheduler是基于任务模块的高层调度模块,为每个Spark作业(job)计算具有依赖关系的多个调度模块(通常根据shuffle来划分),然后为每个阶段构建出一组具体的任务(Task),即任务集TaskSet交给TaskScheduler来具体执行5TaskScheduler则负责具体启动任务、监控和汇报任务运行情况6DAGScheduler和TaskScheduler都是不同阶段的调度者,具体执行任务的是Exector7Master接收Client提交的作业,管理Wo
12、rker,并命令Worker启动Driver和Executor8Worker负责管理本节点的资源,定期向Master汇报心跳,接收Master的命令,比如启动Driver和ESpark高可用Spark采用了Master/Slaves架构的集群模式,因此,存在着Master单点故障。基于文件系统的单点恢复此模式下虽然可以恢复,但需要人工参与。因此,适合对高可用要求不高的场景,如果离线分析。当Master挂掉后,手工启动Master仍然能继续执行原来的任务。当然,也可以继续提交任务exportSPARK_DAEMON_JAVA_OPTS=-Dspark.deploy.recoveryMode=FI
13、LESYSTEM-Dspark.deploy.recoveryDirectory=/opt/spark/recovery“基于ZooKeeper的HASparkStandalone使用多个Master节点,通过ZooKeeper推举一个为Active(激活)状态,其它的均为Standby(备用)状态。当ActiveMaster节点挂掉后,ZooKeeper会从所有的StandbyMater中推举会一个新的ActiverMaster。新的ActiveMaster恢复到旧有的ActiveMaster的状态,然后恢复调度。从ActiverMaster失去作用,到新ActiveMaster恢复调度可能
14、需要12分钟。exportSPARK_DAEMON_JAVA_OPTS=“-Dspark.deploy.recoveryMode=ZOOKEEPER-Dspark.deploy.zookeeper.url=10-154:2181,10-153:2181,10-152:2181,10-154:2181-Dspark.deploy.zookeeper.dir=/Spark核心概念:RDD什么是RDD1.Spark的核心概念是RDD(resilientdistributeddataset),是一个只读的,可分区的分布式数据集,这个数据集的全部或部分可以缓存在内存中,在多次计算间重用。2.一种有容错机
15、制的特殊集合,可以分布在集群的节点上,以函数式编程操作集合的方式,进行各种并行操作3.分布式的,可以分布在多台机器上,进行计算4.弹性的,计算过程中内存不够时它会和磁盘进行数据交换Spark核心概念:RDDRDD创建操作(creationoperation)1.集合创建,由内部集合生成,Spark中提供了parallelize和makeRDD两类函数来实现从集合生成RDD。varrdd=sc.makeRDD(1to10,3)2.存储创建,从文件存储(文本文件,hdfs),数据库(hbase,mongodb),消息队列(kafka)等获得数据并转换成RDDSpark核心概念:RDDRDD转换操作
16、操作(transfermationoperation)把一种RDD变成另一种新的RDD。如:map(func): 返回一个新的分布式数据集,由每个原元素经过func函数转换后组成filter(func): 返回一个新的数据集,由经过func函数后返回值为true的原元素组成flatMap(func):类似于map,但是每一个输入元素,会被映射为0到多个输出元素(因此,func函数的返回值是一个Seq,而不是单一元素)Spark核心概念:RDDRDD控制操作(controloperation)在spark中持久化操作是一种重要的功能,可以将RDD存储在不同层次的存储介质中,以便后续的操作能够重复
17、使用。如:cache()persist()Spark核心概念:RDDRDD行动操作(actionoperation)行动操作是和转换操作相对应的一种对RDD的操作类型,在Spark中每调用一次行动操作都会触发一次Spark的调度并返回相应的结果1.将变量或集合返回给driver程序。如:first(),count(),reduce()2.将RDD直接保存到外部文件系统或数据库,如HDFS,文本文件,hbasesaveAsTestFile()saveAsNewHadoopFile()saveAsNewHadoopDataset()Spark核心概念:RDD实例代码varsc=newSparkCo
18、ntext(“spark:/.:7077”,”Iloveplu”,”spark_home”,”app_jar”)varfileRDD=sc.textFile(“file:/temp/input/.txt”)varfilterRDD=fileRDD.filter(_contains(“Iloveplu”)filterRDD.cache()filterRDD.cout()/filterRDD.saveAstestFile(“file:/temp/output/.txt”)Spark核心概念:RDD实例注解:第1行创建了spark上下文,在上下文实例化的过程中向集群申请资源和运行环境第2行读取一个文
19、件并创建了第一个RDD第3行对fileRDD执行转换操作,过滤符合条件的每一行字符串,生成新的RDD,即filterRDD第4行对filterRDD进行控制操作,缓存在内存。通过配置不同的缓存策略也可以缓存在硬盘,或者一半在内存一半在硬盘第5行对filterRDD进行行动操作,进行count计算,返回包含”Iloveplu”的行数Spark是惰性计算,也就是延迟计算,只有当进行行动操作时,才会触发spark作业的运行,也就是说在action之前的代码相当于定义了job的执行计划Spark核心概念:RDDSpark集群搭建下载解压jdk,配置环境变量下载解压scala,配置环境变量Spark节点
20、之间通过ssh协议通信,各节点需配置ssh免密码访问Spark通通过主机名来主机名来进行互相行互相访问,通,通过修改修改/etc/hosts文件可配置本地主机名映射文件可配置本地主机名映射关系,在关系,在hosts文件中添加文件中添加计算机的名称和算机的名称和IP的的对应关系关系下载解压spark,配置spark-env,Spark集群搭建1.两台机器10-160,10-161部署spark,这两台机免密码ssh登录2.两台机器10-153,10-154均部署了zookeeper3.10台机器10-7010-79均部署了hadoop4.10-70部署Spark集群搭建1.2台台sparkspa
21、rk-env.sh文件:文件:#exportSPARK_MASTER_IP=192.168.10.160#exportSPARK_LOCAL_IP=10-160#zk高可用模式下不要上面两项exportSPARK_SSH_OPTS=-p58422exportJAVA_HOME=/usr/local/jdk1.7.0_79exportSCALA_HOME=/usr/local/scala-2.11.8exportSPARK_WORKER_MEMORY=8gexportSPARK_WORKER_CORES=4exportSPARK_HISTORY_OPTS=-Dspark.history.ui.p
22、ort=18080-Dspark.history.retainedApplications=3-Dspark.history.fs.logDirectory=file:/tmp/spark-events/exportSPARK_DAEMON_JAVA_OPTS=-Dspark.deploy.recoveryMode=ZOOKEEPER-Dspark.deploy.zookeeper.url=10-154:2181,10-153:2181-Dspark.deploy.zookeeper.dir=/spark2.2台台sparkslaves文件:文件:10-16010-Spark集群搭建选用10-
23、160作为默认master在10-160执行start-all.sh命令,在10-161执行stat-master.sh命令跑一个job试试,执行命令root10-160spark-1.6.1-bin-hadoop2.6#./bin/spark-submit-classplu.platform.StartLiveEvent-masterspark:/10-160:6066,10-161:6066-deploy-Spark集群搭建Spark集群搭建Spark与Hadoop整合RunSparkonYarnClusterSpark与Hadoop整合在在spark-env.sh设置配置置配置项expo
24、rtHADOOP_CONF_DIR=/app/hadoop/etc/Hadoop/指明了hadoop集群的配置启用启用Yarn日志聚合日志聚合功能功能yarn.log-aggregation-enabletrue操作操作HDFS这样我们在spark中操作hdfs就不需要关心hdfs的集群部署情况,如:varrdd1=sc.textFile(file:/app/spark/README.md);/读本地文件rdd1.saveAsTextFile(hdfs:/tmp/spark_readme.md);/写入hdfsvarrdd2=sc.textFile(hdfs:/tmp/spark_readme
25、.md);/读取hdfsrdd2.collect()/显示文本Spark与Hadoop整合RunSparkonYarn./bin/spark-submit-classplu.platform.sparkjob.LiveEventJob-masteryarn-deploy-modecluster-executor-memory5G-num-Spark与Hadoop整合Sparkonyarn提供了应用程序运行的web界面,可以通过这个界面查看spark作业的stage,task等详细信息,但无法获取应用程序的运行日志。这些日志通常保存在YARN的NodeManager节点上,一旦运行完成后可能会被
26、聚集后保存到HDFS上Spark与Hadoop整合Spark-sql&HSpark与Hadoop整合YarnHDFSMRSparkCoreZKHiveSparkJobSparkStreamingSparkSQLMySQLSqoopSpark应用部署模式Client模式模式,driver运行在当前执行命令的机器上,程序执行日志在终端输出,适合交互式应用./bin/spark-submit-classplu.platform.StartLiveEvent-masterspark:/10-160:7077,10-161:7077-deploy-modeclientplu.platform.jarCluster模式模式,driver运行在任意一台worker机器上,程序执行日志不会在终端输出在webui可以查看./bin/spark-submit-classplu.platform.StartLiveEvent-masterspark:/10-160:6066,10-161:6066-deploy-相关链接http:/www.code123.cc/docs/spark-operationand-maintenance-management/index.htmlhttp:/