spark -- on yarn模式 Spark参数详解 IDEA编写Spark程序

spark on yarn 

 

Spark on yarn:Spark 使用了 yarn 管理器。Spark 运行在 YARN 上时,不需要启动 Spark 集群,只需要启动 YARN 即可, YARN 的 ResourceManager 相当于 Spark Standalone 模式下的 Master。

spark中的两种模式(Cluster和Client)

Cluster和Client模式最本质的区别是:Driver程序运行在哪里

运行在YARN集群中就是Cluster模式,

运行在客户端就是Client模式

当然还有由本质区别延伸出来的区别,面试的时候能简单说出几点就行

●cluster模式:生产环境中使用该模式

1.Driver程序在YARN集群中

2.应用的运行结果不能在客户端显示

3.该模式下Driver运行ApplicattionMaster这个进程中,如果出现问题,yarn会重启ApplicattionMaster(Driver)

 

●client模式:

1.Driver运行在Client上的SparkSubmit进程中

2.应用程序运行结果会在客户端显示

​​​​​cluster模式

●说明

在企业生产环境中大部分都是cluster部署模式运行Spark应用

Spark On YARN的Cluster模式 指的是Driver程序运行在YARN集群上

●补充Driver是什么:

运行应用程序的main()函数并创建SparkContext的进程

●图解

spark -- on yarn模式 Spark参数详解 IDEA编写Spark程序_第1张图片

●运行示例程序

spark-shell是一个简单的用来测试的交互式窗口

spark-submit用来提交打成jar包的任务

/export/servers/spark-2.2.0-bin-2.6.0-cdh5.14.0/bin/spark-submit \
--class org.apache.spark.examples.SparkPi \
--master yarn \
--deploy-mode cluster \
--driver-memory 1g \
--executor-memory 1g \
--executor-cores 2 \
--queue default \
/export/servers/spark-2.2.0-bin-2.6.0-cdh5.14.0/examples/jars/spark-examples_2.11-2.2.0.jar \
10

 ●查看界面

http://node01:8088/cluster

spark -- on yarn模式 Spark参数详解 IDEA编写Spark程序_第2张图片

client模式

●说明

Spark On YARN的Client模式 指的是Driver程序运行在提交任务的客户端

图解

spark -- on yarn模式 Spark参数详解 IDEA编写Spark程序_第3张图片

运行示例程序

/export/servers/spark-2.2.0-bin-2.6.0-cdh5.14.0/bin/spark-submit \
--class org.apache.spark.examples.SparkPi \
--master yarn \
--deploy-mode client \
--driver-memory 1g \
--executor-memory 1g \
--executor-cores 2 \
--queue default \
/export/servers/spark-2.2.0-bin-2.6.0-cdh5.14.0/examples/jars/spark-examples_2.11-2.2.0.jar \
10

 

Spark参数详解

spark-shell

spark-shell是Spark自带的交互式Shell程序,方便用户进行交互式编程,用户可以在该命令行下可以用scala编写spark程序,适合学习测试时使用!

●示例

spark-shell可以携带参数

spark-shell --master local[N] 数字N表示在本地模拟N个线程来运行当前任务

spark-shell --master local[*] *表示使用当前机器上所有可用的资源

默认不携带参数就是--master local[*]

spark-shell --master spark://node01:7077,node02:7077 表示运行在集群上

spark-submit

spark-submit命令用来提交jar包给spark集群/YARN

spark-shell交互式编程确实很方便我们进行学习测试,但是在实际中我们一般是使用IDEA开发Spark应用程序打成jar包交给Spark集群/YARN去执行。

spark-submit命令是我们开发时常用的!!!

参数总结

Master参数形式

Master形式

解释

local

本地以一个worker线程运行(例如非并行的情况).

local[N]

本地以K worker 线程 (理想情况下, N设置为你机器的CPU核数).

local[*]

本地以本机同样核数的线程运行.

spark://HOST:PORT

连接到指定的Spark standalone cluster master. 端口是你的master集群配置的端口,缺省值为7077.

mesos://HOST:PORT

连接到指定的Mesos 集群. Port是你配置的mesos端口, 默认5050. 或者使用ZK,格式为 mesos://zk://....

