1.spark在集群上运行应用的详细过程

(1)用户通过spark-submit脚本提交应用
(2)spark-submit脚本启动驱动器程序,调用用户定义的main()方法
(3)驱动器程序与集群管理器通信,申请资源以启动执行器节点
(4)集群管理器为驱动器程序启动执行器节点
(5)驱动器进程执行用户应用中的操作。根据程序中所定义的对RDD的转化操作和行动操作,驱动器节点把工作以任务的形式发送到执行器进程
(6)任务在执行器程序中进行计算并保存结果
(7)如果驱动器程序的main()方法退出,或者调用了SparkContext.stop(),驱动器程序会终止执行器进程,并且通过集群管理器释放资源
2.集群上运行的app和本地运行的区别
集群上运行的app,还没有指定master,而本地运行的app,指定了运行的主机master是“local”,即本地主机。以下是spark WordCount的程序实例,我们没有指定master,需要提交到集群上运行。
import scala.Tuple2;
import org.apache.spark.SparkConf;
import org.apache.spark.api.java.JavaPairRDD;
import org.apache.spark.api.java.JavaRDD;
import org.apache.spark.api.java.JavaSparkContext;
import org.apache.spark.api.java.function.FlatMapFunction;
import org.apache.spark.api.java.function.Function2;
import org.apache.spark.api.java.function.PairFunction; import java.util.Arrays;
import java.util.List;
import java.util.regex.Pattern; public final class WordCount {
private static final Pattern SPACE = Pattern.compile(" "); public static void main(String[] args) throws Exception { SparkConf sparkConf = new SparkConf().setAppName("JavaWordCount");//关键是没有指定master,需要提交到集群上运行
JavaSparkContext ctx = new JavaSparkContext(sparkConf);
JavaRDD<String> lines = ctx.textFile("C:\\test.txt", 1); JavaRDD<String> words = lines.flatMap(new FlatMapFunction<String, String>() {
public Iterable<String> call(String s) {
return Arrays.asList(SPACE.split(s));
}
}); JavaPairRDD<String, Integer> ones = words.mapToPair(new PairFunction<String, String, Integer>() {
public Tuple2<String, Integer> call(String s) {
return new Tuple2<String, Integer>(s, 1);
}
}); JavaPairRDD<String, Integer> counts = ones.reduceByKey(new Function2<Integer, Integer, Integer>() {
public Integer call(Integer i1, Integer i2) {
return i1 + i2;
}
}); List<Tuple2<String, Integer>> output = counts.collect();
for (Tuple2<?,?> tuple : output) {
System.out.println(tuple._1() + ": " + tuple._2());
}
ctx.stop();
}
}
3.使用spark-submit部署应用
(1)spark-submit的一般形式
bin/spark-submit [options] <app jar | python file> [app options] 
<app jar | python file>  表示包含应用入口的JAR包或者Python脚本
[app options]  是传给你的应用的选项
spark-submit的一些常见标记
标记 描述
--master 表示要连接的集群管理器
--deploy-mode 选择在本地启动驱动器程序,还是在集群中的一台工作节点机器上启动。在客户端模式下,spark-submit会将驱动器程序运行在spark-submit被调用的这台机器上。在集群模式下,驱动器程序会被传输并被执行于集群的一个工作节点上,默认是本地模式。
--class 运行Java或者Scala程序应用的主类
--name 应用的显示名,会显示在spark的网页用户界面中
--jars 需要上传并放在应用的CLASSPATH中的JAR包的雷彪。如果应用依赖于少量第三方的jar包,可以把它们放在这个参数中
--files 需要放在应用工作目录中的文件雷彪。这个参数一般用来放需要分发到各节点的数据文件
--py-files 需添加到PYTHONPATH中的文件的雷彪。其中可以包含.py /.egg以及.zip文件
--executor-memory 执行器进程使用的内存量,以字节为单位,可以使用后缀指定更大的单位,比如512M或者15g
--driver-memory 驱动器进程使用的内存量,以字节为单位。可以使用后缀指定更大的单位,比如512m或者15g
 
使用各种选项调用spark-submit
./bin/spark-submit 
--master spark:// hostname:7077 
--deploy-mode cluster
--class com.databricks.examples.SparkExample
--name "Example program"
--jars dep1.jar,dep2.jar,dep3.jar
--total-executor-core 300
--executor-memory 10g
4.选择合适的集群管理器
(1)如果是从零开始,可以先选择独立集群管理器。独立模式安装起来最简单,而且如果你只是使用spark的话,独立集群管理器提供与其他集群管理器完全一样的全部功能。
(2)如果你要在使用spark的同时使用其他应用,或者是要用到更丰富的资源调度功能(例如队列),那么YARN和Mesos都能满足你的需求。而在这两者中,对于大多数的hadoop发行版来说,一般YARN已经预装好了。
(3)Mesos相对于YARN和独立模式的一大优点在于其细粒度共享的选项,该选项可以将类似Spark shell这样的交互式应用中的不同命令分配到不同的CPU上。因此这对于多用户同时运行交互式shell的用例更有用处。
(4)在任何时候,最好把Spark运行在运行HDFS的节点还是那个,这样能快速访问存储。你可以自行在同样的节点上安装Mesos或独立集群管理器。如果使用YARN的话,大多数发行版已经把YARN和HDFS安装在了一起。
 
 
 
 
 
 
 
 

spark在集群上运行的更多相关文章

  1. 4. Spark在集群上运行

    *以下内容由<Spark快速大数据分析>整理所得. 读书笔记的第四部分是讲的是Spark在集群上运行的知识点. 一.Spark应用组件介绍 二.Spark在集群运行过程 三.Spark配置 ...

  2. Spark学习之在集群上运行Spark

    一.简介 Spark 的一大好处就是可以通过增加机器数量并使用集群模式运行,来扩展程序的计算能力.好在编写用于在集群上并行执行的 Spark 应用所使用的 API 跟本地单机模式下的完全一样.也就是说 ...

  3. Eclipse提交代码到Spark集群上运行

    Spark集群master节点:      192.168.168.200 Eclipse运行windows主机: 192.168.168.100 场景: 为了测试在Eclipse上开发的代码在Spa ...

  4. 在集群上运行Spark

    Spark 可以在各种各样的集群管理器(Hadoop YARN.Apache Mesos,还有Spark 自带的独立集群管理器)上运行,所以Spark 应用既能够适应专用集群,又能用于共享的云计算环境 ...

  5. [Spark Core] 在 Spark 集群上运行程序

    0. 说明 将 IDEA 下的项目导出为 Jar 包,部署到 Spark 集群上运行. 1. 打包程序 1.0 前提 搭建好 Spark 集群,完成代码的编写. 1.1 修改代码 [添加内容,判断参数 ...

  6. 将java开发的wordcount程序提交到spark集群上运行

    今天来分享下将java开发的wordcount程序提交到spark集群上运行的步骤. 第一个步骤之前,先上传文本文件,spark.txt,然用命令hadoop fs -put spark.txt /s ...

  7. 06、部署Spark程序到集群上运行

    06.部署Spark程序到集群上运行 6.1 修改程序代码 修改文件加载路径 在spark集群上执行程序时,如果加载文件需要确保路径是所有节点能否访问到的路径,因此通常是hdfs路径地址.所以需要修改 ...

  8. Spark学习之在集群上运行Spark(6)

    Spark学习之在集群上运行Spark(6) 1. Spark的一个优点在于可以通过增加机器数量并使用集群模式运行,来扩展程序的计算能力. 2. Spark既能适用于专用集群,也可以适用于共享的云计算 ...

  9. 在local模式下的spark程序打包到集群上运行

    一.前期准备 前期的环境准备,在Linux系统下要有Hadoop系统,spark伪分布式或者分布式,具体的教程可以查阅我的这两篇博客: Hadoop2.0伪分布式平台环境搭建 Spark2.4.0伪分 ...

随机推荐

  1. WiresShark 使用方法

    Wireshark(前称Ethereal)是一款功能强大的网络抓包分析工具,在我的工作中是不可或缺的一部分工具,往往在网络出现异常时,查看网络中的数据包,会豁然开朗.1.菜单栏  主菜单包括以下几个项 ...

  2. C#入门经典第四章-流程控制-1

    布尔类型:

  3. jquery has deprecated synchronous XMLHTTPRequest

    Like many others, my website is using jquery. When I open the developer tools, I see a warning that ...

  4. drawRect & 内存 -> 深究

    转载自:http://bihongbo.com/2016/01/03/memoryGhostdrawRect/ 在平日的开发中,随意覆盖drawRect方法,稍有不慎就会让你的程序内存暴增.下面我们来 ...

  5. STM32的优先级NVIC_PriorityGroupConfig的理解及其使用(转)

    源:http://blog.csdn.net/yx_l128125/article/details/9703843 写作原由:因为之前有对stm32 优先级做过研究,但是没时间把整理的东西发表,最近项 ...

  6. javascript第一篇----使用简介

    使用技巧 Javascript加入网页有两种方法:直接方式和引用方式. 直接方式 直接调用分为两种形式:代码块和代码行 代码行引用: <a href="javascript:alert ...

  7. webservice中采用协议Http,它是指什么意思

    webservice 协议 Web Service使用的是 SOAP (Simple Object Access Protocol)协议soap协议只是用来封装消息用的.封装后的消息你可以通过各种已有 ...

  8. Android 4.0 ICS SystemUI浅析——StatusBar结构分析

    Android 4.0 ICS SystemUI浅析——StatusBar结构分析 分类: Android2012-06-30 14:45 23687人阅读 评论(8) 收藏 举报 androidsi ...

  9. 单向链表(C#)

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.D ...

  10. Ubuntu安装MongoDB和PHP扩展

    MongoDB是一个可伸缩的,高性能的开源NoSQL 文档数据库.主要用C++开发完成.面向文档存储,全索引支持,可复制和高可用性,自动分片等特征.其在非关系型数据库中是功能最丰富,最像关系型数据库 ...