SparkContext、SparkConf和SparkSession之间的联系及其初始化

参考博客:https://blog.csdn.net/love666666shen/article/details/79260944

1、 SparkConf和SparkContext

每个Spark应用程序都需要一个Spark环境,这是Spark RDD API的主要入口点。Spark Shell提供了一个名为“sc”的预配置Spark环境和一个名为“spark”的预配置Spark会话。使用Spark Shell的时候,本身是预配置了sc,即SparkConf和SparkContext的,但是在实际使用编辑器编程过程中是需要设置这些配置的。配置代码如下:

val conf = new SparkConf().setMaster("master").setAppName("appName1")
val sc = new SparkContext(conf)  //或者val sc = new SparkContext("master","appName1")

setMaster主要是连接主节点,如果参数是”local”,则在本地用单线程运行spark,如果是 local[4],则在本地用4核运行,如果设置为spark://master:7077,就是作为单节点运行,而setAppName就是在web端显示应用名而已,它们说到底都调用了set()函数。
 

2、SparkSession

SparkSession实质上是SQLContext和HiveContext的组合(未来可能还会加上StreamingContext),所以在SQLContext和HiveContext上可用的API在SparkSession上同样是可以使用的。

2.1 SparkSession的简单示例

SparkSession内部封装了SparkContext,所以计算实际上是由SparkContext完成的。

val sparkSession = SparkSession.builder
                    .master("master")
                    .appName("appName")
                    .getOrCreate()
//或者SparkSession.builder.config(conf=SparkConf())

上面代码类似于创建一个SparkContext,master设置为”master”,然后创建了一个SQLContext封装它。

2.2 创建支持Hive的SparkSession

如果你想创建hiveContext,可以使用下面的方法来创建SparkSession,以使得它支持Hive(HiveContext):

val sparkSession = SparkSession.builder
                    .master("master")
                    .appName("appName")
                    .enableHiveSupport()
                    .getOrCreate()
//sparkSession 从csv读取数据:
val dq = sparkSession.read.option("header", "true").csv("src/main/resources/scala.csv")

上面代码中的getOrCreate()方法表示有就拿过来,没有就创建。

3、Spark应用框架

è¿éåå¾çæè¿°

客户Spark程序(Driver Program)操作Spark集群是通过SparkContext对象来进行,SparkContext作为一个操作和调度的总入口,在初始化过程中集群管理器会创建DAGScheduler作业调度和TaskScheduler任务调度。 
DAGScheduler作业调度模块是基于Stage的高层调度模块,DAG全称 Directed Acyclic Graph,有向无环图。简单的来说,就是一个由顶点和有方向性的边构成的图中,从任意一个顶点出发,没有任何一条路径会将其带回到出发的顶点。它为每个Spark Job计算具有依赖关系的多个Stage任务阶段(通常根据Shuffle来划分Stage,如groupByKey, reduceByKey等涉及到shuffle的transformation就会产生新的stage),然后将每个Stage划分为具体的一组任务,以TaskSets的形式提交给底层的任务调度模块来具体执行。TaskScheduler任务调度模块负责启动任务,监控和汇报任务运行情况。

创建SparkContext一般要经过下面几个步骤: 
a). 导入Spark的类和隐式转换 
import org.apache.spark.{SparkContext, SparkConf} 
import org.apache.spark.SparkContext._

b). 构建Spark应用程序的应用信息对象SparkConf 
val conf = new SparkConf().setAppName(appName).setMaster(master_url)

c). 利用SparkConf对象来初始化SparkContext 
val sc = new SparkContext(conf)

d). 创建RDD、执行相应的Transformation和Action并得到最终结果。

e). 关闭Context 
在完成代码的编写和测试后,使用spark-submit来提交应用的jar包。spark-submit的命令行参考如下: 
Spark的运行模式取决于传递给SparkContext的master环境变量的值。master-url可以是以下任一种形式: 
local 使用一个Worker线程本地化运行Spark(完全不并行) 
local[*] 使用逻辑CPU数量的线程来本地化运行Spark 
local[K] 使用K个Worker线程本地化运行Spark(理想情况下,K应该根据运行机器的CPU核数设定) 
spark://HOST:PORT 连接到指定的Spark standalone master。默认端口是7077。 
yarn-client 以客户端模式连接YARN集群。集群的位置可以在HADOOP_CONF_DIR 环境变量中找到。 
yarn-cluster 以集群模式连接YARN集群。集群的位置可以在HADOOP_CONF_DIR 环境变量中找到。 
mesos://HOST:PORT 连接到指定的Mesos集群。默认接口是5050. 
而spark-shell会在启动的时候自动构建SparkContext,名称为sc。
 

  • 4
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值