| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 大数据 -> Sparksession,sparkcontext,sparksql,SparkConf是什么,他们之间什么联系? -> 正文阅读 |
|
[大数据]Sparksession,sparkcontext,sparksql,SparkConf是什么,他们之间什么联系? |
目录 其实对初学spark的同学来说,Sparksession,sparkcontext,sparksql,SparkConf看着都特别像,搞着搞着就混了,而且每次创建sparkSession对象时,还有多种写法,都差不多,但是对象又不一样,今天通过百度和理解,我把这几个对象梳理一下。 SparkSession是在Spark 2.0中引入的,SparkSession现在是Spark的新入口点,它替换了旧的SQLContext和HiveContext。注意,保留旧的SQLContext和HiveContext是为了向后兼容。因此,如果您正在使用Spark 2.0或更高版本,建议使用SparkSession。(先应个题) 一.先从SparkContext和SparkConf开始:1.SparkContext 是什么?任何Spark程序都是SparkContext开始的,SparkContext的初始化需要一个SparkConf对象,SparkConf包含了Spark集群配置的各种参数。一旦设置完成SparkConf,就不可被使用者修改 初始化后,就可以使用SparkContext对象所包含的各种方法来创建和操作RDD和共享变量。 总结下来就是: a.驱动程序使用SparkContext与集群进行连接和通信,它可以帮助执行Spark任务,并与资源管理器(如YARN 或Mesos)进行协调。 Spark Shell提供了一个名为“sc”的预配置Spark环境和一个名为“spark”的预配置Spark会话。使用Spark Shell的时候,本身是预配置了sc,即SparkConf和SparkContext的,但是在实际使用编辑器编程过程中是需要设置这些配置的。配置代码如下:
setMaster主要是连接主节点,如果参数是”local”,则在本地用单线程运行spark,如果是 local[4],则在本地用4核运行,如果设置为spark://master:7077,就是作为单节点运行,而setAppName就是在web端显示应用名而已,它们说到底都调用了set()函数 2、创建SparkContext的步骤:创建SparkContext一般要经过下面几个步骤:? b). 构建Spark应用程序的应用信息对象SparkConf? c). 利用SparkConf对象来初始化SparkContext? d). 创建RDD、执行相应的Transformation和Action并得到最终结果。 e). 关闭Context? 3、SparkConf可以认为这个对象类似于配置,或配置文件(代码和创建见上面) 一旦设置完成SparkConf,就不可被使用者修改 ?继续深追,看看这个set()方法, logDeprecation(key)是日志输出函数,防止输入参数名无效, 看看settings,是个HashMap结构,追溯一下:? 果然,是个ConcurrentHashMap对象,ConcurrentHashMap主要作用是解决多线程并发下数据段访问效率,该类相对于hashMap而言具有同步map中的数据,对于hashTable而言,该同步数据对于并发程序提高了极高的效率,所以在使用缓存机制的时候如果对map中的值具有高并发的情况的话,那么我们就需要使用ConcurrentHashMap,ConcurrentHashMap中主要实体类就是三个:ConcurrentHashMap(整个Hash表),Segment(桶),HashEntry(节点),CurrentHashMap的初始化一共有三个参数,一个initialCapacity,表示初始的容量,一个loadFactor,表示负载参数,最后一个是concurrentLevel,代表ConcurrentHashMap内部的Segment的数量,ConcurrentLevel一经指定,不可改变,这也是为什么SparkConf配置好了就无法更改的原因。 ConcurrentHashMap应用了锁分段技术,HashTable容器在竞争激烈的并发环境下表现出效率低下的原因,是因为所有访问HashTable的线程都必须竞争同一把锁,那假如容器里有多把锁,每一把锁用于锁容器其中一部分数据,那么当多线程访问容器里不同数据段的数据时,线程间就不会存在锁竞争,从而可以有效的提高并发访问效率,这就是ConcurrentHashMap所使用的锁分段技术,首先将数据分成一段一段的存储,然后给每一段数据配一把锁,当一个线程占用锁访问其中一个段数据的时候,其他段的数据也能被其他线程访问。 另外,如果ConcurrentHashMap的元素数量增加导致ConrruentHashMap需要扩容,ConcurrentHashMap是不会增加Segment的数量的,而只会增加Segment中链表数组的容量大小,这样的好处是扩容过程不需要对整个ConcurrentHashMap做rehash,而只需要对Segment里面的元素做一次rehash就可以了。 二、SQLContext和HiveContext?1.SQLContext 是什么?SQLContext是通往SparkSQL的入口。下面是如何使用SparkContext创建SQLContext。
2.HiveContext 是什么???HiveContext是通往hive入口。
创建方式:
三、SparkSession?终于到正题了,那sparkSession是什么,为什么跟上面的兄弟那么像? 1.SparkSession是在Spark 2.0中引入的, SparkSession实质上是SQLContext和HiveContext的组合(未来可能还会加上StreamingContext),所以在SQLContext和HiveContext上可用的API在SparkSession上同样是可以使用的。SparkSession内部封装了sparkContext,所以计算实际上是由sparkContext完成的。? 下面是如何创建一个SparkSession
发现没:SparkConf()老工具人了,哪里需要配置,哪里就有他 2.getOrCreate():有就拿过来,没有就创建,类似于单例模式:
一旦我们访问了SparkSession,我们就可以开始使用DataFrame和Dataset了。 下面是我们如何使用Hive支持创建SparkSession。
SparkSession是在Spark 2.0中引入的,SparkSession现在是Spark的新入口点,它替换了旧的SQLContext和HiveContext。注意,保留旧的SQLContext和HiveContext是为了向后兼容。因此,如果您正在使用Spark 2.0或更高版本,建议使用SparkSession。 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/24 4:50:53- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |