Spark[3]:handoop生态与Spark架构启动等相关概念
Posted little_miya
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spark[3]:handoop生态与Spark架构启动等相关概念相关的知识,希望对你有一定的参考价值。
一、handoop
开源的大数据框架。
框架的核心组件
- HDFS: Hadoop Distributed File System
- MapReduce: processing unit
- YARN: Yet Another Resource Negotiator
- Hadoop Common:collection of common utilities and libraries that support other Hadoop modules.
HDFS
- starage layer of Hadoop
- split files into blocks, creates replicas of the blocks, stores them on different machines(block是读写的最小单位,默认的大小根据系统,可能是64M或者128M)
- provide access to streaming data(streaming意思是数据流是持续的,而非批量式的)
- 使用命令行工具与Hadoop交互
- write once read many
HDFS中的Nodes概念:
rack:40-50个data nodes(secondary node)的集合
rack awareness in HDFS指的是选择node的时候要选择挨得最近的rack,这样可以减少network traffic. 实现这一目标是依赖name node(primary node),其中保存着rack的相关信息。这种做法同样有利于replication
HDFS的架构:
mapreduce
并行计算框架,包含两个主要任务,map和reduce。能够应对各种数据类型:关系,半关系,非关系型。
handoop 生态系统
- Ingest: Flume & Sqoop
- Store:HDFS & HBase(allow dynamic change)
- Process and Analyze:Pig & Hive
- Access:Impala & Hue
举个例子:
我们传入一个word文件,查看文件中有多少个字。下图说明数据具体流程。
二、spark 相关概念
特性
- in memory
- be written in Scala and work in JVM
- distributed computing
spark的组件:
spark架构
Driver是公司的CEO,Cluster是部门负责人,executor是打工仔,跟真实的物理层打交道。
Spark context将任务分解到cluster上,
Cluster Manager来管理cluster上资源的分配。
Driver program驱动程序
单进程,driver program 运行用户的程序给cluster分配工作(Job);
Spark Context 将job 分解为tasks ,将data分解为partitions,小的tasks面向partitions可以在Cluster上的多个worker node平行执行。
driver program有两种deploy Modes
Executor
多进程,平行处理cluster的工作。
每个worker node可以启动执行程序Executor,来处理task,每个executor会给分配几个core,每个core运行一个task。
所以提高并行效果,需要增多cores或者Executors.
执行完成之后,要么生成新的RDD(transform)要么返回给driver(Action)
stage and shuffles
stage的概念其实是和shuffle绑定在一起的。当有shuffle的时候,就将整个job分割开为一系列tesks,分割的界限就是shuffle操作。
shuffle是耗费时间的,因为需要序列化,以及需要和io打交道。但是有些操作是必须和其他的partitions打交道,比如groupby().
举个例子:
stage1可能是个map操作.
建议在collection之前使用reduce,因为在大数据上使用collection,很容易占满内存
cluster manager
cluster manager is essential for scaling big data. 有如下几种:
-
Spark Standalone: Spark启动就有,最适合simple cluster的应用场景
设置流程如下所示:
-
Apache Hadoop YARN
-
Apache Mesos
-
Kubernetes:用来运行容器应用的开源系统,主要解决集群资源调度的问题。
使用Kubernetes的优势:
- Kubernetes runs containerized applications on a cluster providing flexible, automated deployments.
- Kubernetes provides developers with a portable, consistent experience whether working with an application on-premises or in the cloud.
- Kubernetes benefits application performance with features including network service discovery, cluster load balancing, automated scaling, and orchestrated storage.
在K8s上启动Spark Application:
Local Mode
使用local mode 启动方法:
如何运行一个Apache Spark Application
unifies interface: spark-submit
或者使用spark shell一键启动。
02 Spark架构与运行流程
1、Spark已打造出结构一体化、功能多样化的大数据生态系统,请简述Spark生态系统
Spark的设计遵循“一个软件栈满足不同应用场景”的理念,逐渐形成一套完整生态系统,既能够提供内存计算框架,也可以支持SQL即席查询、实时流式计算、机器学习和图计算等。Spark可以部署在资源管理器YARN之上,提供一站式的大数据解决方案。因此,Spark所提供的生态系统同时支持批处理、交互式查询和流数据处理。
2、用图文描述你所理解的Spark运行架构,运行流程
基本概念:
Application:用户编写的Spark应用程序。
Driver:Spark中的Driver即运行上述Application的main函数并创建SparkContext,创建SparkContext的目的是为了准备Spark应用程序的运行环境,在Spark中有SparkContext负责与ClusterManager通信,进行资源申请、任务的分配和监控等,当Executor部分运行完毕后,Driver同时负责将SparkContext关闭。
Executor:是运行在工作节点(WorkerNode)的一个进程,负责运行Task。
RDD:弹性分布式数据集,是分布式内存的一个抽象概念,提供了一种高度受限的共享内存模型。
DAG:有向无环图,反映RDD之间的依赖关系。
Task:运行在Executor上的工作单元。
Job:一个Job包含多个RDD及作用于相应RDD上的各种操作。
Stage:是Job的基本调度单位,一个Job会分为多组Task,每组Task被称为Stage,或者也被称为TaskSet,代表一组关联的,相互之间没有Shuffle依赖关系的任务组成的任务集。
Cluter Manager:指的是在集群上获取资源的外部服务。目前有三种类型
1) Standalon : spark原生的资源管理,由Master负责资源的分配
2) Apache Mesos:与hadoop MR兼容性良好的一种资源调度框架
3) Hadoop Yarn: 主要是指Yarn中的ResourceManager
Spark运行基本流程:
1、为应用构建起基本的运行环境,即由Driver创建一个SparkContext进行资源的申请、任务的分配和监控
2、资源管理器为Executor分配资源,并启动Executor进程
3、SparkContext根据RDD的依赖关系构建DAG图,DAG图提交给DAGScheduler解析成Stage,然后把一个个TaskSet提交给底层调度器TaskScheduler处理。
Executor向SparkContext申请Task,TaskScheduler将Task发放给Executor运行并提供应用程序代码。
4、Task在Executor上运行把执行结果反馈给TaskScheduler,然后反馈给DAGScheduler,运行完毕后写入数据并释放所有资源。
Spark运行架构特点:
1、每个Application都有自己专属的Executor进程,并且该进程在Application运行期间一直驻留。Executor进程以多线程的方式运行Task。
2、Spark运行过程与资源管理器无关,只要能够获取Executor进程并保存通信即可。
3、Task采用数据本地性和推测执行等优化机制。
以上是关于Spark[3]:handoop生态与Spark架构启动等相关概念的主要内容,如果未能解决你的问题,请参考以下文章
我的新书《Hadoop+Spark生态系统操作与实战指南》已经上架