一. local 模式 -- 所有程序都运行在一个JVM中,主要用于开发时测试
    无需开启任何服务,可直接运行 ./bin/run-example 或 ./bin/spark-submit 如:
    ./bin/run-example SparkPi 10
    ./bin/spark-submit --class org.apache.spark.examples.SparkPi --master local[4] ./examples/jars/spark-examples_2.11-2.1.1.jar 100
    local[4] 代表会有4个线程(每个线程一个core)来并发执行应用程序。

此模式下,
        1. 这个SparkSubmit进程又当爹、又当妈,既是客户提交任务的Client进程、又是Spark的driver程序、还充当着Spark执行Task的Executor角色
        2.程序的运行状态可通过 http://<driver-node>:4040 查看,但是这是临时的,程序运行完后,这个UI也就失效了。我们可以启动Spark History Server,这
    样就可以看到历史运行程序的信息了。

开启Spark History Server,可以在spark-defaults.conf里配置如下信息:
    spark.eventLog.enabled             true
    spark.eventLog.dir                 hdfs://ubuntu1:9000/spark/eventlog
    spark.history.fs.logDirectory      hdfs://ubuntu1:9000/spark/eventlog
    
    通过: 192.168.137.11:18080 访问 history server //如果启动history的话

二. 测试或实验性质的本地伪集群运行模式(单机模拟集群) -- 在单机启动多个进程来模拟集群下的分布式场景
    无需开启任何服务,可直接运行如下命令:
    ./bin/spark-submit --class org.apache.spark.examples.SparkPi --master local-cluster[2,3,512] ./examples/jars/spark-examples_2.11-2.1.1.jar 20
    local-cluster[x,y,z]参数:x代表要生成的executor数,y和z分别代表每个executor所拥有的core和memory数。
    遇到的问题:sc.executorMemory默认值是1024M,如果我们设置的z的值比1024小的话,就会抛错。可以在spark-defaults.conf 里配置sc.executorMemory的大小。如:
    spark.executor.memory              512m
    设置成512(单位M)的原因是:用的是本地VM,总共内存也没多少。但是如果设置小于450m的话,还是会报错。
    此模式下:SparkSubmit依然充当全能角色,又是Client进程,又是driver程序,还有点资源管理的作用
    
    
三. Spark自带Cluster Manager的Standalone Client模式(集群)
    需要先启动Spark的Master和Worker守护进程。提交一个任务的命令如下:
    ./bin/spark-submit --class org.apache.spark.examples.SparkPi --master spark://ubuntu1:7077 ./examples/jars/spark-examples_2.11-2.1.1.jar 100
    此模式下,1. 会在所有有Worker进程的节点上启动Executor来执行应用程序。
              2. Master进程做为cluster manager,用来对应用程序申请的资源进行管理;
              3. SparkSubmit 做为Client端和运行driver程序;
              4. 运行结果在Shell里可见
    注意,Worker进程生成几个Executor,每个Executor使用几个core,这些都可以在spark-env.sh里面配置

需要配置项:
    1. slaves 文件
    2. spark-env.sh
        export JAVA_HOME=/opt/programs/jdk1.8.0_131        
        export SPARK_MASTER_IP=ubuntu1
        export SPARK_WORKER_CORES=2
        export SPARK_EXECUTOR_MEMORY=512m
        export SPARK_WORKER_MEMORY=512m
        export SPARK_DRIVER_MEMORY=512m
    
    提交一个Spark程序后,可以通过下面的UI查看任务运行状态。
    UI: 192.168.137.11:8080
        192.168.137.11:18080 //如果启动history的话

四. spark自带cluster manager的standalone cluster模式(集群)
    需要先启动Spark的Master和Worker守护进程。提交一个任务的命令如下:
    ./bin/spark-submit --class org.apache.spark.examples.SparkPi --master spark://ubuntu1:7077 --deploy-mode cluster  ./examples/jars/spark-examples_2.11-2.1.1.jar 50
    此模式下,1. 客户端的SparkSubmit进程会在应用程序提交给集群之后就退出。所以在shell里,运行结果不可见
              2. Master会在集群中选择一个Worker进程生成一个子进程DriverWrapper来启动driver程序
              3. 而该DriverWrapper 进程会占用Worker进程的一个core,所以同样的资源下配置下,会比第3种运行模式,少用1个core来参与计算
              4. 应用程序的结果,会在执行driver程序的节点的stdout中输出
    
    需要配置项:同(三)

五. 基于YARN的Resource Manager的Client模式(集群)
    需要先启动 Hadoop 的 YARN。不需要启动Spark的Master、Worker守护进程。运行如下命令
    ./bin/spark-submit --class org.apache.spark.examples.SparkPi --master yarn --deploy-mode client  ./examples/jars/spark-examples_2.11-2.1.1.jar 100
    此模式下:1. 在Resource Manager节点上提交应用程序,会生成SparkSubmit进程,该进程会执行driver程序。
              2. RM会在集群中的某个NodeManager上,启动一个ExecutorLauncher进程,来做为ApplicationMaster
              3. 也会在多个NodeManager上生成CoarseGrainedExecutorBackend进程来并发的执行应用程序
              
    
    Yarn 集群模式需要配置项:
    1. spark-env.sh
    export JAVA_HOME=/opt/programs/jdk1.8.0_131    
    export HADOOP_HOME=/opt/programs/hadoop-2.7.3
    export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
    export YARN_CONF_DIR=$HADOOP_HOME/etc/hadoop
    export SPARK_HOME=/opt/programs/spark-2.1.1-bin-hadoop2.7

