运行Spark程序的几种模式

一. 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 集群模式需要配置项:同(五)

时间: 2024-08-27 08:45:26

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

在linux环境下编译运行OpenCV程序的两种方法

原来以为在Ubuntu下安装好了OpenCV之后,自己写个简单的程序应该很容易吧,但是呢,就是为了编译一个简单的显示图片的程序我都快被弄崩溃了. 在谷歌和上StackOverFlow查看相关问题解答之后,我下面就介绍Command Line和CMake两种方式. 首先我先粘上我测试的代码吧,文件名为Test.c 1 #include <highgui.h> 2 3 int main(int argc,char ** argv) { 4 5 IplImage* img = cvLoadImage

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

首先,目标是写个python脚本,跑spark程序来统计hdfs中的一些数据.参考了别人的代码,故用了luigi框架. 至于luigi的原理 底层的一些东西Google就好.本文主要就是聚焦快速使用,知其然不知其所以然. python写Spark或mapreduce还有其他的方法,google上很多,这里用luigi只是刚好有参考的代码,而且理解起来还是简单,就用了. 上代码: import luigi, sysfrom datetime import datetime, timedeltafr

如何运行Spark程序

[[email protected] spark-2.0.2-bin-hadoop2.6]# ./bin/spark-submit --class org.apache.spark.examples.SparkPi --master local examples/jars/spark-examples_2.11-2.0.2.jar 注意在hxsyl下,在root下运行提示hdfs上的historyserverforSpark没有权限,擦,好奇怪啊,另外运行后在hdfs上查看结果spark的用户是

运行shell程序的3种方法

shell程序不需要编译成目标程序,因为它是解释执行的. 对于第一行#!/bin/bash,其中#表示该行是注释,!告诉shell运行/bin/bash并让/bin/bash去执行shell程序的内容. 1) 2) 3)使用chmod命令使shell程序变为可执行的,644(rw-r--r--) chmod u+x hello.sh ./hello.sh

java -jar运行spark程序找不到自己写的类的错误解决

错误信息: ..... 14/11/23 06:04:10 ERROR TaskSetManager: Task 2.0:1 failed 4 times; aborting job 14/11/23 06:04:10 INFO DAGScheduler: Failed to run sortByKey at Main.scala:29 Exception in thread "main" org.apache.spark.SparkException: Job aborted: Ta

linux环境下编译运行OpenCV程序的两种方法

一.命令行Command Line 1 g++ opencv_test.cpp -o opencv_test `pkg-config --cflags --libs opencv` 2 ./opencv_test test.jpg 备注:pkg-config选项--cflags 它是用来指定程序在编译时所需要头文件所在的目录--libs 则是指定程序在链接时所需要的动态链接库的目录 二.CMake工具编译 在程序同目录下创建CMakeLists.txt 1 #文件地址(下载源码安装包中):/op

记一次运行spark程序遇到的权限问题

设置回滚点在本地运行时正常,在集群时就报错,后来是发现ceshi这个目录其他用户没有写的权限,修改其他用户的权限就好了 hdfs dfs -chmod 777 /ceshi 原文地址:https://www.cnblogs.com/feifeicui/p/11018761.html

zeppelin中运行spark streaming kakfa &amp; 实时可视化

notebook方式运行spark程序是一种比较agile的方式,一方面可以体验像spark-shell那样repl的便捷,同时可以借助notebook的作图能力实现快速数据可视化,非常方便快速验证和demo.notebook有两种选择,一种是ipython notebook,主要针对pyspark:另一种是zeppelin,可以执行scala spark,pyspark以及其它执行引擎,包括hive等.比较而言,ipython notebook的可视化能力更强,zeppelin的功能更强.这里

Python中四种运行其他程序的方式

在Python中,可以方便地使用os模块来运行其他脚本或者程序,这样就可以在脚本中直接使用其他脚本或程序提供的功能,而不必再次编写实现该功能的代码.为了更好地控制运行的进程,可以使用win32process模块中的函数,如果想进一步控制进程,则可以使用ctype模块,直接调用kernel32.dll中的函数. [方式一]使用os.system()函数运行其他程序 os模块中的system()函数可以方便地运行其他程序或者脚本,模式如下: os.system(command) command: 要