spark
文章平均质量分 61
大数据面壁者
大数据相关知识分享,框架底层原理机制,生产学习中遇到的相关问题分享,共同学习,共同进步。
展开
-
Spark内存管理及源码
Spark内存管理及源码目录Spark内存管理及源码一、堆内和堆外内存1.1 概念1.2 堆内内存和对外内存优缺点1.3 如何配置二、堆内内存空间分配2.1 静态内存管理2.2 统一内存管理2.3 内存空间分配三、存储内存管理3.1 RDD的持久化机制3.2 淘汰与落盘四、执行内存管理一、堆内和堆外内存1.1 概念Spark支持堆内内存也支持堆外内存堆内内存:程序在运行时动态地申请某个大小的内存空间堆外内存:直接向操作系统进行申请的内存,不受JVM控制1.2 堆内内存和对外内存优缺点1原创 2021-02-28 13:11:37 · 430 阅读 · 0 评论 -
Spark内核Shuffle流程及源码
Spark内核Shuffle流程及源码目录Spark内核Shuffle流程及源码一、Shuffle的原理和执行过程二、HashShuffle解析2.1 未优化的HashShuffle2.2 优化后的HashShuffle三、SortShuffle解析3.1 SortShuffle3.2 bypassShuffle四、Shuffle写磁盘4.1 shuffleWriterProcessor(写处理器)4.2 使用BypassShuffle条件4.3 使用SerializedShuffle条件4.4 使用Ba原创 2021-02-28 12:56:25 · 473 阅读 · 0 评论 -
Spark任务的执行源码
Spark任务的执行目录Spark任务的执行一、概述1.1 任务切分和任务调度原理1.2 本地化调度1.3 失败重试与黑名单机制二、阶段的划分三、任务的切分四、任务的调度4.1 提交任务4.2 FIFO和公平调度器4.3 读取任务4.4 FIFO和公平调度器规则4.5 发送给Executor端执行任务五、任务的执行一、概述1.1 任务切分和任务调度原理1.2 本地化调度任务分配原则:根据每个Task的优先位置,确定Task的Locality(本地化)级别,本地化一共有五种,优先级由高原创 2021-02-26 19:49:25 · 367 阅读 · 0 评论 -
Spark作业提交流程源码
Spark作业提交流程源码目录Spark作业提交流程源码一、环境准备及提交流程二、创建Yarn Client客户端并提交2.1 程序入口2.2 解析输入参数2.3 选择创建哪种类型的客户端2.4 Yarn客户端参数解析2.5 创建Yarn客户端2.6 Yarn客户端创建并启动ApplicationMaster三、ApplicationMaster任务3.1 解析传递过来的参数3.2 创建RMClient并启动Driver3.3 向RM注册AM3.4 获取RM返回可以资源列表3.5 根据可用资源创建NMCl原创 2021-02-26 19:22:20 · 815 阅读 · 0 评论 -
使用SparkStreaming实现的三个实时需求
三个需求需求一:广告黑名单需求二:广告点击量实时统计需求三:最近一小时广告点击量一、构建基础类在基础类中封装三个需求都会用到的方法和属性。使用到的技术点:抽象类SparkStreaming应用上下文StreamingContext抽象控制构建流式应用的DStreamTransFormatpackage com.saprkstreaming.exec.appimport com.saprkstreaming.exec.bean.AdsInfoimport org.apac原创 2021-01-29 23:06:10 · 485 阅读 · 0 评论 -
常用工具类(使用scala编写)
常用工具类(使用scala编写)1.获取配置文件属性package com.saprkstreaming.exec.utilimport java.util.ResourceBundleobject PropertiesUtil { // 绑定配置文件 // ResourceBundle专门用于读取配置文件,所以读取时,不需要增加扩展名 // 国际化 = I18N => Properties val summer: ResourceBundle = Res原创 2021-01-29 22:39:40 · 717 阅读 · 0 评论 -
优雅关闭SparkStreaming程序
优雅关闭SparkStreaming的程序流式任务需要7*24小时执行,但是有时涉及到升级代码需要主动停止程序,但是分布式程序,没办法做到一个个进程去杀死,所有配置优雅的关闭就显得至关重要了。使用外部文件系统来控制内部程序关闭。大致思路如下:新启动一个线程检测hdfs上是否多出了一个目录,检测到后使用优雅的关闭方式,先停止采集数据,然后将已经采集到的数据计算完毕,然后关闭一切连接。 @Test def getclose():Unit={ streamingContext.star原创 2021-01-29 22:30:29 · 362 阅读 · 1 评论 -
SparkStreaming的DStream输出
SparkStreaming的DStream输出输出操作指定了对流数据经转化操作得到的数据所要执行的操作(例如把结果推入外部数据库或输出到屏幕上)。与RDD中的惰性求值类似,如果一个DStream及其派生出的DStream都没有被执行输出操作,那么这些DStream就都不会被求值。如果StreamingContext中没有设定输出操作,整个context就都不会启动。因为sparkstreaming为微批次处理,如果将计算结果输出为文件会产生大量小文件,所以一般会将计算结果保存到数据库。常用的算子只有p原创 2021-01-29 22:25:28 · 535 阅读 · 0 评论 -
SparkStreaming的DStream转换操作
SparkStreaming的DStream转换操作DStream上的操作与RDD的类似,分为Transformations(转换)和Output Operations(输出)两种,此外转换操作中还有一些比较特殊的原语,如:updateStateByKey()、transform()以及各种Window相关的原语。一、状态概述状态: state,指保存数据的对象有状态的操作:当前算子的运算需要依赖于上一次运算的结果 特征:需要保存每一个批次的运算结果!以便下一个批次使用无状态的操作:原创 2021-01-29 22:19:18 · 651 阅读 · 0 评论 -
使用SparkStreaming获取Kafka中的流式数据并指定手动提交offset
概述本篇文章主要有三个示例代码,第一个主要功能是使用sparkstreaming获取kafka中的流式数据,第二个主要解决自动提交偏移量的解决方法:指定检查点,第三个示例是使用手动提交的方式解决自动提交过程中可能出错的问题。还可以指定存储器实现精准一一致性,后续再补上!题外话:sparkstreaming毕竟不是真正的实时计算,底层原理是将数据流离散化为一个一个的微批次,在精准一致消费流式数据上远没有flink方便!!!所以sparkstreamign只建议使用在对实时性要求在秒级查询得场景!!!一、原创 2021-01-28 14:34:23 · 1924 阅读 · 0 评论 -
自定义SparkStreaming的接收器接收不同类型的数据源
自定义SparkStreaming的接收器接收不同类型的数据源步骤:1、自定义一个类,继承Receiverabstract class Receiver[T](val storeLevel: StorageLevel) extends Serializable [T]: Receiver中接收到的数据的类型 StoreLevel:存储级别,Reciver接收的数据怎么存,存哪里2、实现两个抽象方法 onStart(): 必须实现的方法! 会在原创 2021-01-28 11:06:58 · 171 阅读 · 0 评论 -
SparkStreaming编程与Queue测试流
一、StreamingContext如何创建?如何使用? 创建: ①基于SparkConf和Duration ②基于SparkContext和Duration ③基于masterurl,appname,和Duration 使用: ①构造StreamingContext对象 ②根据数据源,构造DStream ③对DStream进行各种转换(运算)原创 2021-01-27 10:04:31 · 316 阅读 · 0 评论 -
Spark Streaming架构与背压机制
Spark Streaming架构与背压机制1. Spark Streaming架构整体架构图SparkStreaming架构图2. 背压机制Spark 1.5以前版本,用户如果要限制Receiver的数据接收速率,可以通过设置静态配制参数“spark.streaming.receiver.maxRate”的值来实现,此举虽然可以通过限制接收速率,来适配当前的处理能力,防止内存溢出,但也会引入其它问题。比如:producer数据生产高于maxRate,当前集群处理能力也高于max原创 2021-01-27 08:20:34 · 459 阅读 · 3 评论 -
SparkStreaming概述
SparkStreaming概述1.1 Spark Streaming是什么Spark流使得构建可扩展的容错流应用程序变得更加容易。Spark Streaming用于流式数据的处理。Spark Streaming支持的数据输入源很多,例如:Kafka、Flume、Twitter、ZeroMQ和简单的TCP套接字等等。数据输入后可以用Spark的高度抽象原语如:map、reduce、join、window等进行运算。而结果也能保存在很多地方,如HDFS,数据库等。和Spark基于RDD的概念很相原创 2021-01-26 22:40:22 · 264 阅读 · 3 评论 -
使用Spark读写Hbase中数据
使用Spark读取Hbase中数据一、pom文件依赖配置<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 h原创 2021-01-21 14:10:13 · 1150 阅读 · 0 评论 -
Hive on Spark配置
Hive on Spark配置一、在Hive所在节点部署Spark首先部署Spark-Yarn模式,配置SPARK_HOME的环境变量。详见:https://blog.csdn.net/weixin_42796403/article/details/1114999401)上传并解压解压spark-3.0.0-bin-hadoop3.2.tgz[hadoop@hadoop102 software]$ tar -zxvf spark-3.0.0-bin-hadoop3.2.tgz -C /opt/mo原创 2021-01-05 21:15:22 · 495 阅读 · 0 评论 -
SparkSQL之数据写入
SparkSQL之数据写入package com.spark.sparksqlimport java.sql.{Connection, DriverManager, PreparedStatement}import java.util.Propertiesimport org.apache.spark.sql.{Row, SaveMode, SparkSession}import org.junit.Testclass fileWrite { val spark = Spark原创 2021-01-03 23:14:27 · 1130 阅读 · 0 评论 -
SparkSQL概述
Spark SQL概述1. 什么是Spark SQL2. 为什么要有Spark SQL3. Spark SQL原理3.1 什么是DataFrame1)DataFrame是一种以RDD为基础的分布式数据集,类似于传统数据库中的二维表格。2)DataFrame与RDD的主要区别在于,前者带有schema元信息,即DataFrame所表示的二维表数据集的每一列都带有名称和类型。左侧的RDD[Person]虽然以Person为类型参数,但Spark框架本身不了解Person类的内部结构。而右侧原创 2020-12-30 22:34:17 · 466 阅读 · 0 评论 -
SparkSql自定义UDF和UDAF函数
SparkSql自定义UDF和UDAF函数package com.spark.sparksqlimport org.apache.spark.sql.{Encoder, Encoders, Row, SparkSession}import org.apache.spark.sql.expressions.{Aggregator, MutableAggregationBuffer, UserDefinedAggregateFunction}import org.apache.spark.sql.t原创 2020-12-30 20:41:26 · 224 阅读 · 0 评论 -
Spark之广播变量
Spark之广播变量广播变量:分布式共享只读变量。广播变量用来高效分发较大的对象。向所有工作节点发送一个较大的只读值,以供一个或多个Spark操作使用。比如,如果你的应用需要向所有节点发送一个较大的只读查询表,广播变量用起来都很顺手。在多个并行操作中使用同一个变量,但是 Spark会为每个任务分别发送。1)使用广播变量步骤:(1)调用SparkContext.broadcast(广播变量)创建出一个广播对象,任何可序列化的类型都可以这么实现。(2)通过广播变量.value,访问该对象的值。(原创 2020-12-29 22:07:51 · 1380 阅读 · 0 评论 -
Spark之累加器
Spark之累加器累加器:分布式共享只写变量。(Executor和Executor之间不能读数据)累加器用来把Executor端变量信息聚合到Driver端。在Driver程序中定义的变量,在Executor端的每个task都会得到这个变量的一份新的副本,每个task更新这些副本的值后,传回Driver端进行merge。1. 系统累加器1)累加器使用(1)累加器定义(SparkContext.accumulator(initialValue)方法)val sum: LongAccumul原创 2020-12-29 22:04:28 · 518 阅读 · 0 评论 -
需求:计算页面跳转率
需求:计算页面跳转率package com.spark.exerciseimport org.apache.spark.{SparkConf, SparkContext}//需求:计算页面跳转率object $04_request { def main(args: Array[String]): Unit = { //要统计的页面 val list = List(1,2,3,4,5,6,7) //得到跳转数据 val toPages = list.原创 2020-12-29 21:07:14 · 794 阅读 · 0 评论 -
Spark使用foreach与map算子的区别
spark使用map算子不产生数据的问题 下代码,使用累加器对数据进行求和的过程中,发现代码没有报错,运行也无异常,但是累加器结果总是为空,经过多番查证,发现问题出现在下面代码的第七步。 开始时使用的是map算子对RDD中数据遍历,通过累加器进行计算,结果没有值。 后来发现map底层使用的是迭代器,当循环遍历一遍之后,迭代器的指针已经跳到了最末尾,当进行累加器计算的时候,已经没有数据进行计算了,因此迭代器结果没有值。 修正后结果:使用foreach替代map进行循环计算。package c原创 2020-12-29 19:19:09 · 1903 阅读 · 1 评论 -
SparkCore之RDD持久化与检查点设置
RDD持久化1. RDD Cache缓存RDD通过Cache或者Persist方法将前面的计算结果缓存,默认情况下会把数据以序列化的形式缓存在JVM的堆内存中。但是并不是这两个方法被调用时立即缓存,而是触发后面的action时,该RDD将会被缓存在计算节点的内存中,并供后面重用。1)代码实现object cache01 { def main(args: Array[String]): Unit = { //1.创建SparkConf并设置App名称 va原创 2020-12-28 21:12:41 · 238 阅读 · 0 评论 -
RDD依赖关系及Stage划分源码
RDD依赖关系1. 查看血缘关系RDD只支持粗粒度转换,即在大量记录上执行的单个操作。将创建RDD的一系列Lineage(血统)记录下来,以便恢复丢失的分区。RDD的Lineage会记录RDD的元数据信息和转换行为,当该RDD的部分分区数据丢失时,它可以根据这些信息来重新运算和恢复丢失的数据分区。1)代码实现object Lineage01 {def main(args: Array[String]): Unit = { //1.创建SparkConf并设置App名称原创 2020-12-28 21:03:32 · 282 阅读 · 0 评论 -
SparkCore之RDD序列化
RDD序列化在SparkRDD编程中,初始化工作是在Driver端进行的,而实际运行程序是在Executor端进行的,涉及到了跨进程通信,是需要序列化的。1. 闭包检查1)闭包引入(有闭包就需要进行序列化)object serializable01_object { def main(args: Array[String]): Unit = { //1.创建SparkConf并设置App名称 val conf: SparkConf = new Spa原创 2020-12-28 20:52:11 · 504 阅读 · 0 评论 -
Spark之coalesce合并分区源码
Spark之coalesce合并分区源码Coalesce算子包括:配置执行Shuffle和配置不执行Shuffle两种方式。1、不执行Shuffle方式1)函数签名:def coalesce(numPartitions: Int, shuffle: Boolean = false, //默认false不执行shuffle partitionCoalescer: Option[PartitionCoalescer] = Option.empty) (implicit原创 2020-12-24 21:34:33 · 413 阅读 · 0 评论 -
RDD分区规则与底层源码
RDD分区规则与底层源码一、默认分区源码(RDD数据从集合中创建)二、分区源码(RDD数据从集合中创建)三、默认分区源码(RDD数据从文件中读取后创建)四、分区源码(RDD数据从文件中读取后创建)...原创 2020-12-22 21:28:32 · 168 阅读 · 0 评论 -
Spark运行模式及安装部署
目录一、Spark运行模式二、Spark安装地址三、Local模式3.1 安装使用四、集群角色4.1 Master和Worker集群资源管理4.2 Driver和Executor任务的管理者五、Standalone模式5.1 安装使用5.2 参数说明5.3 配置历史服务5.4 配置高可用(HA)5.5 运行流程六、Yarn模式(重点)6.1 安装使用6.2 配置历史服务6.3 配置查看历史日志6.4 运行流程七、几种模式对比一、Spark运行模式部署Spark集群大体上分为两种模式:单机模式与集群模式原创 2020-12-21 22:36:26 · 812 阅读 · 0 评论 -
Spark概述
Spark概述一、 什么是SparkSpark是一种基于内存的快速、通用、可扩展的大数据分析计算引擎。Hadoop主要解决,海量数据的存储和海量数据的分析计算。二、Hadoop与Spark历史Hadoop的Yarn框架比Spark框架诞生的晚,所以Spark自己也设计了一套资源调度框架。三、Hadoop与Spark框架对比四、 Spark内置模块Spark Core:实现了Spark的基本功能,包含任务调度、内存管理、错误恢复、与存储系统交互等模块。Spark Core中还包含了原创 2020-12-21 21:07:16 · 266 阅读 · 0 评论