大数据专栏(一)Spark
文章平均质量分 89
本专栏介绍的是Spark各个组件以及各个组件的如何使用。通过这专栏可以全面学习Spark,提供Spark应用程序编程能力。
666呀
点点滴滴会聚江河湖海
展开
-
Spark(一)初识Spark
Spark定义: Spark是Apache的一个顶级项目。它是一种快速的、轻量级、基于内存、分布式迭代计算的大数据处理框架。Spark优点: 处理速度快:它在内存中处理数据的速度相较于MapReduce快大约100倍,它在磁盘中处理数据的速度相较于MapReduce快大约10倍。易于使用:可以用多种语言来编写,如Java、Scala、Python、R、SQL。它提供了80多种高级特性用于...原创 2018-06-27 20:58:58 · 588 阅读 · 0 评论 -
Spark(二)编译Spark
编译Spark方式: Spark官网提供了多种利用Maven编译Spark源码的方式,编译之前需要配置所需环境,Maven版本必须是3.3.9或者更高,JDK必须是1.8或者更高。 利用本地Maven编译:需要配置内存区的大小,配置如下:export MAVEN_OPTS="-Xmx2g -XX:ReservedCodeCacheSize=512m"利用Spark自带的Maven编译:在原创 2018-06-28 21:33:43 · 372 阅读 · 0 评论 -
Spark(三)安装部署Spark
Standalone模式(独立部署模式):无需第三方群集管理器即可快速启动独立群集安装Java8,并且配置环境变量准备三台虚拟机 Spark001(192.168.1.127),Spark002(192.168.1.128),Spark003(192.168.1.129)。我用的是Centos7虚拟机配置主机名,配置本机主机名与IP映射,分别在三台主机上配置其他两台的主机与名IP映射...原创 2018-06-29 10:10:23 · 517 阅读 · 2 评论 -
Spark Core(四)基本工作原理、RDD以及其特性、WoldCount程序剖析
Spark基本的工作原理里 分布式的:Spark加载的数据都是以分区的形式存储在各个节点上的,各个节点的分区组合在一起就是一个RDD,所以它是分布式的。基于内存的:Spark在进行数据的转换或者计算的时候都是在内存中完成的,如果内存资源不够的话 ,那么它就会在磁盘中进行计算。迭代计算 RDD: RDD是Spark提供的一种核心抽象,全称Resilient Distributed Da...原创 2018-07-04 23:32:57 · 847 阅读 · 0 评论 -
Spark Core(五)Spark粗粒度的架构原理
Spark内部组件 Driver:首先Driver是一个Spark节点中的一个驱动进程,它是负责执行我们开发代码中的main函数的一个进程,它负责执行开发人员编写的代码,根据代码来创建SparkContext、创建RDD,以及进行RDD的转化和算子操作。MasterWorkerExecutorTask...原创 2018-07-10 21:08:59 · 615 阅读 · 1 评论 -
Spark Core(六)创建RDD、Transformation与Action、RDD的持久化
创建RDD 基于已有的数据集合并行化创建RDD基于外部文件创建RDD基于Hadoop文件系统创建RDD基于数据库创建RDD原创 2018-07-12 20:56:05 · 398 阅读 · 0 评论 -
Spark Core(七)共享变量、广播变量、累加器
共享变量 Spark是集群部署的,当我们Spark执行程序需要依赖于一个单独的成员变量,那么spark就会把这个变量发送到worker节点上的每个Executor下的所有对应的task中,如果共享变量很大,那么就会对网络开销比较大,影响作业的执行效率,所以就引入了广播变量和累加器的概念。广播变量累加器...原创 2018-07-18 17:50:04 · 299 阅读 · 0 评论 -
Spark Core(八)窄依赖、款依赖
窄依赖 定义:窄依赖英文为Narrow Dependency。在Spark中,我们具体操作的是RDD数据,而RDD是由多个Partition组成的,所以实际上我们真正操作的是Partition上的数据。当我们操作Partition上的数据的时候无非是两种情况,一种是Translation和Action、这两种操作都会有一个RDD产生另一个RDD,我们管前一个RDD叫做父RDD,管后一个RDD叫...原创 2018-07-24 19:10:50 · 399 阅读 · 0 评论 -
Spark Core(九)SparkContext创建过程与源码分析
SparkContext创建之创建TaskScheduler原创 2018-07-26 15:04:47 · 430 阅读 · 0 评论 -
Spark Core(十)Spark Master的注册机制
接受Worker的注册 Worker在启动的时候会主动向Master进行注册,这样在运行环境中就会实时增加节点,这样就不需要重启Spark集群。在Worker启动的以后,会调用AppClient对象中的onStart方法,在这个方法中会调用registerWithMaster方法,来向Master进行注册Master接收到Worker的注册请求以后,先过滤,将状态为DEAD的Worker过滤...原创 2018-08-01 20:23:55 · 310 阅读 · 0 评论 -
Spark Core(十一)Spark资源调度机制
Spark资源调度机制定义 当我们Spark应用程序提交到Spark集群的时候,首先Driver和Application会向Master发送注册请求,Master接受到请求以后会将他们加入到队列中等待启动,而Driver跟Application启动都需要资源,而他们所虚的资源是Master里统一管理的,所以Master决定了资源的调度机制。Spark资源调度源码分析schedule方法 ...原创 2018-08-03 15:49:41 · 309 阅读 · 0 评论 -
Spark Core(十二)Spark Worker启动Driver和Executor原理
Spark Worker启动Driver和Executor原理图 2.原创 2018-08-07 19:58:56 · 766 阅读 · 1 评论 -
Spark Core(十三)Job触发流程原理与源码、Stage划分与提交原理分析
原理 Spark在执行我们编写的代码的时候,当遇到Action的时候,就会触发一次Job,因为所有的Action方法在链式调用runJob方法的时候,最后一个runJob方法中总DAGSchedule的runJob方法,而DAGSchedule是初始化SparkContext的时候事先创建好的。以foreach方法来阐述Job的触发流程 ...原创 2018-08-16 20:08:16 · 697 阅读 · 0 评论 -
Spark Core(十四)TaskScheduler提交Tasks的原理与源码
TaskScheduler提交Tasks的原理 2.TaskScheduler提交Tasks的源码 3.原创 2018-08-22 15:56:19 · 452 阅读 · 0 评论 -
Spark Core(十五)Executor执行Task的原理与源码分析(一)
Executor执行Task的前期准备: 在我们介绍Executor执行Task之前,先看一个重要的类,它就是CoarseGrainedExecutorBackend类它创建这个进程的时候会调用onStart方法它是ExecutorBackend粗粒度进程,它负责向Driver发送Executor的注册请求它是一个通信的进程,它可以与Driver相互通信它是Executor所在的一个...原创 2018-08-23 19:30:10 · 830 阅读 · 0 评论 -
Spark Core(十六)Executor执行Task的原理与源码分析(二)
前述 在上一章节Spark(十五)Executor执行Task的原理与源码分析我们解析了执行Task之前的一些准备工作,但是还没有正真进入Task的执行程序。在上一章节的解析中,在最后Task里的run方法中调用了抽象方法runTask方法,而我们说了,Task是一个抽象类,而runTask方法也是一个抽象方法,所以Task执行的具体逻辑是有Task的子类实现的,实现类Task抽象类的子类有两...原创 2018-08-24 11:39:59 · 711 阅读 · 2 评论 -
Spark Core(十七)Spark的Shuffle原理与源码分析
Shuffle的定义 我们都知道Spark是一个基于内存的、分布式的、迭代计算框架。在执行Spark作业的时候,会将数据先加载到Spark内存中,内存不够就会存储在磁盘中,那么数据就会以Partition的方式存储在各个节点上,我们编写的代码就是操作节点上的Partiton数据。之前我们也分析了怎么我们的代码是怎么做操Partition上的数据,其实就是有Driver将Task发送到每个节点上...原创 2018-08-24 17:54:26 · 546 阅读 · 0 评论 -
Spark Core(十八)Spark的BlockManager原理与源码分析
BlockManager定义 BlockManager是Spark的分布式存储系统,与我们平常说的分布式存储系统是有区别的,区别就是这个分布式存储系统只会管理Block块数据,它运行在所有节点上。BlockManager的结构是Maser-Slave架构,Master就是Driver上的BlockManagerMaster,Slave就是每个Executor上的BlockManager。Blo...原创 2018-08-28 17:15:43 · 419 阅读 · 0 评论 -
Spark Core(十九)Spark性能的调优
更改高效的序列化方法,kyro(减少内存开销)优化数据结构(减少内存开销) 优先使用数组,而不是集合类。优先使用字符串。尽可能少的使用包装类.业务允许的情况下尽量使用id作为唯一键,不用String类型尽量少用对象嵌套结构,可以用Json串来代替对象嵌套结构...原创 2018-08-29 20:28:30 · 357 阅读 · 0 评论 -
Spark SQL(二十)初识Spark SQL
Spark SQL定义 Spark SQL是Spark的一个模块,它是用来处理结构化数据的。原创 2018-09-09 23:36:55 · 518 阅读 · 0 评论 -
Spark SQL(二十一)DataFrame、DataSet的创建
DataFrame的创建基于数据源创建DataFrame def main(args: Array[String]): Unit = { val sparkSession: SparkSession = SparkSession.builder().appName("DataFrameTest").master("local[2]").get原创 2018-09-18 09:31:00 · 303 阅读 · 0 评论 -
Spark SQL(二十二)用户自定义的UDF、UDAF函数
UDF定义:UDF(User-Defined-Function),也就是最基本的函数,它用来出来SQL中的字段的,例如将日期类型转换成字符串类型。用法object UDFTest { case class Person(name: String, age: Int) def main(args: Array[String]): Unit = { //常见Spark...原创 2018-09-18 20:21:39 · 1088 阅读 · 0 评论 -
Spark SQL(二十三)Spark SQL数据源
定义Spark SQL可以通过DataFream接口操作各种数据源。可以通过关系转换或者临时表来操作DataFrame。这里我们将介绍通用的数据源加载方法和数据保存方法。通用加载/保存方法Spark默认的数据源格式为Parquet格式,数据源格式问Parquet文件的时候,Spark读取数据的时候不需要指定具体的格式,如果想要修改默认的数据格式,就需要修改spark.sql.sources....原创 2018-09-20 11:40:11 · 717 阅读 · 0 评论 -
Spark Streaming(二十四)初识SparkStreaming
定义SparkStreaming是Spark核心API的扩展,类似与Apache Storm,但是它不是真正的是实时的,它是准实时的,也就是单位时间内做小批量的处理,它是可伸缩的、高可用的、容错的、用来处理流式数据的。它能够从Kafka、Flume、Kinesis、TCP socket中加载数据,加载进来的数据可以用map、reduce、join、window等抽象函数进行处理,最后处理的结果数...原创 2018-09-22 19:39:18 · 337 阅读 · 0 评论 -
Spark Streaming(二十五)初始化StreamingContext、初识DStream
初始化StreamingContext初始化一个SparkStreaming程序,必须创建StreamingContext对象,因为它是SparkStreaming处理流式数据的入口。 def main(args: Array[String]): Unit = { //初始化SparkConf val conf = new SparkConf().setMaster("l原创 2018-09-23 09:35:29 · 815 阅读 · 0 评论 -
Spark Streaming(二十六)DStream基本数据源、高级数据源
输入DStream和Receiver输入DStream其实就是从数据源接收到的输入数据流的DStream。每个DStream都与一个Receiver对象一一对应。SparkStreaming提供了两种内置数据源支持。基本的数据源:Streaming API中直接提供的数据源。例如文件系统和套接字连接。高级数据源:Kafka、Flume、Kinesis等数据源,这种高级数据源需要提供额外Ma...原创 2018-09-26 16:50:38 · 2327 阅读 · 0 评论 -
Spark Streaming(二十七)DStream的转换、输出、缓存持久化、检查点
定义DStream的转换其实就是对间隔时间内DStream数据流的RDD进行转换操作并返回去一个新的DStream。DStream转换DStream转换语法跟RDD的转换语法非常类似,但DStream有它自己的一些特殊的语法,如updateStateByKey()、transform()、以及各种Window语法。转换意思map(func)将DStream上的每个RD...原创 2018-09-28 18:08:51 · 3159 阅读 · 0 评论