分享

让你真正理解什么是SparkContext, SQLContext 和HiveContext

本帖最后由 pig2 于 2017-12-6 14:02 编辑
问题导读

1.你认为SparkContext的作用是什么?
2.SQLContext 和HiveContext的区别是什么?
3.SQLContext、HiveContext与SparkContext的区别是什么?


先从整体上来说:
SparkContext是spark api的入门,我们可以用来编程
SQLContext是spark sql的一个分支入口,可以用来操作sql,这个主要是针对spark来说
HiveContext是 spark sql中另外分支,用来操作hive。

第一步spark driver 应用程序创建SparkContext,SparkContext 允许spark driver 应用程序通过资源管理器访问集群。资源管理器可以是Yarn,或则spark集群管理器。为了创建SparkContext,你可以第一步创建SparkConf,SparkConf存储的配置信息, Spark driver 应用程序将传给SparkContext。一些参数定义 Spark driver应用程序属性和用于分配集群资源。比如worker节点运行的executors 的number, memory 大小和cores。 Spark driver 应用程序可以通过setAppName() 自定义。你可以查看spark1.3.1 获取sparkconf的完整参数。SparkConf 文档(http://spark.apache.org/docs/1.3.1/api/scala/index.html)

[mw_shl_code=scala,true]import org.apache.spark.SparkConf
val conf = new SparkConf().setAppName(“MySparkDriverApp”).setMaster(“spark://master:7077”).set(“spark.executor.memory”, “2g”)[/mw_shl_code]
现在我们有SparkConf可以传递给SparkContext,因此我们的应用程序知道如何访问集群。
[mw_shl_code=scala,true]import org.apache.spark.SparkConf

import org.apache.spark.SparkContext

val conf = new SparkConf().setAppName(“MySparkDriverApp”).setMaster(“spark://master:7077”).set(“spark.executor.memory”, “2g”)

val sc = new SparkContext(conf)

[/mw_shl_code]

现在你的Spark driver应用程序有SparkContext,它知道使用和请求集群资源。如果使用是YARN,hadoop的resourcemanager (headnode)和 nodemanager (workernode) 将会为executors分配container 。如果资源有效的,在集群上executors 将会根据配置参数分配memory和cores。如果你使用Sparks 集群管理器,SparkMaster(headnode) 和SparkSlave (workernode) 将会使用分配在的executors。下面的图展示了他们之间的 driver 应用程序, 集群资源管理器 和executors关系

sparkj-relation.png

每一个spark driver 应用程序有自己的executors 在集群上。集群保持运行只要spark driver 应用程序有SparkContext。executors 运行用户code,运行计算和缓存应用程序的数据。SparkContext 创建job,分解为stages。
SparkSQL是spark的一个模块,SparkSQL 用来处理结构化数据,所以SparkSQL你的data必须定义schema.在spark1.3.1,sparksql继承dataframes 和a SQL 查询引擎。SparkSQL 有SQLContext 和HiveContext.HiveContext 继承SQLContext.Hortonworks 和  Spark社区建议使用HiveContext.你可以看到下面,当你运行spark-shell,它和driver应用程序是交互的,他会自动创建SparkContext 定义为sc和HiveContext 定义为sqlContext.HiveContext 允许执行sql查询以及Hive 命令.pyspark同样也是。你可以看下 Spark 1.3.1 文档,SQLContext 和HiveContext 在SQLContext documentation and HiveContext documentation(http://spark.apache.org/docs/1.3.1/api/scala/index.html#package)

spark.png

从上面看出,SparkContext其实是连接集群以及获取spark配置文件信息,然后运行在集群中。

SQLContext 和HiveContext

SQLContext:spark处理结构化数据的入口。允许创建DataFrame以及sql查询
更多可查看
链接(http://spark.apache.org/docs/1.3 ... park.sql.SQLContext)
HiveContext:spark sql执行引擎,集成hive数据,读取在classpath的 hive-site.xml配置文件配置Hive
更多可查看

链接(http://spark.apache.org/docs/1.3 ... ql.hive.HiveContext)



已有(10)人评论

跳转到指定楼层
ggggying12 发表于 2017-2-22 14:38:21
好好学习,天天向上
回复

使用道具 举报

ggggying12 发表于 2017-2-22 18:22:07
好好学习,天天向上
回复

使用道具 举报

ggggying12 发表于 2017-2-22 21:10:07
感谢楼主分享
回复

使用道具 举报

ggggying12 发表于 2017-2-23 13:35:28
大牛,多谢分享
回复

使用道具 举报

yangyixin 发表于 2017-7-7 09:45:05
求问怎么设备环境啊
回复

使用道具 举报

spftoto 发表于 2018-7-5 17:27:30
要学习呀 ,要学习呀,搞得不是很明白。何时能够像大佬一样牛逼。
回复

使用道具 举报

12下一页
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条