在Spark中,支持4种运行模式:
- 1)Local:开发时使用
- 2)Standalone: 是Spark自带的,如果一个集群是Standalone的话,那么就需要在多台机器上同时部署Spark环境
- 3)YARN:建议大家在生产上使用该模式,统一使用YARN进行整个集群作业(MR、Spark)的资源调度
- 4)Mesos
不管使用什么模式,Spark应用程序的代码是一模一样的,只需要在提交的时候通过–master参数来指定我们的运行模式即可
1、Local模式下
提交Spark Application到环境中运行。如果要写入数据库数据则需要加上 --jars
1、该模式操作路径在本地的数据
spark-submit \
--name SparkSessionApp \
--class com.imooc.spark.SparkSessionApp \
--jars /www/lib/mysql-connector-java-5.1.25.jar \
--master local[2] \
/www/lib/sql-1.0.jar \
/www/instl/spark/spark-2.1.0-bin-2.6.0-cdh5.7.0/examples/src/main/resources/people.json
2、该模式操作路径在hdfs上的数据
spark-submit \
--name SparkSessionApp \
--class com.imooc.spark.SparkSessionApp \
--jars /www/lib/mysql-connector-java-5.1.25.jar \
--master local[2] \
/www/lib/sql-1.0.jar \
hdfs://hadoop001:8020/inputfile/people.json
2、YARN模式
如果想运行在YARN之上,ResourceManager的地址从Hadoop配置中获取。因此必须要设置HADOOP_CONF_DIR或者是YARN_CONF_DIR。即为spark配置上hadoop路径下直到/etc/hadoop
的路径
-
方式 1:直接导出方式 export HADOOP_CONF_DIR=/www/instl/hadoop/hadoop-2.6.0-cdh5.9.3/etc/hadoop
-
方式2:在 $SPARK_HOME/conf/spark-env.sh 中配置上hadoop路径下直到/etc/hadoop 的路径
HADOOP_CONF_DIR=/www/instl/hadoop/hadoop-2.6.0-cdh5.7.0/etc/hadoop
YARN 模式运行的两种方式
(1)Client 模式特点:(YARN默认模式)
- a. Driver运行在Client端(提交Spark作业的机器)
- b.Client会和请求到的Container进行通信来完成作业的调度和执行,Client是不能退出的
- c…日志信息会在控制台输出:便于我们测试
- d.命令如
如果要写入数据库数据则需要加上 --jars ,如果需要引入文件,需要加上 --file
1、该模式操作路径在hdfs上的数据.(参数路径不加hdfs://hadoop001:8020 时,默认加上这路径)
spark-submit \
--name SparkSessionApp \
--class com.imooc.spark.SparkSessionApp \
--jars /www/lib/mysql-connector-java-5.1.25.jar \
--master yarn-client \
--executor-memory 1G \
--num-executors 1 \
--conf spark.sql.shuffle.partitions=100 \
--files /www/lib/ipDatabase.csv,/home/hadoop/lib/ipRegion.xlsx \
/www/lib/sql-1.0-jar-with-dependencies.jar \
hdfs://hadoop001:8020/inputfile/access.log hdfs://hadoop001:8020/outputfile/clean
2、该模式操作路径在本地数据,需要加上file:// 标识
spark-submit \
--name SparkSessionApp \
--class com.imooc.spark.SparkSessionApp \
--jars /www/lib/mysql-connector-java-5.1.25.jar \
--master yarn-client \
--executor-memory 1G \
--num-executors 1 \
--conf spark.sql.shuffle.partitions=100 \
--files /www/lib/ipDatabase.csv,/www/lib/ipRegion.xlsx \
/www/lib/sql-1.0-jar-with-dependencies.jar \
file:///www/data/outputfile/access.log file:///www/data/outputfile/clean
3、不参与操作路径资源
spark-submit \
--class org.apache.spark.examples.SparkPi \
--master yarn-client \
--executor-memory 1G \
--num-executors 1 \
/www/instl/spark/spark-2.1.0-bin-2.6.0-cdh5.7.0/examples/jars/spark-examples_2.11-2.1.0.jar \
4
(2)Cluster模式特点:
- a.Driver运行在ApplicationMaster中
- b.Client只要提交完作业之后就可以关掉,因为作业已经在YARN上运行了
- c.日志是在终端看不到的,因为日志是在Driver上,只能通过yarn logs -applicationId application_id (命令: yarn logs -applicationId application_1495632775836_0002 需要开通日志聚合功能服务),也可以在界面上查看结果:
- d.命令如:(仅 master 后模式进行改变)
如果要写入数据库数据则需要加上 --jars ,如果需要引入文件,需要加上 --file
1、该模式操作路径在hdfs上的数据(参数路径不加hdfs://hadoop001:8020 时,默认加上这路径)
spark-submit \
--name SparkSessionApp \
--class com.imooc.spark.SparkSessionApp \
--jars /www/lib/mysql-connector-java-5.1.25.jar \
--master yarn-cluster \
--executor-memory 1G \
--num-executors 1 \
--conf spark.sql.shuffle.partitions=100 \
--files /www/lib/ipDatabase.csv,/www/lib/ipRegion.xlsx \
/www/lib/sql-1.0-jar-with-dependencies.jar \
hdfs://hadoop001:8020/inputfile/access.log hdfs://hadoop001:8020/outputfile/clean
2、该模式操作路径在本地数据,需要加上file:// 标识
spark-submit \
--name SparkSessionApp \
--class com.imooc.spark.SparkSessionApp \
--jars /www/lib/mysql-connector-java-5.1.25.jar \
--masteryarn-cluster \
--executor-memory 1G \
--num-executors 1 \
--conf spark.sql.shuffle.partitions=100 \
--files /www/lib/ipDatabase.csv,/home/hadoop/lib/ipRegion.xlsx \
/www/lib/sql-1.0-jar-with-dependencies.jar \
file:///www/data/outputfile/access.log file:///www/data/outputfile/clean
3、不参与操作路径资源
spark-submit \
--class org.apache.spark.examples.SparkPi \
--masteryarn-cluster \
--executor-memory 1G \
--num-executors 1 \
--conf spark.sql.shuffle.partitions=100 \
/www/instl/spark/spark-2.1.0-bin-2.6.0-cdh5.7.0/examples/jars/spark-examples_2.11-2.1.0.jar \
4
注意:不同模式参数路径读取路径位置
在不同的启动模式下,加载文件时的参数路径写法是不一样的,对于local模式下,默认就是读取本地文件,而在standlone或者yarn-client,或者yarn-cluster模式下,默认读的都是hdfs文件系统】, 这几种模式下很难读取本地文件(这是很显然的事情,但你可以通过指定节点的文件服务曲线救国)。
下面的代码在local模式下有效,在其它模式下无效:
var theP1 = sc.textFile("file:///usr/test/people.json") //读取本地
var theP2 = sc.textFile("hdfs://master.hadoop/user/root/test/test/people.json") //读取hdfs文件
下面的代码在非local模式下,都是读取的hdfs,file://模式无效.
var theP1 = sc.textFile("/usr/test/people.json")
var theP2 = sc.textFile("/user/root/test/test/people.json")
下面这个语句在几种模式下都有效
var theP2 = sc.textFile("hdfs://master.hadoop/user/root/test/test/people.json") //读取hdfs文件
在非local模式下等同于
var theP2 = sc.textFile("/user/root/test/test/people.json")