spark源码分析

Spark入门01

一曲冷凌霜 提交于 2019-12-04 11:53:05
一, Spark概述 spark框架地址 1、官网: http://spark.apache.org/ 2、源码托管: https://github.com/apache/spark 3、母公司网站: https://databricks.com/ 官方博客:https://databricks.com/blog/、https://databricks.com/blog/category/engineering/spark 1,官方定义 http://spark.apache.org/docs/2.2.0/ Spark框架,类似于MapReduce框架,针对大规模数据分析框架。 2,大数据分析类型 离线处理:处理分析的数据是静态不变的,类似MapReduce和Hive框架等 交互式分析:即席查询,类似于impala 实时分析:针对流式数据实时处理,展示结果等 3,Spark框架介绍 在磁盘上对100TB的数据进行排序,可以看到Spark比hadoop快的多,效率高。 为什么Spark框架如此快? 数据结构 RDD:弹性分布式数据集,Spark将要处理的数据封装到集合RDD中,调用RDD中函数处理数据。 RDD数据可以放到内存中,内存不足可以放到磁盘中。 Task任务运行方式不一样 MapReduce应用运行:MapTask和ReduceTask都是JVM进程。启动一个jvm进程很慢

Spark(二)算子详解

微笑、不失礼 提交于 2019-12-02 15:35:30
目录 Spark(二)算子讲解 一、wordcountcount 二、编程模型 三、RDD数据集和算子的使用 Spark(二)算子讲解 @ 一、wordcountcount 基于上次的wordcount,我们来写一个wordcountcount,来对wc程序进行第二次计数,我们来分析一下性能。 package com.littlepage.wc import org.apache.spark.rdd.RDD import org.apache.spark.{SparkConf, SparkContext} object WordCount { def main(args: Array[String]): Unit = { val conf=new SparkConf().setAppName("wc").setMaster("local") val sparkContext=new SparkContext(conf) sparkContext.setLogLevel("error") val fileRDD:RDD[String] = sparkContext.textFile("data/data") val words:RDD[String] = fileRDD.flatMap(_.split(" ")) val pairWord:RDD[(String,Int)] =

大数据之Spark 知识体系完整解读

混江龙づ霸主 提交于 2019-12-02 15:28:56
Spark 简介 Spark 是整个 BDAS 的核心组件,是一个大数据分布式编程框架,不仅实现了MapReduce的算子map 函数和reduce函数及计算模型,还提供更为丰富的算子,如filter、join、groupByKey等。是一个用来实现快速而同用的集群计算的平台。 Spark将分布式数据抽象为弹性分布式数据集(RDD),实现了应用任务调度、RPC、序列化和压缩,并为运行在其上的上层组件提供API。其底层采用Scala这种函数式语言书写而成,并且所提供的API深度借鉴Scala函数式的编程思想,提供与Scala类似的编程接口。 Sparkon Yarn 从用户提交作业到作业运行结束整个运行期间的过程分析。 在这里还是要推荐下我自己建的大数据学习交流群:943791324,群里都是学大数据开发的,如果你正在学习大数据 ,小编欢迎你加入,大家都是软件开发党,不定期分享干货(只有大数据软件开发相关的),包括我自己整理的一份最新的大数据进阶资料和高级开发教程,欢迎进阶中和进想深入大数据的小伙伴加入。 一、客户端进行操作 1.根据yarnConf来初始化yarnClient,并启动yarnClient 2.创建客户端Application,并获取Application的ID,进一步判断集群中的资源是否满足executor和ApplicationMaster申请的资源

Spark任务处理流程

不想你离开。 提交于 2019-12-02 02:53:02
最近学习了spark,现根据任务提交分析处理过程总结一下相关的主要模块和任务提交处理流程。 一些重要术语 client,用户编写的spark任务提交程序 master,spark主节点,负责任务和资源调度、节点管理,类似于Yarn的ResourceManager worker,spark工作节点,可以在上面启动Executor进程,类似于Yarn的NodeManager driver,worker上的一进程,负责任务内部的分解执行等,类似于Yarn的ApplicationMaster Application,用户在spark上构建的程序,包含了driver程序以及集群上的executors Job,包含很多task的并行计算,可以认为是Spark RDD 里面的action,每个action的计算会生成一个job。用户提交的Job会提交给DAGScheduler,Job会被分解成Stage和Task Stage,每一个 job 包含 n 个 stage,最后一个 stage 产生 result。一个Job会被拆分为多组Task,每组任务被称为一个Stage就像Map Stage, Reduce Stage。 Stage的划分在RDD的论文中有详细的介绍,简单的说是以shuffle和result这两种类型来划分。在Spark中有两类task,一类是shuffleMapTask

Update:SparkStreaming原理_运行过程_高级特性

跟風遠走 提交于 2019-12-01 07:05:25
Spark Streaming 导读 介绍 入门 原理 操作 Table of Contents 1. Spark Streaming 介绍 2. Spark Streaming 入门 2. 原理 3. 操作 1. Spark Streaming 介绍 导读 流式计算的场景 流式计算框架 Spark Streaming 的特点 新的场景 通过对现阶段一些常见的需求进行整理, 我们要问自己一个问题, 这些需求如何解决? 场景 解释 商品推荐 京东和淘宝这样的商城在购物车, 商品详情等地方都有商品推荐的模块 商品推荐的要求 快速的处理, 加入购物车以后就需要迅速的进行推荐 数据量大 需要使用一些推荐算法 工业大数据 现在的工场中, 设备是可以联网的, 汇报自己的运行状态, 在应用层可以针对这些数据来分析运行状况和稳健程度, 展示工件完成情况, 运行情况等 工业大数据的需求 快速响应, 及时预测问题 数据是以事件的形式动态的产品和汇报 因为是运行状态信息, 而且一般都是几十上百台机器, 所以汇报的数据量很大 监控 一般的大型集群和平台, 都需要对其进行监控 监控的需求 要针对各种数据库, 包括 MySQL , HBase 等进行监控 要针对应用进行监控, 例如 Tomcat , Nginx , Node.js 等 要针对硬件的一些指标进行监控, 例如 CPU , 内存, 磁盘 等

Spark学习:spark-shell和spark-submit的区别及各自工作

混江龙づ霸主 提交于 2019-11-30 12:04:38
一、异同 1、相同点:放置的位置都在/spark/bin目录下面 2、不同点: (1)、spark-shell本身是交互式的,dos界面上会提供一种类似于IDE的开发环境,开发人员可以在上面进行编程。在运行时,会调用底层的spark-submit方法进行执行。 (2)、spark-submit本身不是交互性的,用于提交在IDEA等编辑器中编译并打包生成的Jar包到集群环境中,并执行。 二、执行 1、spark-shell (1) 直接Spark-shell 会启动一个SparkSubmit进程来模拟Spark运行环境,是一个单机版的。 (2) Spark-shell --master Spark://hadoop1:7077,hadoop2:7077,hadoop3:7077 --total-executor-cores 5 --executor-memory 5G 指定任务提交的集群路径在哪里。这就需要提前启动一个真实的Standalone集群。 可以指定多个master的地址,用逗号隔开。 如果没有指定--total-executor-cores 5 --executor-memory 5G,那么就会使用集群中所有可用的资源,没一个worker中都会启动executor。 2、spark-submit 具体的提交过程,请看Spark源码分析的任务提交过程。 Spark

简单搞定spark的shuffle流程

北慕城南 提交于 2019-11-30 07:04:08
Shuffle原理剖析与源码分析 1、在Spark中,什么情况下,会发生shuffle?reduceByKey、groupByKey、sortByKey、countByKey、join、cogroup等操作。 2、默认的Shuffle操作的原理剖析 3、优化后的Shuffle操作的原理剖析 4、Shuffle相关源码分析 普通的shuffle: 优化后的shuffle: spark shuffle操作的两个特点 第一个特点, 在Spark早期版本中,那个bucket缓存是非常非常重要的,因为需要将一个ShuffleMapTask所有的数据都写入内存缓存之后,才会刷新到磁盘。但是这就有一个问题,如果map side数据过多,那么很容易造成内存溢出。所以spark在新版本中,优化了,默认那个内存缓存是100kb,然后呢,写入一点数据达到了刷新到磁盘的阈值之后,就会将数据一点一点地刷新到磁盘。 这种操作的优点,是不容易发生内存溢出。缺点在于,如果内存缓存过小的话,那么可能发生过多的磁盘写io操作。所以,这里的内存缓存大小,是可以根据实际的业务情况进行优化的。 第二个特点, 与MapReduce完全不一样的是,MapReduce它必须将所有的数据都写入本地磁盘文件以后,才能启动reduce操作,来拉取数据。为什么?因为mapreduce要实现默认的根据key的排序!所以要排序

【转载】大数据面试知识图谱

自作多情 提交于 2019-11-29 13:23:09
来源:大数据技术与架构 公众号 作者:机智的王知先 场景描述:大数据开发岗位技能树,学习和复习总纲。 关键词:面试 大数据 大纲 正所谓,无招胜有招。 愿读到这篇文章的技术人早日明白并且脱离技术本身,早登彼岸。 一切技术最终只是雕虫小技。 大纲 本系列主题是大数据开发面试指南,旨在为大家提供一个大数据学习的基本路线,完善数据开发的技术栈,以及我们面试一个大数据开发岗位的时候,哪些东西是重点考察的,这些公司更希望面试者具备哪些技能。 本文不会对某一个知识点进行详细的展开,后续会陆续出专题文章,希望读者能当成一个学习或者复习的大纲,用以查漏补缺。 语言基础篇 Java基础篇 整个大数据开发技术栈我们从实时性的角度来看,主要包含了离线计算和实时计算两大部分,而整个大数据生态中的框架绝大部分都是用 Java 开发或者兼容了 Java 的 API 调用,那么作为基于 JVM 的第一语言 Java 就是我们绕不过去的坎,Java 语言的基础也是我们阅读源码和进行代码调优的基础。 Java 基础主要包含以下部分: 语言基础 锁 多线程 并发包中常用的并发容器(J.U.C) 语言基础 Java 的面向对象 Java 语言的三大特征:封装、继承和多态 Java 语言数据类型 Java 的自动类型转换,强制类型转换 String 的不可变性,虚拟机的常量池,String.intern 的底层原理

剑谱总纲 | 大数据方向学习面试知识图谱

六眼飞鱼酱① 提交于 2019-11-29 11:58:12
关注我的公众号,后台回复【JAVAPDF】获取200页面试题! 5万人关注的大数据成神之路,不来了解一下吗? 5万人关注的大数据成神之路,真的不来了解一下吗? 5万人关注的大数据成神之路,确定真的不来了解一下吗? 欢迎您关注 《大数据成神之路》 愿读到这篇文章的技术人早日明白并且脱离技术本身,早登彼岸。 一切技术最终只是雕虫小技。 大纲 本系列主题是大数据开发面试指南,旨在为大家提供一个大数据学习的基本路线,完善数据开发的技术栈,以及我们面试一个大数据开发岗位的时候,哪些东西是重点考察的,这些公司更希望面试者具备哪些技能。 本文不会对某一个知识点进行详细的展开,后续会陆续出专题文章,希望读者能当成一个学习或者复习的大纲,用以查漏补缺。 语言基础篇 Java基础篇 整个大数据开发技术栈我们从实时性的角度来看,主要包含了离线计算和实时计算两大部分,而整个大数据生态中的框架绝大部分都是用 Java 开发或者兼容了 Java 的 API 调用,那么作为基于 JVM 的第一语言 Java 就是我们绕不过去的坎,Java 语言的基础也是我们阅读源码和进行代码调优的基础。 Java 基础主要包含以下部分: 语言基础 锁 多线程 并发包中常用的并发容器(J.U.C) 语言基础 Java 的面向对象 Java 语言的三大特征:封装、继承和多态 Java 语言数据类型 Java 的自动类型转换

2019大数据面试题

这一生的挚爱 提交于 2019-11-29 07:27:42
【原文需购,分享给各位白嫖党,请自行保存】 1. ConcurrentHashMap 是怎么实现的? 答:concurrent 包中线程安全的哈希表,采用分段锁,可以理解为把一个大的 Map 拆分成 N 个小的 HashTable,根据 key.hashCode() 来决定把 key 放到哪个 HashTabl 中。在 ConcurrentHashMap 中,就是把 Map 分成了 N 个 Segment,put 和 get 的时候,都是现根据 key.hashCode() 算出放到哪个 Segment 中。 2. sparksql 和 sparkstreaming 哪个比较熟 答:都还行,SparkSql 的 DataFrame 或者 DataSet 和 SparkStreaming 的 DStream 都是基于SparkCore 的,最终都会转化为 Sparktask 执行。我们可以交流一下本质的东西 SparkCore,而SparkCore 的核心又是 RDD。 3. 说一下 sparkshuffle 答:Spark 的 shuffle 也是一处理问题的思想:分而治之。shuffle 一般称为洗牌,一般会有Shuffle。 Write 阶段 和 Shuffle Read 阶段。在 Spark 中实现 Shuffle 的方式有两种,一种是 HashShuffle,一种是