ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

3.Spark设计与运行原理,基本操作

2022-03-09 15:35:09  阅读:190  来源: 互联网

标签:RDD foreach executor print 基本操作 Spark 原理 lambda


1.Spark已打造出结构一体化、功能多样化的大数据生态系统,请用图文阐述Spark生态系统的组成及各组件的功能。

 

 

 

1. Spark Core
  实现Spark的基本功能,包括任务调度、内存管理、错误恢复、与存储系统交互等,以及RDD(Resilient Distributed Dataset)API的定义。
2. Spark SQL

  用Spark来操作结构化数据的程序包。可以使用SQL或Hive的HQL来查询数据,并可以与RDD的操作相结合使用。
3. Spark Streaming
  用来对实时数据进行流式计算的组件,Streaming中提供操作流式数据的API与RDD高度对应。Streaming与日志采集工具Flume、消息处理Kafka等可集成使用。
4. MLib
  机器学习(ML)的功能库,提供多种学习算法,包括分类、回归、聚类、协同过滤等,还提供了模型评估、数据导入等功能。
5. GraphX
  用来操作图的程序库,可以用于并行的图计算。扩展了RDD API功能,用来创建一个顶点和边都包含任意属性的有向图。支持针对图的各种操作,如图的分割subgraph、操作所有的顶点mapVertices、三角计算等。
6. 集群管理器

  Spark支持在各种集群管理器(cluster manager)上运行,包括Hadoop的YARN、Apache的Mesos以及Spark自带的一个简易调度器,叫独立调度器。

2.请详细阐述Spark的几个主要概念及相互关系:

  Master, Worker;  RDD,DAG;

  Application, job,stage,task; driver,executor,Claster Manager

  DAGScheduler, TaskScheduler.

 

(1)master和worker

 

  master节点常驻master守护进程,负责管理worker节点,从master节点提交应用。
  worker节点常驻worker守护进程,与master节点通信,并且管理executor进程。

 

(2)RDD和DAG

 

  RDD(Resilient Distributed Dataset)叫做弹性分布式数据集
  RDD算子构建了RDD之间的关系,整个计算过程形成了一个由RDD和关系构成的DAG

 

(3)Application、job、stage、task

 

  RDD任务切分中间分为:Application、Job、Stage和Task
  (1)Application:初始化一个SparkContext即生成一个Application;
  (2)Job:一个Action算子就会生成一个Job;
  (3)Stage:Stage等于宽依赖的个数加1;
  (4)Task:一个Stage阶段中,最后一个RDD的分区个数就是Task的个数。

 

(4)driver,executor

 

  Driver进程应用main()函数并且构建sparkContext对象,当我们提交了应用之后,便会启动一个对应的Driver进程,driver本身会根据我们设置的参数占有一定的资源就是executor,然后集群管理者会分配一定数量的executor,每个executor都占用一定数量的cpu和memory。
executor进程宿主在worker节点上,一个worker可以有多个executor。每个executor持有一个线程池,每个线程可以执行一个task,executor执行完task以后将结果返回给driver,

 

(5)Claster Manager DAGScheduler, TaskScheduler.

 

  TaskScheduler(是低级的调度器接口)。TaskScheduler负责实际每个具体Task的物理调度。
  DagScheduler(是高级的调度)。DAGScheduler负责将Task拆分成不同Stage的具有依赖关系(包含RDD的依赖关系)的多批任务,然后提交给TaskScheduler进行具体处理

3.在PySparkShell尝试以下代码,观察执行结果,理解sc,RDD,DAG。请画出相应的RDD转换关系图。 

>>> sc

>>> lines = sc.textFile("file:///home/hadoop/hy.txt")

>>> lines

 

 

 

>>> words=lines.flatMap(lambda line:line.split())

>>> words

 

>>> wordKV=words.map(lambda word:(word,1))

>>> wordKV

 

 

>>> wc=wordKV.reduceByKey(lambda a,b:a+b)

>>> wc

 

 

>>> cs=lines.flatMap(lambda line:list(line))

>>> cs

 

 

>>> cKV=cs.map(lambda c:(c,1))

>>> cKV

 

 

>>> cc=cKV.reduceByKey(lambda a,b:a+b)

>>> cc 

 

 

>>> lines.foreach(print)

 

 

>>> words.foreach(print)

 

 

>>> wordKV.foreach(print)

 

 

>>> cs.foreach(print)

 

 

>>> cKV.foreach(print)

 

 

>>> wc.foreach(print)

 

 

>>> cc.foreach(print)

 

标签:RDD,foreach,executor,print,基本操作,Spark,原理,lambda
来源: https://www.cnblogs.com/0075hy/p/15984977.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有