SPARK基础1(spark基础介绍和入门)

什么是spark?
网上有关spark的介绍一搜一大堆,这里就简单的说下它的优点:
Apache Spark是一种包含流处理能力的批处理框架。与Hadoop的MapReduce引擎基于各种相同原则开发而来的Spark主要侧重于通过完善的内存计算和处理优化机制加快批处理工作负载的运行速度
Spark可作为独立集群部署(需要相应存储层的配合),或可与Hadoop集成并取代MapReduce引擎
与MapReduce不同,Spark的数据处理工作全部在内存中进行,只在一开始将数据读入内存,以及将最终结果持久存储时需要与存储层交互。所有中间态的处理结果均存储在内存中
除了引擎自身的能力外,围绕Spark还建立了包含各种库的生态系统,可为机器学习、交互式查询等任务提供更好的支持。相比MapReduce,Spark任务易于编写
Spark的另一个重要优势在于多样性。该产品可作为独立集群部署,或与现有Hadoop集群集成。该产品可运行批处理和流处理,运行一个集群即可处理不同类型的任务
简单说,spark是一个实现快速并且通用的集群计算框架。
核心功能组件如下所示:
1、spark core: 实现spark的基本功能
A、任务调度,内存管理,错误恢复,与存储系统交互等模块
B、RDD:[弹性分布式数据集]API定义
2、spark sql: spark操作结构化数据的程序包
A、通过sparkSql可以使用sql或者hsql查询数据
B、sparksql支持多种数据源
3、spark streaming: 实时流计算组件
A、提供操作数据流的API
4、MLlib:机器学习库,丰富强大
5、Graphx:图计算,图像算法
6、集群管理器:(类似于Hadoop的Yarn)
为了满足从单节点到上千节点之间的伸缩计算,实现的简易调度器

接下来介绍
基本概念
在具体讲解Spark运行架构之前,需要先了解几个重要的概念:

  • RDD:是弹性分布式数据集(Resilient Distributed Dataset)的简称,是分布式内存的一个抽象概念,提供了一种高度受限的共享内存模型;
  • DAG:是Directed Acyclic Graph(有向无环图)的简称,反映RDD之间的依赖关系;
  • Executor:是运行在工作节点(Worker Node)上的一个进程,负责运行任务,并为应用程序存储数据;
  • 应用:用户编写的Spark应用程序;
  • 任务(task):运行在Executor上的工作单元;
  • 作业(job):一个作业包含多个RDD及作用于相应RDD上的各种操作;
  • 阶段(stage):是作业的基本调度单位,一个作业会分为多组任务,每组任务被称为“阶段”,或者也被称为“任务集”。

架构设计
如图9-5所示,Spark运行架构包括集群资源管理器(Cluster Manager)、运行作业任务的工作节点(Worker Node)、每个应用的任务控制节点(Driver)和每个工作节点上负责具体任务的执行进程(Executor)。其中,集群资源管理器可以是Spark自带的资源管理器,也可以是YARN或Mesos等资源管理框架。
与Hadoop MapReduce计算框架相比,Spark所采用的Executor有两个优点:一是利用多线程来执行具体的任务(Hadoop MapReduce采用的是进程模型),减少任务的启动开销;二是Executor中有一个BlockManager存储模块,会将内存和磁盘共同作为存储设备,当需要多轮迭代计算时,可以将中间结果存储到这个存储模块里,下次需要时,就可以直接读该存储模块里的数据,而不需要读写到HDFS等文件系统里,因而有效减少了IO开销;或者在交互式查询场景下,预先将表缓存到该存储系统上,从而可以提高读写IO性能。

图9-5
在这里插入图片描述
在Spark中,一个应用(Application)由一个任务控制节点(Driver)和若干个作业(Job)构成,一个作业由多个阶段(Stage)构成,一个阶段由多个任务(Task)组成。当执行一个应用时,任务控制节点会向集群管理器(Cluster Manager)申请资源,启动Executor,并向Executor发送应用程序代码和文件,然后在Executor上执行任务,运行结束后,执行结果会返回给任务控制节点,或者写到HDFS或者其他数据库中。
在这里插入图片描述
接下来介绍怎么进入spark,SparkSession类是Spark中所有功能的入口点。要创建一个基本的 SparkSession,需要如下所示:

import org.apache.spark.sql.SparkSessionval 
spark = SparkSession
  .builder() //开始建立
  .master("local[2]")//本地用2核运行,上线可以把这个设置取消
  .appName("Spark SQL basic example")  //设置 application 的名字
  .config("spark.some.config.option", "some-value")  //设置各种配置(未知??)
  .enableHiveSupport()   //增加支持 hive Support
  .getOrCreate()   //获取或者新建一个 sparkSession

SparkSession是Spark2.x后引入的概念。在2.x之前,对于不同的功能,需要使用不同的Context,如下:

  • 创建和操作RDD时,使用SparkContext
  • 使用Streaming时,使用StreamingContext
  • 使用SQL时,使用sqlContext
  • 使用Hive时,使用HiveContext

而目前sparkseesion实质上是SQLContext、HiveContext、SparkContext的组合,未来可能会引入StreamingContext
在这里插入图片描述
如何建立SparkContext?
代码如下:

val sc=spark.sparkContext
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值