4 Petter

金恪投资控股股份有限公司 - 大数据开发工程师

我要认证

不让秋风带走我踩过的坑儿 互关哦

等级
TA的排名 16w+

Spark Streaming状态操作: updateStateByKey、mapWithState

在Spark Streaming中,DStream的转换分为有状态和无状态两种。无状态的操作,即当前批次的处理不依赖于先前批次的数据,如map()、flatMap()、filter()、reduceByKey()、groupByKey()等等;而有状态的操作,即当前批次的处理需要依赖先前批次的数据,这样的话,就需要跨批次维护状态。总结spark streaming中的状态操作:updateStateByKey、mapWithStateupdateStateByKey对整个实时计算的所有时间间隔内

2020-06-30 16:58:17

Spark聚合操作combineByKey()

park中对键值对RDD(pairRDD)基于键的聚合函数中,都是通过combineByKey()实现的。它可以让用户返回与输入数据类型不同的返回值(可以自己配置返回的参数,返回的类型)首先理解:combineByKey是一个聚合函数,实际使用场景比如,对2个同学的3门考试科目成绩,分别求出他们的平均值。(也就是对3门考试成绩进行聚合,用一个平均数来表示)combineByKey是通过3个内部函数来解决这个问题的:具体处理过程为:遍历分区中的所有元素,因此每一个元素的键要么没有遇到.

2020-06-30 16:51:05

Java深入浅出之线程池

1、线程池的优势(1)、降低系统资源消耗,通过重用已存在的线程,降低线程创建和销毁造成的消耗;(2)、提高系统响应速度,当有任务到达时,通过复用已存在的线程,无需等待新线程的创建便能立即执行;(3)方便线程并发数的管控。因为线程若是无限制的创建,可能会导致内存占用过多而产生OOM,并且会造成cpu过度切换(cpu切换线程是有时间成本的(需要保持当前执行线程的现场,并恢复要执行线程的现场))。(4)提供更强大的功能,延时定时线程池。2、线程池的主要参数public ThreadPoolEx

2020-06-30 16:22:44

浅谈数仓

什么叫数据仓库?数据仓库是一个面向主题的(Subject Oriented)、集成的(Integrate)、相对稳定的(Non-Volatile)、反映历史变化(Time Variant)的数据集合,它用于支持企业或组织的决策分析处理。数据仓库是为了便于多维分析和多角度展现而将数据按特定的模式进行存储所建立起来的关系型数据库,它的数据基于OLTP源系统。首先,用于支持决策,面向分析型数据处理,它不同于企业现有的操作型数据库;其次,对多个异构的数据源有效集成,集成后按照主题进行了重组,并包含历

2020-06-30 16:06:23

Hadoop 二次排序

具体步骤:1 自定义key。在mr中,所有的key是需要被比较和排序的,并且是二次,先根据partitioner,再根据大小。而本例中也是要比较两次。先按照第一字段排序,然后再对第一字段相同的按照第二字段排序。根据这一点,我们可以构造一个复合类IntPair,他有两个字段,先利用分区对第一字段排序,再利用分区内的比较对第二字段排序。所有自定义的key应该实现接口WritableComparable,因为是可序列的并且可比较的。并重载方法//反序列化,从流中的二进制转换成IntPairpublic

2020-06-30 15:29:14

Spark深入浅出之剖析 Spark Shuffle 原理

Shuffle 一般被翻译为数据混洗,是类 MapReduce 分布式计算框架独有的机制,也是这类分布式计算框架最重要的执行机制。本课时主要从两个层面讲解 Shuffle,主要分为:逻辑层面、 物理层面。逻辑层面主要从 RDD 的血统机制出发,从 DAG 的角度来讲解 Shuffle,另外也会讲解 Spark 容错机制,而物理层面是从执行角度来剖析 Shuffle 是如何发生的。RDD 血统与 Spark 容错在 DAG 中,最初的 RDD 被称为基础 RDD,后续生成的 RDD 都是由算子

2020-06-30 10:29:08

Flink浅谈之JobManger、TaskManager

从集群任务中剖析:JobManager 负责整个 Flink 集群任务的调度以及资源的管理,从客户端中获取提交的应用,然后根据集群中 TaskManager 上 TaskSlot 的使用情况,为提交的应用分配相应的TaskSlot 资源并命令 TaskManager 启动从客户端中获取的应用。JobManager 相当于整个集 群的 Master 节点,且整个集群有且只有一个活跃的 JobManager ,负责整个集群的任务管理和资源管理。JobManager 和 TaskManager 之间通过 Ac