六. 基于YARN的Resource Manager的Cluster模式(集群)
    需要先启动 Hadoop 的 YARN。不需要启动Spark的Master、Worker守护进程。运行如下命令
    ./bin/spark-submit --class org.apache.spark.examples.SparkPi --master yarn --deploy-mode cluster  ./examples/jars/spark-examples_2.11-2.1.1.jar 100
    此模式下:1. 在Resource Manager端提交应用程序,会生成SparkSubmit进程,该进程只用来做Client端,应用程序提交给集群后,就会删除该进程。
              2. Resource Manager在集群中的某个NodeManager上运行ApplicationMaster,该AM同时会执行driver程序
              3. 紧接着,会在各NodeManager上运行CoarseGrainedExecutorBackend来并发执行应用程序
              4. 应用程序的结果,会在执行driver程序的节点的stdout中输出,而不是打印在屏幕上。
              
    
    Yarn 集群模式需要配置项:同(五)

运行Spark程序的几种模式的更多相关文章

  1. Django---Http协议简述和原理,HTTP请求码,HTTP请求格式和响应格式(重点),Django的安装与使用,Django项目的创建和运行(cmd和pycharm两种模式),Django的基础文件配置,Web框架的本质,服务器程序和应用程序(wsgiref服务端模块,jinja2模板渲染模块)的使用

    Django---Http协议简述和原理,HTTP请求码,HTTP请求格式和响应格式(重点),Django的安装与使用,Django项目的创建和运行(cmd和pycharm两种模式),Django的基 ...

  2. eclipse运行spark程序时日志颜色为黑色的解决办法

    自从开始学习spark计算框架以来,我们老师教的是local模式下用eclipse运行spark程序,然后我在运行spark程序时,发现控制台的日志颜色总是显示为黑色,哇,作为程序猿总有一种强迫症,发 ...

  3. 使用IDEA运行Spark程序

    使用IDEA运行Spark程序 1.安装IDEA 从IDEA官网下载Community版本,解压到/usr/local/idea目录下. tar –xzf ideaIC-13.1.4b.tar.gz ...

  4. 如何在本地使用scala或python运行Spark程序

    如何在本地使用scala或python运行Spark程序   包含两个部分: 本地scala语言编写程序,并编译打包成jar,在本地运行. 本地使用python语言编写程序,直接调用spark的接口, ...

  5. 周一02.3运行python程序的两种方式

    一.运行python程序的两种方式 方法一:交互式:                     优点:输入一行代码立刻返回结果                      缺点:无法永久保存代码 方法二: ...

  6. Hadoop:开发机运行spark程序,抛出异常:ERROR Shell: Failed to locate the winutils binary in the hadoop binary path

    问题: windows开发机运行spark程序,抛出异常:ERROR Shell: Failed to locate the winutils binary in the hadoop binary ...

  7. Spark中的两种模式

    两种模式 client-了解 cluster模式-开发使用 操作 1.需要Yarn集群 2.历史服务器 3.提交任务的的客户端工具-spark-submit命令 4.待提交的spark任务/程序的字节 ...

  8. 如何运行Spark程序

    [hxsyl@CentOSMaster spark-2.0.2-bin-hadoop2.6]# ./bin/spark-submit --class org.apache.spark.examples ...

  9. luigi框架--关于python运行spark程序

    首先,目标是写个python脚本,跑spark程序来统计hdfs中的一些数据.参考了别人的代码,故用了luigi框架. 至于luigi的原理 底层的一些东西Google就好.本文主要就是聚焦快速使用, ...

随机推荐

  1. Redis之java增删改查

    jedis是java的redis客户端实现,要使用jedis须要加入jedis的maven依赖: <dependency> <groupId>redis.clients< ...

  2. debian支持的系统架构介绍

    debian系统支持类型有armel.armhf.i386.amd64.mips.mipsel, powerpc.sparc.s390.s390x等. 详细对比文章见https://www.debia ...

  3. poj1328 Radar Installation —— 贪心

    题目链接:http://poj.org/problem?id=1328 题解:区间选点类的题目,求用最少的点以使得每个范围都有点存在.以每个点为圆心,r0为半径,作圆.在x轴上的弦即为雷达可放置的范围 ...

  4. Spring Boot2.0之 整合JDBC

    很入门的知识,大家了解下就OK maven配置文件pom: spring: datasource: url: jdbc:mysql://localhost:3306/test username: ro ...

  5. Contiki clock模块

    一.functions for handling system time clock_time_t clock_time(void);//return the current system time ...

  6. Uncaught TypeError: Illegal invocation解决

    jquery中报了这个错,仔细一看,有个使用ajax的地方,其中有个参数是从页面某个文本框获取的,本应该 $('#id').value ,被我写成了 $('id') .所以报错,目前已解决.

  7. css(3)

    行内元素和块内元素可以通过定义display的属性值进行相互转换. 想要叫ul中的li实现横向显示可以在li中加入布局"float:left": 如: /*这个用于控制单个图片区域 ...

  8. Jmeter-JDBC Request

    1.  新建一个测试计划 2.  新建一个线程组 3.  创建数据库连接 4.配置数据库连接 5.添加JDBC Request 6.添加监听器

  9. linux网络编程 inet_aton(); inet_aton; inet_addr;

    . inet_aton()是一个改进的方法来将一个字符串IP地址转换为一个32位的网络序列IP地址. . inet_ntoa() 本函数将一个用in参数所表示的Internet地址结构转换成以“.” ...

  10. CentOS 性能监控之nmon

    工具集: Nmon  性能数据收集分析工具Nmon analyser 性能数据分析工具,excel文件nmon_x86_sles10  Nmon在x86_sles10下二进制执行文件 nmon概述 n ...