设为首页 加入收藏

TOP

spark-1-基础
2019-04-22 01:23:02 】 浏览:53
Tags:spark-1- 基础

MR有什么问题?

调度慢,启动map、 reduce太耗时
计算慢,每一步都要保存中间结果落磁盘
API抽象简单,只有map和reduce两个原语
缺乏作业流描述,一项任务需要多轮mr

什么是spark?

– 也是一个分布式的并行计算框架
– spark是下一代的map-reduce,扩展了mr的数据处理流程。
– executor都是装载在container里运行,container默认内存是
1G(参数yarn.scheduler.minimum-allocation-mb定义)
– executor分配的内存是executor-memory,向YARN申请的内
存是executor-memory * num-executors。
– AM在Spark中叫driver,AM向RM申请的是executor资源,当分配完资源后,executor启动后,由spark的AM向executor分配task,分配多少task、分配到哪个executor由AM决定,可理解为spark也有个调度过程,这些task都运行在executor的坑里
– Executor有线程池多线程管理这些坑内的task

Spark解决了什么问题?

– 最大化利用内存cache
– 中间结果放内存,加速迭代
– 某结果集放内存,加速后续查询和处理,解决运行慢的问题

– 完整作业描述
– 将用户的整个作业穿起来。关键是这3行。 可以立即解释。不像mr那样,需要实现多个map和reduce脚
本,解决MR缺乏作业流描述问题

在这里插入图片描述
一个作业中描述完整的APP作业流
多语言SDK支持:Scala、 javapython

spark的安装

验证Spark

本地模式
– ]# ./bin/run-example SparkPi 10 --master local[2]
集群模式 Spark Standalone
– ]# ./bin/spark-submit --class org.apache.spark.examples.SparkPi --master spark://master:7077
lib/spark-examples-1.6.0-hadoop2.6.0.jar 100
集群模式 Spark on Yarn 集群上yarn-cluster模式
– ]# ./bin/spark-submit --class org.apache.spark.examples.SparkPi --master yarn-cluster lib/sparkexamples-1.6.0-hadoop2.6.0.jar 10

Spark standalone vs. Spark on Yarn
Spark standalone:独立模式,类似MapReduce 1.0所采取的模式,完全由内部实现容错性和资源管理
Spark on Yarn:让Spark运行在一个通用的资源管理系统之上,这样可以与其他计算框架共享资源

Yarn Client vs. Spark Standlone vs. Yarn Cluster
Yarn Client:适用于交互与调试
– Driver在任务提交机上执行
– ApplicationMaster只负责向ResourceManager申请executor需要的资源
– 基于yarn时,spark-shell和pyspark必须要使用yarn-client模式
Yarn Cluster:适用于生产环境

Yarn(通用)
– Master/Slave结构
RM:全局资源管理器,负责系统的资源管理和分配
NM:每个节点上的资源和任务管理器
AM:每个应用程序都有一个,负责任务调度和监视,并与RM调度器协商为任务获取资源
Standalone(Spark自带)
– Master/Slave结构
Master:类似Yarn中的RM
Worker:类似Yarn中的NM

spark和mapreduce作业之间的区别
Hadoop中:
– 一个MapReduce程序就是一个job,而一个job里面可以有一个或多个Task,Task又可以区分为Map Task和Reduce Task
– MapReduce中的每个Task分别在自己的进程中运行,当该Task运行完时,进程也就结束

在这里插入图片描述

Spark中:
– Application:spark-submit提交的程序
– Driver:完成任务的调度以及和 executor和 cluster manager进行协调
– Executor:每个Spark executor作为一个YARN容器
(container)运行
– Job:和MR中Job不一样。 MR中Job主要是Map或者Reduce Job。而Spark的Job其实很好区别,一个action算子就算一个Job,比方说count,first等
– Task:是Spark中最新的执行单元。 RDD一般是带有partitions的,每个partition在一个executor上的执行可以认为是一个Task
– Stage:是spark中独有的。一般而言一个Job会切换成一定数量的stage。各个stage之间按照顺序执行

在这里插入图片描述

Spark中:
– Application:由一个driver program和多个job构成
– Job:由多个stage组成
– Stage:对应一个taskset
– Taskset:对应一组关联的相互之间没有shuffle依赖关系的task组成
Task:任务最小的工作单元

在这里插入图片描述
Driver Program:
– (驱动程序)是Spark的核心组件
– 构建SparkContext(Spark应用的入口,创建需要的变量,还包含集群的配置信息等)
– 将用户提交的job转换为DAG图(类似数据处理的流程图)
– 根据策略将DAG图划分为多个stage,根据分区从而生成一系列tasks
– 根据tasks要求向RM申请资源
– 提交任务并检测任务状态
Executor:
– 真正执行task的单元,一个Work Node上可以有多个Executor

Scala语言
Spark源码由Scala语言开发
变量定义:有两种变量val和var
val 类似于Java里的final变量。一旦初始化后就不能再赋值。
var 如同Java里面的非final变量。 var可以在它生命周期中被多次赋值。
与Java不同的是类型声明在变量后面用一个” :” 分隔,如果没有指定变量类型,编译器将会自动推断
注意:当val被声明为lazy时,它的初始化将被推迟,直到首次取用它的值。

支持的数据类型:

复合类型:
– 数组(Array)、列表(List)、元组(Tuple)、集合(Set)、映射(Map)

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇Scala   WordCount 下一篇大数据之   spark介绍和基本..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目