2020-06-01 17:26:50

Flink 什么情况下才会把 Operator chain 在一起形成算子链?

两个 operator chain 在一起的的条件: 上下游的并行度一致 下游节点的入度为 1 (也就是说下游节点没有来自其他节点的输入) 上下游节点都在同一个 slot group 中(Slot槽位共享) 下游节点的 chain 策略为 ALWAYS(可以与上下游链接,map、flatmap、filter 等默认 是 ALWAYS) 上游节点的 chain 策略为 ALWAYS 或 HEAD(只能与下游链接,不能与上游链接, Source 默认是 HEAD) 两个节点间数据分区方式是

2020-06-01 17:13:56

Flink的序列化如果做的?

Java 本身自带的序列化和反序列化的功能,但是辅助信息占用空间比较大,在序列化对 象时记录了过多的类信息。Apache Flink 摒弃了 Java 原生的序列化方法,以独特的方式处理 数据类型和序列化,包含自己的类型描述符,泛型类型提取和类型序列化框架。 TypeInformation 是所有类型描述符的基类。它揭示了该类型的一些基本属性,并且可以生 成序列化器。TypeInformation 支持以下几种类型: BasicTypeInfo: 任意 Java 基本类型或 String 类型。

2020-06-01 17:08:47

Flink的内存管理是如何做的?

Flink并不是将大量对象存在堆上,而是将对象都序列化到一个预分配的内存块上。此外,Flink大量的使用了堆外内存。如果需要处理的数据超出了内存限制,则会将部分数据 存储到硬盘上。Flink 为了直接操作二进制数据实现了自己的序列化框架。理论上 Flink 的。内存管理分为三部分: Network Buffers:这个是在 TaskManager 启动的时候分配的,这是一组用于缓存网络数据的内存,每个块是32K,默认分配 2048个,可以通过“taskmanager.network.numberOf

2020-06-01 17:06:13

Flink 是如何保证 Exactly-once语义的?

Flink 通过实现两阶段提交和状态保存来实现端到端的一致性语义。分为以下几个步骤: 开始事务(beginTransaction)创建一个临时文件夹,来写把数据写入到这个文件夹里面。 预提交(preCommit)将内存中缓存的数据写入文件并关闭。 正式提交(commit)将之前写完的临时文件放入目标目录下。这代表着最终的数据会有一些延迟。 丢弃(abort)丢弃临时文件。若失败发生在预提交成功后,正式提交前。可以根据状态来提交预提交的数据,也可删除预提交的数据。...

2020-06-01 17:01:29

Flink分区策略

目前Flink支持8种分区策略:GlobalPartitioner:数据会被分发到下游算子的第一个实例中进行处理。 ShufflePartitioner :数据会被随机分发到下游算子的每一个实例中进行。 RebalancePartitioner:数据会被循环发送到下游的每一个实例中进行处理。 RescalePartitioner :这种分区器会根据上下游算子的并行度,循环的方式输出到下游算子的每个实例。这里有点难以理解,假设上游并行度为 2,编号为 A 和 B。下游并行度为 4,编号为 1,...

2020-06-01 16:47:29

Flink 相比传统的 Spark Streaming 区别?

这个问题是一个非常宏观的问题,因为两个框架的不同点非常之多。但是在面试时有非 常重要的一点一定要回答出来:Flink 是标准的实时处理引擎,基于事件驱动。而 Spark Streaming 是微批(Micro-Batch)的模型。 下面我们就分几个方面介绍两个框架的主要区别: 架构模型:Spark Streaming 在运行时的主要角色包括:Master、Worker、Driver、Executor, Flink 在运行时主要包:Jobmanager、Taskmanager 和 Slot。 任务

2020-06-01 16:30:46

Spark深入浅出之常用Transformation算子功能概述

map(func):返回一个新的RDD,该RDD由每一个输入元素经过func函数转换后组成。 mapPartitions(func):类似于map,但独立地在RDD的每一个分片上运行,因此在类型为T的RD上运行时,func的函数类型必须是Iterator[T] => Iterator[U]。假设有N个元素,有M个分区,那么map的函数将被调用N次,而mapPartitions被调用M次,一个函数一次处理所有分区。 reduceByKey(func,[numTask]):在一个(k,v)的RDD上调

