Spark-分布式集群运行

1.简介

这篇文章主要是简单的介绍一下Spark应用如何在集群上运行, 更进一步的理解Spark所涉及到的相关主件

目前Apache Spark支持三种分布式部署方式,分别是standalone、spark on mesos和 spark on YARN

2.架构

Spark应用在集群上是独立运行的进程, 通过主程序(main program)的SparkContext进行协调. 一般我们成Spark的主程序为driver程序(driver program)

特别的, 在集群上运行Spark, SparkContext对象支持和多种不同类型的集群管理器(Cluster manager)进行通信. 包括Spark自己的standalone集群管理器, Mesos还有YARN. SparkContext和Cluster manager连接之后, Cluster manager会在集群的worker节点上启动executor进程(真正进行数据处理, 计算和存储), 接下来把应用程序的代码(JAR包或Python文件)发送到executor进程, 最后SparkContext在executor进程上调度task执行

上诉的流程, 简单用几个步骤进行描述

  1. SparkContext和Cluster manager通信
  2. Cluster manager在集群的worker节点启动executor进程
  3. Cluster manager把Spark应用代码发送给executor进程
  4. SparkContext推送task到executor上执行

从上图可以看出

  1. SparkContext负责驱动整个Spark应用的执行
  2. Cluster manager负责进行资源分配和任务调度(executros启动)
  3. executor负责执行Spark的task任务

对于这个架构, 有几个我们必须了解

  1. 每个应用的executor进程是相互隔离的, executor进程贯穿于整个应用的生命周期, 同时用多线程执行task. executor进程隔离有什么好处呢? 第一点对于driver调度来说, 每个driver只管负责调度自己的task即可. 第二点对于executor执行来说不同的应用的task运行在不同JVM. 相反, 进程隔离意味着不同Spark应用程序之间的数据无法共享, 除了持久化存储的那些数据
  2. 对于Spark来说并不关心Cluster manager, 只要能够启动executor进程同时也能够互相通信就可以. 对于Mesos/YARN来说非常容易运行其他运用程序, 包括Spark
  3. Spark的整个生命周期期间, driver程序需要监听并且接收外部请求. 因此必须保证driver程序网络可用
  4. 由于driver程序要调度task到worker节点的executor进程运行, 因此driver程序最好能够和worker节点在同一个集群内执行. 如果想发送一个请求到远程集群, 最好通过发送RPC请求来提交相关操作

3.Clsuter manager

目前有三种类型的Cluster manager支持Spark

standalone

Apache Mesos

Hadoop YARN

4.名词解释

Spark应用程序可以通过 spark-submit进行提交

每个driver程序都有一个web UI, 端口4040. 前端可以展示tasks, executors和存储使用情况.

Term              Meaning
----------------------------------------------------------------------------------
Application       用户开发的Spark应用程序, 包括driver程序和集群的executors进程
----------------------------------------------------------------------------------
Application jar   包含用户Spark应用程序的jar包, 有些时候用户创建一个jar包, 包含应用
                  所有的依赖项. 但是用户的jar包不应该包括Hadoop或者Spark相关的库
----------------------------------------------------------------------------------
Driver program    应用程序执行main函数的进程, 同时生成SparkContext
----------------------------------------------------------------------------------
Cluster manager   集群服务用于分配资源
----------------------------------------------------------------------------------
Deploy mode       driver程序运行的区别. "cluster"模式, driver程序运行在集群的任意wroker
                  节点. "client"模式, driver程序运行在本地
----------------------------------------------------------------------------------
Worker node       集群的任何一个可以执行应用的节点
----------------------------------------------------------------------------------
Executor          每个应用在worker节点上启动的一个进程, 执行task任务同时把数据放在
                  内存或者磁盘. 每个应用都有自己的executor进程
----------------------------------------------------------------------------------
Task              executor执行的一个单元
----------------------------------------------------------------------------------
Job               多个并行计算task组成一个Job
----------------------------------------------------------------------------------
Stage             每个job被分割成多个不同task集合, 每个task集合称为stage
                  例如map和reduce是Mapeduce的一个stage
时间: 2025-01-08 04:14:03

Spark-分布式集群运行的相关文章

阿里云一键部署 Spark 分布式集群

Apache Spark是专为大规模数据处理而设计的快速通用的计算引擎,可以完成各种各样的运算,包括 SQL 查询.文本处理.机器学习等,而在 Spark 出现之前,我们一般需要学习各种各样的引擎来分别处理这些需求.本文主要目的是为大家提供一种非常简单的方法,在阿里云上部署Spark集群. 通过<阿里云ROS资源编排服务>,将VPC.NAT Gateway.ECS创建,Hadoop和Spark部署过程自动化,使大家能够非常方便地部署一个Spark集群.本文创建的Spark集群包含三个节点:ma

《Hadoop MapReduce实战手册》一1.9 在分布式集群环境中运行WordCount程序