yarn-client

以client模式连接到YARN cluster. 集群的位置基于HADOOP_CONF_DIR 变量找到.

yarn-cluster

以cluster模式连接到YARN cluster. 集群的位置基于HADOOP_CONF_DIR 变量找到.

其他参数示例

--master spark://node01:7077    指定 Master 的地址

--name "appName"                 指定程序运行的名称

--class                           程序的main方法所在的类

--jars  xx.jar                    程序额外使用的 jar 包

--driver-memory 512m             Driver运行所需要的内存, 默认1g

--executor-memory 2g             指定每个 executor 可用内存为 2g, 默认1g

--executor-cores 1               指定每一个 executor 可用的核数

--total-executor-cores 2         指定整个集群运行任务使用的 cup 核数为 2 个

 --queue default   指定任务的对列

--deploy-mode 指定运行模式(client/cluster)

注意

如果 worker 节点的内存不足,那么在启动 spark-submit的时候,就不能为 executor分配超出 worker 可用的内存容量。

如果--executor-cores超过了每个 worker 可用的 cores,任务处于等待状态。

如果--total-executor-cores即使超过可用的 cores,默认使用所有的。以后当集群其他的资源释放之后,就会被该程序所使用。

如果内存或单个 executor 的 cores 不足,启动 spark-submit 就会报错,任务处于等待状态,不能正常执行。

 

IDEA编写Spark程序

pom.xml