2020-06-01 16:11:50

Java深入浅出之HashMap

HashMap 是使用频率最高的类型之一,同时也是面试经常被问到的问题之一,这是因为 HashMap 的知识点有很多,同时它又属于 Java 基础知识的一部分,因此在面试中经常被问到。HashMap 底层是如何实现的?在 JDK 1.8 中它都做了哪些优化?在 JDK 1.7 中 HashMap 是以数组加链表的形式组成的,JDK 1.8 之后新增了红黑树的组成结构,当链表大于 8 并且容量大于 64 时,链表结构会转换成红黑树结构,它的组成结构如下图所示:数组中的元素我们称之为哈希桶,它的

2020-05-26 14:39:01

Java深入浅出之String

String 是如何实现的?它有哪些重要的方法?以主流的 JDK 版本 1.8 来说,String 内部实际存储结构为 char 数组,源码如下:publicfinalclassStringimplementsjava.io.Serializable,Comparable<String>,CharSequence{//用于存储字符串的值privatefinalcharvalue[];//缓存字符串的hashcode...

2020-05-25 19:31:46

Java深入浅出之线程

线程基本介绍线程(Thread)是并发编程的基础,也是程序执行的最小单元,它依托进程而存在。一个进程中可以包含多个线程,多线程可以共享一块内存空间和一组系统资源,因此线程之间的切换更加节省资源、更加轻量化,也因此被称为轻量级的进程。线程的状态有哪些?它是如何工作的?线程的状态在 JDK 1.5 之后以枚举的方式被定义在 Thread 的源码中,它总共包含以下 6 个状态:NEW,新建状态,线程被创建出来,但尚未启动时的线程状态; RUNNABLE,就绪状态,表示可以运行的线程状态,它可能正

2020-05-25 19:11:18

Spark深入浅出之Actor编程

package actorimport akka.actor.{Actor, ActorSystem, Props}/** * 当继承actor后,就是一个Actor,核心方法receive 方法重写 */class SayHelloActor extends Actor { /** * 1. receive 方法,会被Actor的mailbox(实现了Runnable接口)调用 * 2.当该Actor的mailbox 接收到消息,就会调用了receive * 3.t.

2020-05-25 18:05:48

Java深入浅出之JVM内存模型

一、虚拟机的发展HotSpot VM(SUN) 以前使用范围最广的Java虚拟机JRockit VM(BEA) 号称”世界上最快的Java虚拟机”J9 VM(IBM)Dalvik VM( Google )HotSpot VM(ORACLE) 目前使用范围最广的Java虚拟机二、JVM的整体介绍三、运行时数据区这个是抽象概念,内部实现依赖寄存器、高速缓存、主内存(具体要分析 JVM 源码 C++语言实现,没必要看) 计算机的运行=指令+数据,指令用于执行方法的,数..

2020-05-24 11:35:46

Scala加载外部配置文件速成教学,实时离线都可用。

废话不多说,直接开干。一、配置文件创建及导出 src/resources/application.properties创建 将application.properties文件移到服务器或者本地。二、文件配置读取类编写 示例如下:import java.util.Propertiesobject PropsApp { //TODO 配置文件的加载 val path = "F:\\config\\application.properties"// va...

2020-05-24 10:59:11

查看更多

勋章 我的勋章
  • 领英
    领英
    绑定领英第三方账户获取
  • GitHub
    GitHub
    绑定GitHub第三方账户获取
  • 脉脉勋章
    脉脉勋章
    绑定脉脉第三方账户获得
  • 签到达人
    签到达人
    累计签到获取,不积跬步,无以至千里,继续坚持!
  • 新人勋章
    新人勋章
    用户发布第一条blink获赞超过3个即可获得
  • 阅读者勋章Lv1
    阅读者勋章Lv1
    授予在CSDN APP累计阅读博文达到3天的你,是你的坚持与努力,使你超越了昨天的自己。
  • 持之以恒
    持之以恒
    授予每个自然月内发布4篇或4篇以上原创或翻译IT博文的用户。不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
  • 勤写标兵Lv4
    勤写标兵Lv4
    授予每个自然周发布9篇以上(包括9篇)原创IT博文的用户。本勋章将于次周周三上午根据用户上周的博文发布情况由系统自动颁发。