1.9 在分布式集群环境中运行WordCount程序 Hadoop MapReduce实战手册本节将描述如何在分布式集群中运行作业. 准备工作启动Hadoop集群. 操作步骤现在让我们在分布式的Hadoop环境中运行WordCount示例程序. 把你的Hadoop发行版目录的README.txt文件复制到HDFS文件系统的/data/input1位置,作为我们前一节中编写的WordCountMapReduce示例的输入数据. >bin/hadoopdfs -mkdir /data/ >bin/

spark1.6分布式集群环境搭建

1. 概述 本文是对spark1.6.0分布式集群的安装的一个详细说明,旨在帮助相关人员按照本说明能够快速搭建并使用spark集群.   2. 安装环境 本安装说明的示例环境部署如下: IP 外网IP hostname 备注 10.47.110.38 120.27.153.137 iZ237654q6qZ Master.Slaver 10.24.35.51 114.55.56.190 iZ23pd81xqaZ Slaver 10.45.53.136 114.55.11.55 iZ23mr5ukp

【干货】Apache Hadoop 2.8 完全分布式集群搭建超详细过程,实现NameNode HA、ResourceManager HA高可靠性

最近在自己的笔记本电脑上搭建了Apache Hadoop分布式集群,采用了最新的稳定版本2.8,并配置了NameNode.ResourceManager的HA高可用,方便日常对Hadoop的研究与测试工作.详细的搭建过程如下: 1.安装docker,创建docker容器,用于搭建hadoop节点 docker真是个好东西啊,当要在自己的笔记本上搭建分布式集群时,由于CPU.内存.磁盘有限,无法在VMware上虚拟出太多节点,这时使用docker创建几个容器,就能轻松搭建一个分布式集群了. (1)

MySQL分布式集群搭建

1.准备集群搭建环境 使用6台虚拟机来搭建MySQL分布式集群,相应的实验环境与对应的MySQL节点之间的对应关系如下图所示: 管理节点(MGM):这类节点的作用是管理MySQLCluster内的其他节点,如提供配置数据,并停止节点,运行备份等.由于这类节点负责管理其他节点的配置,应该在启动其他节点之前启动这类节点.MGM节点是用命令"ndb_mgmd"启动的: 数据节点(NDB):这类节点用于保存Cluster的数据,数据节点的数目与副本的数目相关,是片段的倍数.例如,对于两个副本,

《Hadoop MapReduce实战手册》一1.8 在分布式集群环境中设置Hadoop

1.8 在分布式集群环境中设置Hadoop Hadoop MapReduce实战手册 Hadoop的部署包括一套HDFS.一个JobTracker和多个TaskTracker.在1.5节中,我们讨论了HDFS的部署.为了设置Hadoop,我们需要配置JobTracker和TaskTracker,然后在HADOOP_ HOME/conf/slaves文件中指定TaskTracker列表.当我们启动JobTracker时,它会启动相应的TaskTracker节点列表.图1-5描述了一套完整的Hado

单机运行速度比集群运行速度快,求解释这个这个应用运行在集群运行这么耗时间的原因

问题描述 由于处理数据的需求,我写了一个简单的spark应用处理数据,本想着处理速度应该有很大的提高,然而结果令我难以接受!1spark集群运行条件:3个work节点,Hdfs文件管理系统,数据输入2.5G左右,运行时间大约8分钟.spark应用程序如下:packageexamples;importjava.util.List;importjava.util.regex.Pattern;importorg.apache.hadoop.io.IntWritable;importorg.apache

Elasticsearch与MongoDB 数据同步及分布式集群搭建

过River可以与多种数据源Wikipedia, MongoDB, CouchDB, RabbitMQ, RSS, Sofa, JDBC, FileSystem,Dropbox等同步,公司的业务是用 MongoDB,今天测试环境虚拟机上配置了一下Elasticsearch 与 MongoDB的同步,作个大概的过程记录,主要利用richardwilly98 / elasticsearch-river-mongodb.River通过读取mongodb的oplog来同步数据,oplog这个表来使集群中

hadoop伪分布式集群搭建与安装(ubuntu系统)

1:Vmware虚拟软件里面安装好Ubuntu操作系统之后使用ifconfig命令查看一下ip;  2:使用Xsheel软件远程链接自己的虚拟机,方便操作.输入自己ubuntu操作系统的账号密码之后就链接成功了: 3:修改主机的名称vi /etc/hostname和域名和主机映射对应的关系 vi /etc/hosts,改过之后即生效,自己可以ping一下,我这里ip对应master,比如ping master之后发现可以ping通即可: (centos操作系统修改主机名命令:vi /etc/sy

一脸懵逼学习Hadoop分布式集群HA模式部署(七台机器跑集群)

1)集群规划:主机名        IP      安装的软件                     运行的进程master    192.168.199.130   jdk.hadoop                     NameNode.DFSZKFailoverController(zkfc)slaver1    192.168.199.131    jdk.hadoop                       NameNode.DFSZKFailoverController(