1.创建Maven项目并补全目录、配置pom.xml



    4.0.0
 
    cn.itcast
    SparkDemo
    1.0-SNAPSHOT
 
    
    
        
            aliyun
            http://maven.aliyun.com/nexus/content/groups/public/
        
        
            cloudera
            https://repository.cloudera.com/artifactory/cloudera-repos/
        
        
            jboss
            http://repository.jboss.com/nexus/content/groups/public
        
    
    
        1.8
        1.8
        UTF-8
        2.11.8
        2.11
        2.7.4
        2.2.0
    
    
        
            org.scala-lang
            scala-library
            ${scala.version}
        
        
            org.apache.spark
            spark-core_2.11
            ${spark.version}
        
        
            org.apache.spark
            spark-sql_2.11
            ${spark.version}
        
        
            org.apache.spark
            spark-hive_2.11
            ${spark.version}
        
        
            org.apache.spark
            spark-hive-thriftserver_2.11
            ${spark.version}
        
        
            org.apache.spark
            spark-streaming_2.11
            ${spark.version}
        
        
        
            org.apache.spark
            spark-streaming-kafka-0-10_2.11
            ${spark.version}
        
        
            org.apache.spark
            spark-sql-kafka-0-10_2.11
            ${spark.version}
        
 
        
 
        
            org.apache.hadoop
            hadoop-client
            2.7.4
        
        
            org.apache.hbase
            hbase-client
            1.3.1
        
        
            org.apache.hbase
            hbase-server
            1.3.1
        
        
            com.typesafe
            config
            1.3.3
        
        
            mysql
            mysql-connector-java
            5.1.38
        
    
 
    
        src/main/scala
        src/test/scala
        
            
            
                org.apache.maven.plugins
                maven-compiler-plugin
                3.5.1
            
            
            
                net.alchim31.maven
                scala-maven-plugin
                3.2.2
                
                    
                        
                            compile
                            testCompile
                        
                        
                            
                                -dependencyfile
                                ${project.build.directory}/.scala_dependencies
                            
                        
                    
                
            
            
                org.apache.maven.plugins
                maven-surefire-plugin
                2.18.1
                
                    false
                    true
                    
                        **/*Test.*
                        **/*Suite.*
                    
                
            
            
                org.apache.maven.plugins
                maven-shade-plugin
                2.3
                
                    
                        package
                        
                            shade
                        
                        
                            
                                
                                    *:*
                                    
                                        META-INF/*.SF
                                        META-INF/*.DSA
                                        META-INF/*.RSA
                                    
                                
                            
                            
                                
                                    
                                
                            
                        
                    
                
            
        
    

本地运行

package cn.itcast.sparkhello

import org.apache.spark.rdd.RDD
import org.apache.spark.{SparkConf, SparkContext}


object WordCount {
  def main(args: Array[String]): Unit = {
    //1.创建SparkContext
    val config = new SparkConf().setAppName("wc").setMaster("local[*]")
    val sc = new SparkContext(config)
sc.setLogLevel("WARN")
    //2.读取文件
    //A Resilient Distributed Dataset (RDD)弹性分布式数据集
    //可以简单理解为分布式的集合,但是spark对它做了很多的封装,
    //让程序员使用起来就像操作本地集合一样简单,这样大家就很happy了
    val fileRDD: RDD[String] = sc.textFile("D:\\授课\\190429\\资料\\data\\words.txt")
    //3.处理数据
    //3.1对每一行按空切分并压平形成一个新的集合中装的一个个的单词
    //flatMap是对集合中的每一个元素进行操作,再进行压平
    val wordRDD: RDD[String] = fileRDD.flatMap(_.split(" "))
    //3.2每个单词记为1
    val wordAndOneRDD: RDD[(String, Int)] = wordRDD.map((_,1))
    //3.3根据key进行聚合,统计每个单词的数量
    //wordAndOneRDD.reduceByKey((a,b)=>a+b)
    //第一个_:之前累加的结果
    //第二个_:当前进来的数据
    val wordAndCount: RDD[(String, Int)] = wordAndOneRDD.reduceByKey(_+_)
    //4.收集结果
    val result: Array[(String, Int)] = wordAndCount.collect()
    result.foreach(println)
  }
}

集群运行

package cn.itcast.sparkhello

import org.apache.spark.rdd.RDD
import org.apache.spark.{SparkConf, SparkContext}


object WordCount {
  def main(args: Array[String]): Unit = {
    //1.创建SparkContext
    val config = new SparkConf().setAppName("wc")//.setMaster("local[*]") 
    val sc = new SparkContext(config)
    sc.setLogLevel("WARN")
    //2.读取文件
    //A Resilient Distributed Dataset (RDD)弹性分布式数据集
    //可以简单理解为分布式的集合,但是spark对它做了很多的封装,
    //让程序员使用起来就像操作本地集合一样简单,这样大家就很happy了
    val fileRDD: RDD[String] = sc.textFile(args(0)) //文件输入路径
    //3.处理数据
    //3.1对每一行按空切分并压平形成一个新的集合中装的一个个的单词
    //flatMap是对集合中的每一个元素进行操作,再进行压平
    val wordRDD: RDD[String] = fileRDD.flatMap(_.split(" "))
    //3.2每个单词记为1
    val wordAndOneRDD: RDD[(String, Int)] = wordRDD.map((_,1))
    //3.3根据key进行聚合,统计每个单词的数量
    //wordAndOneRDD.reduceByKey((a,b)=>a+b)
    //第一个_:之前累加的结果
    //第二个_:当前进来的数据
    val wordAndCount: RDD[(String, Int)] = wordAndOneRDD.reduceByKey(_+_)
    wordAndCount.saveAsTextFile(args(1))//文件输出路径
   //4.收集结果
   //val result: Array[(String, Int)] = wordAndCount.collect()
   //result.foreach(println)
  }
}

打包,上传

执行命令提交到Spark-HA集群

/export/servers/spark-2.2.0-bin-2.6.0-cdh5.14.0/bin/spark-submit \
--class cn.itcast.sparkhello.WordCount \
--master spark://node01:7077,node02:7077 \
--executor-memory 1g \
--total-executor-cores 2 \
/root/wc.jar \
hdfs://node01:8020/aa.txt \
hdfs://node01:8020/cc

执行命令提交到YARN集群

/export/servers/spark-2.2.0-bin-2.6.0-cdh5.14.0/bin/spark-submit \
--class cn.itcast.sparkhello.WordCount \
--master yarn \
--deploy-mode cluster \
--driver-memory 1g \
--executor-memory 1g \
--executor-cores 2 \
--queue default \
/root/wc.jar \
hdfs://node01:8020/wordcount/input/words.txt \
hdfs://node01:8020/wordcount/output5

 

你可能感兴趣的:(Spark,spark)