SparkContext和spark-shell


参考官网:

http://spark.apache.org/docs/latest/rdd-programming-guide.html#overview

SparkContext&SparkConf

在这里插入图片描述
SparkContext 可以想象成一个框,里面什么都可以放,放了之后,我们要什么直接去拿就行了。
如果要使用一个spark程序,第一件事就是创建一个SparkContext对象 。
SparkContext会告诉spark如何去连接集群。
在这里插入图片描述
创建SparkContext,首先还要构建一个 SparkConf对象 。
SparkConf包含了应用程序的信息。比如应用程序的名称、需要多少core、需要多少memory等。
在这里插入图片描述
在每个JVM里面,只有一个SparkContext 是active状态。如果你要创建一个新的,需要把之前的SparkContext 先stop掉。

In practice, when running on a cluster, you will not want to hardcode master in the program, but rather launch the application with spark-submit and receive it there. However, for local testing and unit tests, you can pass “local” to run Spark in-process.
不要在程序中试图去硬编码,比如不要这样:val conf = new SparkConf().setAppName(appName).setMaster(“local[2]”)。要用spark-submit这样的方式去设置。对于本地测试和单元测试,你可以通过本地去运行进程中的spark。
①开发的时候尽可能的使用local模式。②在生产上,一定不要硬编码我们的master,而是要把这个master通过spark的spark-submit的方式给它提交上去。这样的话,同一份代码,既可以跑在standalone上面,也可以跑在yarn、Mesos上面,而且不需要做任何代码的修改。

使用IDEA构建Spark应用程序

现在来创建一个maven项目
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
确定后等一下,会build
在这里插入图片描述
然后把相关东西删掉,最后剩这些:
在这里插入图片描述
在这里插入图片描述
如果想用IDEA去看spark源码,那么可以把它的包导进来,或者把源码导进来。
现在用maven把它的dependency加入进来。看官网描述:
在这里插入图片描述
你如果想要写一个spark程序,你需要添加一个spark的Maven 依赖。另外你如果需要访问HDFS集群,你需要添加hadoop-client for your version of HDFS的依赖,不需要则不用。最后你需要在程序中把spark的类导入进来。

import org.apache.spark.SparkContext
import org.apache.spark.SparkConf

这里我添加的是:

    <dependency>
      <groupId>org.apache.spark</groupId>
      <artifactId>spark-core_2.11</artifactId>
      <version>2.4.0</version>
    </dependency>

然后在包下面创建一个scala的object
在这里插入图片描述
构建SparkContext的代码如下:

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

object SparkContextApp {
  def main(args: Array[String]): Unit = {
    val SparkConf = new SparkConf().setAppName("SparkContextApp").setMaster("local[2]").set("spark.app.id","st-partition-id")
    val sc = new SparkContext(SparkConf)

     ///中间是你要写的业务逻辑

    sc.stop()
  }
}

spark-shell参数使用深度详解

Spark的shell作为一个强大的交互式数据分析工具,提供了一个简单的方式学习API。它可以使用Scala(在Java虚拟机上运行现有的Java库的一个很好方式)或Python。在Spark目录里使用下面的方式开始运行:./bin/spark-shell

如何使用spark-shell?

查看命令帮助: ./spark-shell --help
在这里插入图片描述
在这里插入图片描述

spark-shell重要参数

–master
上面已经讲到,不建议采用硬编码的方式来指定我们的master,而应该采用spark-submit提交的时候来指定。

–name 指定应用程序的名称

–jars jar之间用逗号分开

–conf 可以指定spark配置的一些参数

–driver-** 可以有memory、java-options、library-path、class-path

–executor-memory

–executor-cores

–driver-cores

–queue 队列,生产上都是以队列的方式进行提交

–num-executors 执行端的个数

举例:

[hadoop@hadoop001 bin]$ ./spark-shell --master local[2]   //本地   两个core
....... WARN NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable  //不能读取本地的library,比如snappy、lzo等,因为没有配置,也没有编译,所以没有
Setting default log level to "WARN".   //默认的日志级别是WARN,但是是可以设置的
To adjust logging level use sc.setLogLevel(newLevel). For SparkR, use setLogLevel(newLevel).
Spark context Web UI available at http://hadoop001:4040    //这里是Web UI的地址
Spark context available as 'sc' (master = local[2], app id = local-1558707773428).   //这个Spark context可以访问的到,它的别名是sc,它所指向的master是 local[2],对应的app id是...
Spark session available as 'spark'.
Welcome to
      ____              __
     / __/__  ___ _____/ /__
    _\ \/ _ \/ _ `/ __/  '_/
   /___/ .__/\_,_/_/ /_/\_\   version 2.4.2   //Spark版本
      /_/
         
Using Scala version 2.11.12 (Java HotSpot(TM) 64-Bit Server VM, Java 1.8.0_45)  //自己使用的Scala版本
Type in expressions to have them evaluated.
Type :help for more information.

scala> 

一个spark shell 其实就是一个spark应用程序。一个spark应用程序用的必然是Spark context。
访问http://hadoop001:4040 这个地址:
在这里插入图片描述
在这里插入图片描述
上面启动的时候并没有设置AppName。
上图里面的 Spark shell application UI 里的Spark shell 的来源是哪里?
看一下bin/spark-shell.sh脚本就知道了。
可以在./spark-shell --master local --name SparkTest 这里指定它的名称(shell命令行里)。
或者 val SparkConf = new SparkConf().setAppName(“SparkContextApp”)(IDEA里)
指定了之后Web UI上就变化了:
在这里插入图片描述
spark.app.id = local-1558745475939 这个是怎么来的?
local模式:local开头,后面跟的是当前时间的时间戳
yarn模式:Application开头

spark.app.id 的来源:
看源码:TaskScheduler.applicationId()
程序的唯一标识,在创建SparkContext时设置(TaskScheduler启动后立即生成)
在这里插入图片描述
ava.io.tmpdir
java.io.tmpdir这个参数是做什么的?
The default temporary-file directory is specified by the system property java.io.tmpdir.
操作系统缓存的临时目录,不同操作系统的缓存临时目录不一样, 在Windows的缓存目录为:C:\Users\登录用户~1\AppData\Local\Temp\, Linux为:/tmp
可以这样修改:java -Djava.io.tmpdir=/path/to/tmpdir
生产上这个参数肯定是要调整的。

spark on yarn提交作业时,大量的jar包传上去,开销很大,spark on yarn 提交的时候的优化点??

In the Spark shell, a special interpreter-aware SparkContext is already created for you, in the variable called sc. Making your own SparkContext will not work. 在上面启动的spark shell里,它会自动感知,会自动给你创建一个SparkContext,在shell里面,你自己再创建的话是不能工作的。
启动spark-shell之后,在里边再创建一个sparkcontext会报错:org.apache.spark.SparkException: Only one SparkContext may be running in this JVM。

猜你喜欢

转载自blog.csdn.net/liweihope/article/details/90521789
今日推荐