
Spark
文章平均质量分 64
不清不慎
热爱编程,热爱生活。
展开
-
Spark RDD核心详解
本篇文章主要讲解Spark 的编程模型以及作业执行调度流程。对于spark 来说,其核心是RDD(Resilient Distributed Dataset,弹性分布式数据集),它是一种特殊的集合,支持多种来源,有容错机制,可以被缓存支持并行操作。下面来看看RDD这一抽象数据集的核心。Spark编程模型RDD的特征 RDD总共有五个特征,三个基本特征,两个可选特征。 (1)...原创 2018-05-04 22:32:04 · 4458 阅读 · 0 评论 -
构建分布式微博好友推荐系统【实战开发】
对于社交系统与电商网站,推荐系统占有很重要的位置,当数据量越来越大的时候,用户无法确定该选择什么商品,因此在电商系统中需要按照兴趣或者相似度给用户推荐相应的商品。相应的,在一个大型社交网络平台中,对于一些用户,我们希望推荐一些知名度较高,活跃度较高或者感兴趣的用户,比如一些明星,歌手,演员等等。在社交网络中,PageRank算法有着广泛的应用,因此,本篇文章主要介绍其原理以及实战进行好友的推荐 ,...原创 2018-08-26 11:59:13 · 3971 阅读 · 0 评论 -
【Spark性能优化】JVM调优原理概述以及降低cache内存占比
在Spark性能优化中包括几大块,前面主要讲述了常用的调优操作,比如RDD持久化,序列化等操作,本篇文章讲述另一块调优点,JVM调优,首先来了解一下JVM调优的原理。JVM调优原理概述了解JVM的程序员的都知道,JVM被划分为几个部分,比如虚拟机栈,本地方法栈,堆内存等。这里JVM调优主要针对堆内存,因此,我们着重介绍堆内存。在JVM中,堆内存一般存放创建的一个对象。在我们常用...原创 2018-08-19 16:54:17 · 360 阅读 · 0 评论 -
Spark源码解读之Shuffle原理剖析与源码分析
在前面几篇文章中,介绍了Spark的启动流程Spark内核架构流程深度剖析,Spark源码分析之DAGScheduler详解,Spark源码解读之Executor以及Task工作原理剖析,Spark源码解读之Executor以及Task工作原理剖析等Spark重要组件的源码剖析之后,接着之前的文章,本篇文章来剖析Shuffle的原理,shuffle阶段无论是mapreduce还是Spark都是其核...原创 2018-08-20 17:52:22 · 3080 阅读 · 1 评论 -
《邪不压正》好不好看?大数据分析告诉你
八月暑假季,也是影院最热闹的时候,各大电影相继在影院播放,精彩不断,给了人们更多的惊喜,尤其是《我不是药神》一路遥遥领先,拿下暑假票房冠军,但是《邪不压正》这部电影褒贬不一,笔者也看过这部电影,我自身对于这部电影的感觉,怎么说呢?有点深奥,还行吧。但是个人观点,并不能说明一部电影的好坏,我们应该通过了解数万观众对于这部影片的评价再来对这部影片定性吧。因此,我准备爬取豆瓣对《邪不压正》所...原创 2018-12-19 23:06:10 · 1759 阅读 · 0 评论 -
Spark GraphX图计算框架原理概述
言之易而为之难,学习大数据之图计算,就是从“浊”中找出“静”的规律,达到“清”的境界;从“安”中找出“生”的状态。概述GraphX是Spark中用于图和图计算的组件,GraphX通过扩展Spark RDD引入了一个新的图抽象数据结构,一个将有效信息放入顶点和边的有向多重图。如同Spark的每一个模块一样,它们都有一个基于RDD的便于自己计算的抽象数据结构(如SQL的DataFram...原创 2018-08-24 13:38:59 · 12053 阅读 · 0 评论 -
【Spark GraphX】Graph Operators最佳实践
在Graph图和GraphOps中同时定义了许多用于图计算的操作,如下图所示: 主要分为如下图几类操作: 下面我们通过实例来实践一下上面所提到的Operators。1.构造图构造图一般有两种方式,通过Graph object构造和通过Graph Builder构造。通常我们使用Graph object来构造Graph,如下图所示,我们针对下面的属性图以及它的边信息和顶点信息...原创 2018-08-25 10:19:41 · 2179 阅读 · 0 评论 -
Spark持久化以及checkpoint剖析
在Spark 的持久化使用中,我们会将一些经常使用到的数据进行持久化,比如使用cache()或者persist()方法进行持久化操作,但是当某个节点或者executor挂掉之后,持久化的数据会丢失,因为我们的数据是保存在内存当中的,这时就会重新计算RDD,如果某个之前的RDD需要大量的计算时间,这时将会浪费很多时间,因此,我们有时候需要使用checkpoint操作来将一些数据持久化可容错文件系统中...原创 2018-09-06 11:35:50 · 610 阅读 · 0 评论 -
Spark存储机制源码剖析
一、Shuffle结果的写入和读取通过之前的文章Spark源码解读之Shuffle原理剖析与源码分析我们知道,一个Shuffle操作被DAGScheduler划分为两个stage,第一个stage是ShuffleMapTask,第二个是ResultTask。ShuffleMapTask会产生临时计算结果,这些数据会被ResultTask作为输入而读取。那么ShuffleMapTask的计算结果...原创 2018-10-02 19:55:05 · 990 阅读 · 0 评论 -
Spark Streaming执行流程源码剖析
一、StreamingContext初始化过程在Spark Streaming中使用StreamingContext来操作DStream,这也好比Spark Core中SparkContext对于RDD,DStream可以说是RDD的又一层封装,作用于DStream上的Operation可以大概分为以下两类:Transformation转换操作。Output表示输出结果,主要有print,...原创 2018-10-06 11:25:22 · 2259 阅读 · 0 评论 -
Spark SQL架构分析与优化策略
一、Spark SQL架构分析Spark SQL架构与传统的查询优化器+执行器类似,只不过Spark SQL基于分布式环境来实现,并采用Spark作为执行引擎。在Spark SQL中catalyst会将SQL翻译成最终的执行计划,并在这个过程中进行查询计划。最终会在Spark内部将执行计划转换为DAG来执行。因此Catalyst是Spark SQL的调度核心,其执行流程如下:SqlPars...原创 2018-12-21 11:01:38 · 733 阅读 · 0 评论 -
Spark Streaming限流与背压原理
在流式数据的处理中,我们都非常关注数据流的速度,适当的速度可以的达到很好的一个处理效果,但是如果过高或者过低都会导致一些不期望的问题,这篇文章让我们一起来看看Spark Streaming是如何处理这一系列问题的。一、为什么要限流我们都知道,Spark Streaming是一个流式处理框架,但是他并不是完全的实时处理,而是按照batch机制来处理数据的。(画外音:在Spark Stream...原创 2019-03-23 18:12:04 · 2891 阅读 · 0 评论 -
Spark Streaming Window核心源码剖析
在Spark Streaming中,提供了窗口计算,可以转换滑动窗口内的数据。每次窗口都在DStream中滑动,窗口内的RDD将被合并生成窗口内的DStream的RDD。如下图所示为滑动窗口的操作:从上图可以看见,window操作需要指定两个参数:窗口长度(window length):窗口的周期长度。滑动间隔(sliding interval):窗口转换的间隔。在Spark Str...原创 2019-06-05 12:40:15 · 574 阅读 · 0 评论 -
Spark容错机制剖析
在一个分布式系统中,非常重要的一点就是容错性,Spark也不例外,当它机器发生故障的时候,可以很轻松的应对。本篇容错机制的剖析主要针对Standalone模式进行分析。阅读本篇文章之前,你可以查看之前的【Spark源码解读之Master剖析】以及【Spark源码解读之Worker剖析】的文章,该篇是基于之前文章的补充。在一个Spark集群中,有各种角色,Executor、Worker、Mast...原创 2019-06-06 09:43:34 · 937 阅读 · 0 评论 -
Spark SQL源码剖析之SqlParser解析
在使用Spark的过程中,由于Scala语法复杂,而且更多的人越来越倾向使用SQL,将复杂的问题简单化处理,避免编写大量复杂的逻辑代码,所以我们想是不是可以开发一款类似Hive的工具,将其思想也应用在Spark之上,建立SQL来处理一些离线计算场景,由于Spark SQL应用而生。在本篇文章中,我们准备深入源码了解Spark SQL的内核组件以及其工作原理。熟悉Spark的读者都知道,当我们调用...原创 2019-06-04 00:18:01 · 3244 阅读 · 0 评论 -
Spark源码解读之Shuffle计算引擎剖析
Shuffle是Spark计算引擎的关键所在,是必须经历的一个阶段,在前面的文章中,我们剖析了Shuffle的原理以及Map阶段结果的输出与Reduce阶段结果如何读取。该篇文章是对前面两篇文章【Spark源码解读之Shuffle原理剖析与源码分析】【Spark存储机制源码剖析】细节的深入探究。了解Shuffle原理的读者都知道,整个Shuffle过程被划分为map和reduce阶段,在S...原创 2019-06-16 20:08:21 · 529 阅读 · 0 评论 -
Spark性能优化之如何使用广播变量以及Kryo序列化
在Spark Application中,经常会使用到一个共享变量,众所周知的,Spark是一个并行计算框架,对于这个变量,每一个executor的task在访问它的时候,都会去拷贝一份副本去使用。如下图所示: 对于这种默认方式,它会极大的系统的内存,我们可以假设一个集群中有1024个task,这个共享变量大小假设为1M,那么就会去复制1024份到集群上去,这样就会有1个G的数据在网络中传输,...原创 2018-08-18 15:43:31 · 3883 阅读 · 0 评论 -
Spark性能调优之合理分配系统资源以及并行度的调节
在Spark系统中,调优是非常重要。首先,调优的第一步也是首先要考虑的就是系统的资源,只有在合理、有效的分配完了系统的资源,才会去考虑其他调优点从而提升系统的性能与速度。虽然对于系统的资源的分配,看上去没那么难,但是也不能小视,一个集群或系统的资源有效,只有在知道其Spark资源分配的原理之后才能合理分配资源,一定程度上对系统的性能带来提升。本篇文章主要从下面几个方面展开对系统资源的分配展开讨...原创 2018-08-07 23:06:22 · 1470 阅读 · 1 评论 -
Spark源码解读之TaskScheduler剖析
在前面的一篇文章中介绍了stage的划分算法以及task对应的partition的最佳位置计算算法。在DAGScheduler中将stage划分好之后,然后TaskScheduler会将taskSet中的task提交到executor中去执行,那么TaskScheduler是怎么样将task提交到executor中执行,又是如何如何分配executor的呢?本篇主要围绕TaskScheduler的...原创 2018-08-02 21:13:55 · 760 阅读 · 0 评论 -
Spark Streaming初步使用以及工作原理详解
在大数据的各种框架中,hadoop无疑是大数据的主流,但是随着电商企业的发展,hadoop只适用于一些离线数据的处理,无法应对一些实时数据的处理分析,我们需要一些实时计算框架来分析数据。因此出现了很多流式实时计算框架,比如Storm,Spark Streaming,Samaz等框架,本文主要讲解Spark Streaming的工作原理以及如何使用。一、流式计算1.什么是流?...原创 2018-05-12 13:44:35 · 19289 阅读 · 1 评论 -
Spark Streaming集成Kafka的两种方式
Spark Streaming集成Kafka转载请标明原文链接:在实际开发中Spark Streaming经常会结合Flume以及Kafka来实时计算数据。这篇文章主要讲述如何集成Kafka,对于Kafka的集成有两种方式:Receiver-based ApproachDirect Approach (No Receivers)在集成Kafka之前,必须先安装kafka并且启...原创 2018-05-13 17:32:32 · 3217 阅读 · 0 评论 -
协同过滤推荐算法概述
随着电商企业的发展,为了更好的了解用户喜好以便于将更加适合的商品推荐给用户,不仅能得到用户好的评价,而且也有利于自身企业的利益,因此,随之诞生了很多推荐系统,最为常用的推荐算法就是协同过滤算法。转载请标明原文链接推荐算法的基础就是基于两个对象之间的相关性,常用的计算方法有欧几里得相似性,这是一种使用较多的相似性计算方法。除此之外还有曼哈顿相似性和余弦相似性的计算方法。协同过滤算...原创 2018-05-25 18:04:36 · 5031 阅读 · 0 评论 -
基于Spark MLlib的余弦相似度计算实战与欧几里得距离概述【相似度度量】
在上篇文章协同过滤推荐算法概述中,我们看到了对于不同形式的协同过滤举证,最重要的部分是相似度的计算,如果不同的用户或者物品之间的相似度缺乏有效而可靠的算法定义,那么协同过滤算法就失去了成立的基础条件。转载请标明原文链接:欧几里得距离相似度计算欧几里得距离是常用的计算距离的公式,它表示三维空间的两个点的真实距离。欧几里得相似度计算是一种基于用户之间直线距离的计算方式,在计算时,不同的物品...原创 2018-05-26 00:12:54 · 7995 阅读 · 0 评论 -
基于交替最小二乘法(ALS)算法的协同过滤推荐案例实战【Spark MLlib】
交替最小二乘法(ALS)是统计分析中最常用的逼近计算的一种算法,其交替计算结果使得最终结果尽可能地逼近真实结果。而ALS的基础是最小二乘法(LS算法),LS算法是一种常用的机器学习算法,它通过最小化误差的平方和寻找数据的最佳函数匹配。利用最小二乘法可以简便的求得未知的数据,并使得这些求得的数据与实际数据之间误差的平法和为最小。最小二乘法以一个变量为例,在二维空间中最小二乘法的原理图如下...原创 2018-05-27 20:14:43 · 11804 阅读 · 0 评论 -
随机梯度下降法概述与实例
机器学习算法中回归算法有很多,例如神经网络回归算法、蚁群回归算法,支持向量机回归算法等,其中也包括本篇文章要讲述的梯度下降算法,本篇文章将主要讲解其基本原理以及基于Spark MLlib进行实例示范,不足之处请多多指教。梯度下降算法包含多种不同的算法,有批量梯度算法,随机梯度算法,折中梯度算法等等。对于随机梯度下降算法而言,它通过不停的判断和选择当前目标下最优的路径,从而能够在最短路径...原创 2018-06-16 22:21:23 · 20572 阅读 · 2 评论 -
Spark SQL与DataFrame详解以及使用
Spark一站式的解决方案使得大数据技术快速发展,其中,最核心的部分当然也包括Spark SQL,它简单,常用,高效。与Spark Core中类似的,Spark SQL中最核心的部分是DataFrame抽象模型,本篇文章主要介绍Spark SQL的核心内容以及其简单使用。Spark SQL是Spark的一个结构化数据处理模块,提供一个DataFrame编程模型抽象,可以看做是一个分布式...原创 2018-06-17 21:42:21 · 2955 阅读 · 1 评论 -
Spark SQL操作多数据源
Spark SQL支持通过DataFrame接口操作的多种不同的数据源。DataFrame提供支持统一的接口加载和保存数据源中的数据,包括:结构化数据,Parquet文件,JSON文件,Hive表 ,以及通过JDBC连接外部数据源。与Hive类似的,Spark SQL也可以创建临时表和持久表(即管理表),使用registerTempTable命令创建临时表,使用saveAsTable命令将数据...原创 2018-06-18 17:20:35 · 6373 阅读 · 0 评论 -
Spark内核架构流程深度剖析
最近一直在研究Spark,也自己练习做了几个项目,对于Spark这个框架特别的喜爱,尤其是其一站式的大数据解决方案,而且也对Spark MLlib中的机器学习算法很感兴趣,也学习过一段时间。但是在自己空闲下来回想,对于Spark的理解自己仅仅只是停留在表层,如果只是使用API来编写Spark程序,那么无疑将Spark与其他普通的框架混为一谈,发挥不了其作用,根本谈不上说熟悉Spark。因此,...原创 2018-07-25 16:12:25 · 2920 阅读 · 1 评论 -
Flume+Kafka+Spark Streaming实现大数据实时流式数据采集
大数据实时流式数据处理是大数据应用中最为常见的场景,与我们的生活也息息相关,以手机流量实时统计来说,它总是能够实时的统计出用户的使用的流量,在第一时间通知用户流量的使用情况,并且最为人性化的为用户提供各种优惠的方案,如果采用离线处理,那么等到用户流量超标了才通知用户,这样会使得用户体验满意度降低,这也是这几年大数据实时流处理的进步,淡然还有很多应用场景。因此Spark Streaming应用而生,...原创 2018-07-21 01:41:31 · 22385 阅读 · 3 评论 -
Spark源码解读之SparkContext剖析
最近一直在研究Spark,也自己练习做了几个项目,对于Spark这个框架特别的喜爱,尤其是其一站式的大数据解决方案,而且也对Spark MLlib中的机器学习算法很感兴趣,也学习过一段时间。但是在自己空闲下来回想,对于Spark的理解自己仅仅只是停留在表层,如果只是使用API来编写Spark程序,那么无疑将Spark与其他普通的框架混为一谈,发挥不了其作用,根本谈不上说熟悉Spark。因此,...原创 2018-07-26 16:17:22 · 2081 阅读 · 1 评论 -
Spark源码解读之Executor以及Task工作原理剖析
前一篇文章中主要讲述了TaskScheduler发送TaskSet中的task到executor中执行,那么,本篇文章接着上文的讲述看看executor的工作原理以及task是如何执行的。首先来看看executor的工作流程:executor会启动一个后台进程CoarseGrainedExecutorBackend,首先它会向driver发送RegisterExecutor消息注册exec...原创 2018-08-03 23:04:27 · 984 阅读 · 0 评论 -
Spark源码解读之Master剖析
在上篇文章中我们剖析了SparkContext创建启动的整个流程,但是在创建SparkContext之后,TaskScheduler是如何向master注册application,以及master是如何调度worker启动的?带着这些问题我们来看看master的内部构造。首先我们从下面这四个方面来深入Master源码来探究:主备切换切换机制注册机制状态改变机制资源调度机制(两种资源...原创 2018-07-27 13:57:42 · 603 阅读 · 0 评论 -
Spark源码分析之DAGScheduler详解
在前面的几节中,主要介绍了SparkContext的启动初始化过程,包括Driver的启动,向Master的注册,Master启动 Worker,在Worker中启动Executor,以及Worker向Master的注册,在讲述完这些之后,所有的准备工作都已经做完,就开始真正执行我们的Application,首先它会提交job到DAGScheduler中执行,包括对于job的stage划分,还有t...原创 2018-07-31 17:14:36 · 1417 阅读 · 0 评论 -
Spark源码解读之Worker剖析
在上一篇中我们剖析了Master的工作原理,这节我们接着来剖析Worker的工作员原理,Worker主要包括两部分的工作,启动Executor和启动Driver,然后向Master发送注册启动消息。下面是Worker的工作流程图: 在Application向Master注册之后,Master会发出命令启动Wroker,在Worker节点启动之后,它会调动内部的两个方法LaunchDriv...原创 2018-07-28 12:49:37 · 520 阅读 · 0 评论 -
Spark源码剖析之数据通信模块解析
Spark是一个分布式计算框架,当 我们提交一个任务,会划分为多个子任务分发到集群的各个节点进行计算,这里思考一个问题,Spark是如何进行消息的传递,如何将任务分发到各个节点,并且如何将计算结果汇总起来的呢?实际上,Spark内部使用Akka进行消息的传递,心跳报告等,使用Netty提供RPC服务进行数据的上传与下载功能。这点与Flink类似。块管理器BlockManager是Spark存储...原创 2019-06-17 10:24:43 · 444 阅读 · 1 评论