![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Spark
ChanKamShing
这个作者很懒,什么都没留下…
展开
-
Spark的Yarn CLuster与Yarn Client区别
一、Yarn Cluster模式二、Yarn Client模式 对比两种模式的架构图,可以看出,两者的本质区别:AM进程的区别。 Cluster模式下,driver运行在AM中,负责向Yarn(RM)申请资源,并监督Application的运行情况,当Client(这里的Client指的是Master节点)提交作业后,就会关掉Client,作业会继续...原创 2019-10-24 14:52:33 · 219 阅读 · 0 评论 -
SparkStreaming与SparkSql整合使用
SparkStreaming的数据是DStream的形式,本质上是RDD类型数据,而SparkSql则是DataFrame的数据类型,所以要使用DataFrame,就需要创建SparkSession会话。SparkStreaming和SparkSession的创建都会用到SparkConf,为了一致性,所以两者需要公用一个SparkConf。一、创建一个SparkSession...原创 2019-10-13 11:21:58 · 1304 阅读 · 0 评论 -
SparkStreaming黑名单过滤
一、思路1、获取黑名单数据,处理成RDD形式 一般情况,黑名单数据存储在数据库里面,获取之后将每个黑名单数据处理成(blackName,true)的Tuple形式;2、接收数据,处理成(k,v)形式 从数据源接收到数据之后,取出name作为key,整条数据作为value,譬如:输入数据为"20190929zhangsan 18",那么处理后为(zhan...原创 2019-10-13 09:06:04 · 557 阅读 · 0 评论 -
Spark Streaming到Mysql
package com.cjsimport java.sql.DriverManagerimport org.apache.log4j.{Level, Logger}import org.apache.spark.SparkConfimport org.apache.spark.streaming.{Seconds, StreamingContext}import org.apac...原创 2019-10-12 19:30:41 · 206 阅读 · 0 评论 -
Spark存储原理——数据写入过程
Spark数据的写入过程的入口点位doPutIterator方法。下面是一些方法的调用关系图: 在该方法中,根据数据是否缓存到内存中处理。如果不缓存到内存中,则调用BlockManager的putIterator方法直接存储到磁盘中;如果缓存到内存中,则先判断数据存储级别是否对数据进行了反序列化操作:如果设置了反序列化操作,则调用putIteratorAsVa...原创 2019-08-19 09:41:55 · 508 阅读 · 0 评论 -
SparkSql中,关于Hive表与Parquet文件的Schema转化兼容
从表Schema处理角度对比Hive和Parquet,两者主要的区别:Hive区分大小写,Parquet不区分大小写; Hive允许所有的列为空,而Parquet不允许所有列为空;基于上述两点区别,在进行Hive metastore Parquet转换为SpqrkSql Parquet时,需要将两者的结构进行一致化,其一致化规则:两者同名字段必须具有相同的数据类型,一致化后的字段必须为...原创 2019-08-10 17:52:41 · 962 阅读 · 0 评论 -
Spark的TaskSetManager(任务管理器)的排序算法
Spark作业执行中,有一个步骤是给任务进行资源分配,实际上这些任务由一些任务管理器TaskSetManager负责管理,资源分配过程中,会先根据某种排序算法排好序,然后根据就近原则给任务进行资源分配。那么关于TaskSetManager的排序是根据哪个算法呢?现在就来介绍。 排序算法由两种调度策略FIFOSchedulingAlorithm和FairSchedu...原创 2019-08-15 11:24:41 · 339 阅读 · 0 评论 -
User协同过滤(基于Spark实现)
项目地址:https://github.com/ChanKamShing/UserCF_Spark.git推荐系统的作业流程:召回/match(推荐引擎)-> 物品候选集 -> 过滤 -> 排序 -> 策略(保证结果多样性) -> 推荐list协同过滤CF属于第一阶段,我们常常称之为“推荐引擎”。“推荐引擎”可以有多个基准,包括:基于相似用户、基于相似物品...原创 2019-08-25 12:22:55 · 1004 阅读 · 0 评论 -
Spark实现TF-IDF——文本相似度计算
在Spark1.2之后,Spark自带实现TF-IDF接口,只要直接调用就可以,但实际上,Spark自带的词典大小设置较于古板,如果设置小了,则导致无法计算,如果设置大了,Driver端回收数据的时候,容易发生OOM,所以更多时候都是自己根据实际情况手动实现TF-IDF。不过,在本篇文章中,两种方式都会介绍。数据准备: val df = ss.sql("se...原创 2019-09-01 00:11:53 · 1659 阅读 · 2 评论 -
Spark Streaming容错性
在一个Spark Streaming应用开始时,相关的StreamingContext使用SparkContext启动接收器Reciver成为长驻运行任务。这些接收器接收并保存流数据到Spark内存中以供处理。如上图:接收数据:BlockIntervalTimer会每隔一段时间(默认200ms)将收集到的数据打包成一个block,存储到Executor的内存或者磁盘中。如果...原创 2019-10-07 17:01:28 · 256 阅读 · 0 评论 -
Shuffle的两种写操作
一、简介 在Hadoop的MapReduce框架中,Shuffle是连接Map和Reduce之间的桥梁,Map的输出要被使用到Reduce中必须经过Shuffle这个环节。由于Shuffle阶段涉及磁盘的读写和网络传输,因此Shuffle的性能高低直接影响到整个程序的性能和吞吐量。在MapReduce过程中,需要各个节点上的同一类数据汇集到某个节点进行计算,把这些分布在不同节点的...原创 2019-10-09 14:14:10 · 676 阅读 · 0 评论 -
Spark Streaming消费Kafka消息的两种方式
一、Receiver方式 Receiver方式,消息的offset存储在zookeeper。由Receiver维护,Receiver所扮演的角色是数据接收器。数据从Kafka传到Receiver中,Receiver将数据存储在内存或者磁盘,然后记录在容错日志文件系统中,同时将消息的offset更新到zookeeper中,元数据信息传给Driver。其使用的是Kafka高阶AP...原创 2019-10-10 17:20:34 · 1813 阅读 · 2 评论 -
SparkSQL自定义强类型聚合函数
自定义强类型聚合函数跟自定义无类型聚合函数的操作类似,相对的,实现自定义强类型聚合函数则要继承org.apache.spark.sql.expressions.Aggregator。强类型的优点在于:其内部与特定数据集紧密结合,增强了紧密型、安全性,但由于其紧凑的特性,降低了适用性。准备employ.txt文件:Michael,3000Andy,4500Justin,...原创 2019-08-08 22:24:33 · 226 阅读 · 0 评论 -
CentOS7安装scala2.11.8+spark2.0.2
说明:(1、安装JDK1.8+hadoop2.6+SSH:https://blog.csdn.net/weixin_39400271/article/details/890578842、安装hive1.2.2+mysql5.7:https://blog.csdn.net/weixin_39400271/article/details/89428165)Maste...原创 2019-05-08 22:29:51 · 494 阅读 · 0 评论 -
Spark作业执行原理(五)——执行任务
在Spark消息通信原理(三)(https://blog.csdn.net/weixin_39400271/article/details/97136007)中第(6)点提到过,Executor是任务执行的容器,executor接收到LaunchTask消息之后(其实是GoraseGrainedExecutorBackend接收到来自DriverEndpoint的LaunchTas...原创 2019-08-05 11:32:39 · 153 阅读 · 0 评论 -
Spark作业执行原理(六)——获取执行结果
对于Executor的计算结果,会根据结果的大小使用不同的处理策略:计算结果在(0,128MB-200KB)区间内:通过Netty直接发送给Driver终端; 计算结果在[128MB, 1GB]区间内:将结果以taskId为编号存入到BlockManager中,然后通过Netty把编号发送给Driver终端;阈值可通过Netty框架传输参数设置spark.akka.fra...原创 2019-08-05 15:03:27 · 769 阅读 · 0 评论 -
Spark作业执行原理(二)——划分调度阶段
Spark调度阶段的划分是由DAGScheduler实现,DAGScheduler会从最后一个RDD出发,根据RDD的lineage使用广度优先算法遍历整个依赖树(总共使用了两次,一次是遍历区分ResultStage范围;另一次则是遍历获取ShuffleMapStage划分依据,用来划分每个ShuffleMapStage范围),从而划分调度阶段,调度阶段的划分依据是以是否进行shu...原创 2019-08-01 11:43:10 · 353 阅读 · 0 评论 -
Spark——传递函数与闭包
在Scala中,你可以在任何作用于内定义函数,在函数体内,可以访问相应作用域内的任何变量;还不止,你的函数还可以在变量不再处于作用于内的时候被调用,这就是闭包的最基本的理解。一、transform、action算子的函数参数 在spark集群中,spark应用由负责运行用户编写的main函数,以及在集群上运行的各种并行操作的驱动器程序(Driver)和并行运行...原创 2019-07-22 22:22:19 · 230 阅读 · 0 评论 -
Spark消息通信原理(一)——Spark消息通信架构
在Spark中定义了通信框架的接口,这些接口中调用了Netty的具体方法(在spark2.x前,使用的是Akka)。各接口和实现类的关系如下图所示。 通信架构使用了工厂模式实现(关于工厂模式,可以参考:https://blog.csdn.net/weixin_39400271/article/details/86578215)。首先定义了RpcEnvFac...原创 2019-07-23 14:29:49 · 320 阅读 · 0 评论 -
Spark消息通信原理(二)——Spark启动消息通信
Spark启动过程中,主要是进行Master和Worker之间的通信。 首先,由Worker节点向Master发送注册信息,然后,Master处理完毕,返回注册成功或者失败消息,如果注册成功,Worker会定时发送心跳给Master。具体过程如下: 当master节点启动后,随之启动各worker节点,worker启动时会创建RpcEnv...原创 2019-07-24 09:00:27 · 235 阅读 · 0 评论 -
Spark消息通信原理(三)——Spark运行时消息通信
一、Spark的应用程序执行过程: 在Spark中,每一个“作业”称为一个应用程序(Application),每一个Application都必须有一个SparkContext,相当于application的入口,或者理解为环境。当用户(Client)提交应用程序(Application)时,该application的SparkContext就会向Master发送应用注册消息,ma...原创 2019-07-26 17:54:11 · 337 阅读 · 0 评论 -
RDD转DataFrame常用的两种方式
随着Spark1.4.x的更新,Spark提供更高阶的对象DataFrame,提供了比RDD更丰富的API操作,同时也支持RDD转DataFrame(下面简称“DF”),但是要注意,不是任意类型对象组成的RDD都可以转换成DF,,只有当组成RDD[T]的每一个T对象内部具有鲜明的字段结构时,才能隐式或者显示地创建DF所需要的Schema(结构信息),从而进行RDD->DF转换...原创 2019-08-07 22:47:07 · 684 阅读 · 0 评论 -
SparkSQL自定义无类型聚合函数
准备数据文件:Michael,3000Andy,4500Justin,3500Betral,4000一、定义自定义无类型聚合函数 想要自定义无类型聚合函数,那必须得继承org.spark.sql.expressions.UserDefinedAggregateFunction,然后重写父类得抽象变量和成员方法。package com.cjsimport ...原创 2019-08-08 22:17:16 · 198 阅读 · 0 评论 -
Spark作业执行原理(三)——提交调度阶段
在上一篇划分调度阶段中的handleJobSubmitted方法中,提到finalStage的生成,在生成finalStage的同时,建立起所有Stage的依赖关系,然后通过finalStage生成一个作业实例,在该作业实例中按照顺序提交调度阶段进行执行,在执行过程中监听总线获取作业、阶段执行的情况。回顾handleJobSubmitted方法中部分源码://根据最后一个...原创 2019-08-01 18:09:28 · 183 阅读 · 0 评论 -
Windows运行SparkStreaming,报异常
异常信息为:ERROR Shell: Failed to locate the winutils binary in the hadoop binaryJava.io.IOException: Could not locate executable null\bin\winutils.exe in the Hadoop binaries.解决方法:1、到官网下载需要的hadoop...原创 2019-06-22 23:58:05 · 335 阅读 · 0 评论 -
Spark作业执行原理(四)——提交任务
首先熟悉一下该阶段的一些重要方法的调用关系图: 在上一篇提交调度阶段中,提到:当该阶段不存在父调度阶段时,就会调用DAGScheduler的submitMissingTasks方法。这个方法就是触发任务的提交。在方法中,会根据调度阶段Partition个数拆分对应的个数的任务,一个partition对应一个task,每一个stage里的所有task组成一个TaskSet,将会...原创 2019-08-03 15:23:12 · 231 阅读 · 0 评论