- 博客(174)
- 资源 (11)
- 收藏
- 关注
原创 8、Akka任务调度(Dispatcher)
Dispatcher解析Dispatcher是将如何执行任务与何时运行任务两者解耦,所 Actor或Future的工作都是由 (Executor或Dispatcher)分配的资源来完成的。一般来说,Dispatcher会包含一些线程, 这些线程会负责调度并运行任务, 比如处理 Actor 的消息以及线程中的Future事件。不自己创建Dispatcher时使用的是默认Dispathcer,如果任务中有些耗时任务,容易将默认线程池打满,影响其他任务的调度。ExcutorDispatcher 基于
2021-01-29 18:00:47
2623
1
翻译 9、Akka中邮箱(MailBox)
简介Akka 的邮箱中保存着发给 Actor 的信息。通常,每个 Actor 都有自己的邮箱,但也有例外,如使用BalancingPool,则所有路由器(routees)将共享一个邮箱实例。邮箱选择默认邮箱未指定邮箱时,使用默认邮箱。默认情况下,它是一个无边界的邮箱,由java.util.concurrent.ConcurrentLinkedQueue支持。SingleConsumerOnlyUnboundedMailbox是一个效率更高的邮箱,它可以用作默认邮箱,但不能与BalancingDis
2021-01-29 17:59:12
3794
原创 MapReduce处理原理
分析上图:输入分片(input split):在进行map计算之前,mapreduce会根据输入文件计算输入分片(input split),每个输入分片(input split)针对一个map任务,输入分片(input split)存储的并非数据本身,而是一个分片长度和一个记录数据的位置的数组,输入分片(input split)往往和hdfs的block(块)关系很密切,假如我们设定hdfs的块的大小是64mb(现在是128M),如果我们输入有三个文件,大小分别是3mb、127mb和129mb,那么.
2021-01-26 12:30:56
1580
原创 7、Akka中Router路由机制
Router基本概念在Akka中,Router 也是一种 actor 类型,是负责负载均衡和路由的抽象,把消息按照路由规则调度,分配给Routee去运算,用于调度actor任务或进行负载均衡策略它路由到来的消息到其他的actors,其他那些actors就叫做routees(被路由对象)。创建方式有两种方式来创建RouterActor Group:Routees由外界其它Actor产生(自行创建,自行管理),特点是能实现灵活的Routee构建和监控。List<Routee> ro
2021-01-19 13:11:00
2149
原创 6、Akka状态切换
在Akka中,Actor也经常会处在一个无法处理某些消息的状态。例如数据库客户端离线了,那么在重新上线之前,它都无法处理任何消息。我们可以选择不断重新建立客户端的连接,直到连接成功为止。在这种情况下,在成功连接之前,客户端会丢弃收到的所有消息。另一种做法是把客户端无法处理的消息先放在一旁,等到客户端恢复连接状态之后再做处理。Akka提供了一种叫做stash的机制,用于对于Akka中消息状态的来回切换:stash:将消息暂存到一个独立的队列中,该队列存储目前无法处理的消息:unstash:把消息从暂存
2021-01-13 22:27:20
1927
2
原创 5、Akka Actor生命周期
Actor生命周期Actor的生命周期是使用Hooks体现和控制的,我们可以重写相关的Hooks,从而实现对Actor生命周期各环节的细粒度控制,各种Hook顺序关系如下图:[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传prestart():在构造函数之后调用,重启时不会执行。postStop():在重启之前调用,异常重启时不会执行。preRestart(reason, message):在 actor 异常重启前保存当前状态,默认情况下会调用 postStop()。po
2021-01-13 13:41:42
1945
3
原创 4、Akka容错处理
监督(Supervision)容错(fault tolerance)概念与 Actor 相关,Actor 模型中容错处理使用叫做监督(supervision)处理。监督的核心思想就是把对于失败的响应和可能引起失败的组件分隔开,并且把可能发生错误的组件通过层级结构来组织,以便管理。在分布式系统中每个组件都是一个定时炸弹,那么我们希望能够确保无论其中任何一个发生爆炸,都不会引发链式反应,导致其他组件也爆炸。也可以说,我们希望能够隔离错误,或是将可能引发失败情况的组件分离开来。监督的层级结构Akka
2021-01-11 13:32:42
2437
原创 3、Akka传递消息
1 消息传递Akka 有 4 种核心的 Actor 消息模式: tell 、ask 、forward 和 pipe。Ask:向 Actor 发送一条消息,返回一个 Future。当 Actor 返回响应时,会返回 Future。不会向消息发送者的邮箱返回任何消息。Tell:向 Actor 发送一条消息。所有发送至 sender()的响应都会返回给发送消息的 Actor。Forward:将接收到的消息再发送给另一个 Actor。所有发送至 sender() 的响应都会返回给原始消息的发送者。Pip
2021-01-07 19:33:10
4727
1
转载 Java并发编程:CountDownLatch、CyclicBarrier和Semaphore
原文地址:https://www.cnblogs.com/dolphin0520/p/3920397.html在java 1.5中,提供了一些非常有用的辅助类来帮助我们进行并发编程工具类,比如CountDownLatch,CyclicBarrier和Semaphore,今天我们就来学习一下这三个辅助类的用法。一. CountDownLatch用法CountDownLatch类位于java.util.concurrent包下,利用它可以实现类似计数器的功能。比如有一个任务A,它要等待其他4个任务执行.
2021-01-07 12:50:14
3905
原创 维度建模之缓慢渐变维
维度建模之缓慢渐变维在从 OLTP 业务数据库向 DW 数据仓库抽取数据的过程中,特别是第一次导入之后的每一次增量抽取往往会遇到这样的问题:业务数据库中的一些数据发生了更改,到底要不要将这些变化也反映到数据仓库中?在数据仓库中,哪些数据应该随之变化,哪些可以不用变化?考虑到这些变化,在数据仓库中的维度表又应该如何设计以满足这些需要。每天保存当前数据的全量快照数据,该方案适合数据量较小的维度,使用简单的方式保存历史状态在维表中添加关键属性值的历史字段,仅保留上一个的状态值拉链表什
2021-01-06 13:44:10
4927
原创 (五) 数据结构 - 归并排序
归并排序归并排序是一种基于分而治之的排序技术。最坏情况下的时间复杂度为O(nlogn),它是最受人尊敬的算法之一。归并排序首先将数组分成相等的两半,然后以排序的方式将它们合并。核心思想为了理解合并排序,我们采用未排序的数组,如下所示我们知道归并排序首先将整个数组迭代地分成相等的一半,除非获得原子值。我们在这里看到一个由8个项目组成的数组分为两个大小为4的数组。这不会更改原件中项目出现的顺序。现在我们将这两个数组分为两半。我们进一步划分这些数组,并获得无法再划分的原子值现在,我们将它
2021-01-05 23:23:15
4036
原创 2、Akka并发编程设计
1 响应式系统设计Akka 被称为是一个响应式平台,更具体的说,它是 Typesafe 响应式平台的一部分。响应式宣言中包含了 4 个准则,也可以说是设计目标:灵敏性、伸缩性、容错性以及事件驱动设计。1.1 灵敏性应用程序应该尽可能快的对请求做出响应。为了尽快向用户返回响应,在顺序获取数据和并行获取数据之间选择的话,始终应该优先选择并行获取数据。如果可能出现错误,应该立即返回,将问题通知用户,不要让用户等待直到超时。1.2 伸缩性应用程序应该能够根据不同的工作负载进行伸缩扩展(尤其是通过增加计算
2021-01-05 22:16:39
4086
原创 1、Akka简介&常用API介绍
Akka简介Akka是Java虚拟机平台上构建高并发、分布式和容错应用的工具包和运行时。Akka用Scala语言编写,同时提供了Scala和Java的开发接口。Akka可以以两种不同的方式来使用以库的形式:在web应用中使用,放到 WEB-INF/lib 中或者作为一个普通的Jar包放进classpath。以微内核的形式:你可以将应用放进一个独立的内核。自己有一个main类来初始化Actor系统。Akka几大特性易于构建并行和分布式应用 (Simple Concurrency &
2020-12-22 21:50:13
4654
原创 Builder建造者模式
建造者模式是日常开发中比较常见的设计模式,它的主要作用就是将复杂事物创建的过程抽象出来,该抽象的不同实现方式不同,创建出的对象也不同。通俗的讲,创建一个对象一般都会有一个固定的步骤,这个固定的步骤我们把它抽象出来,每个抽象步骤都会有不同的实现方式,不同的实现方式创建出的对象也将不同。举个常见的例子,想必大家都买过电脑,电脑的生产或者组装其实就是属于建造者模式,我们知道,电脑的生产都需要安装CPU、内存条、硬盘等元器件。我们可以把这个安装步骤抽象出来,至于到底装哪种CPU,比如i5还是i7就是对该抽象安装步.
2020-12-10 22:11:49
3986
转载 UML类图与时序图
UML是什么UML定义:统一建模语言(Unified Modeling Language,缩写UML)非专利的第三代建模和规约语言UML特点:UML是一种开放方法用于说明、可视化、构建和编写一个正在开发的、面向对象的、软件密集系统的制品的开放方法UML展现了一系列最佳工程实践,这些最佳实践在对大规模,复杂系统进行建模方面,特别是在软件架构层次已经被验证有效在UML2.2中一共定义了14中图示,大体分为三类:结构式图形:强调的是系统式的建模行为式图形:强调系统模型中触发的事件交
2020-12-06 11:09:14
5258
转载 Java设计模式-工厂模式
原文地址:https://www.cnblogs.com/yssjun/p/11102162.html工厂顾名思义就是创建产品,根据产品是具体产品还是具体工厂可分为简单工厂模式和工厂方法模式,根据工厂的抽象程度可分为工厂方法模式和抽象工厂模式。该模式用于封装和管理对象的创建,是一种创建型模式。本文从一个具体的例子逐步深入分析,来体会三种工厂模式的应用场景和利弊。1. 简单工厂模式该模式对对象创建管理方式最为简单,因为其仅仅简单的对不同类对象的创建进行了一层薄薄的封装。该模式通过向工厂传递类型来指定.
2020-11-26 11:42:34
3906
转载 Spark Shuffle运行原理
1.什么是spark shuffle?Shuffle中文意思就是“洗牌”,在Spark中Shuffle的目的是为了保证每一个key所对应的value都会汇聚到同一个分区上去聚合和处理。Shuffle 过程本质上都是将 Map 端获得的数据使用分区器进行划分,并将数据发送给对应的 Reducer 的过程。shuffle是连接Map和Reduce之间的桥梁,Map的输出要用到Reduce中必须经过shuffle这个环节,shuffle的性能高低直接影响了整个程序的性能和吞吐量。因为在分布式情况下,reduc
2020-09-07 12:48:19
6442
1
原创 JAVA线程(状态、终止、通信、封闭)
线程(thread)是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。线程状态线程几种状态线程的状态在java中有明确的定义,在java.lang.Thread.State中有6种。New:线程被创建,未执行和运行的时候Runnable:不代表线程在跑,两种:被cpu执行的线程,随时可以被cpu执行的状态。Blocked:线程阻塞,处于synchronized同步代码块
2020-08-30 12:48:51
4041
2
原创 JAVA垃圾回收机制
JAVA 内存运行时区域中的程序计数器、虚拟机栈、本地方法栈随线程而生灭,栈中的栈帧随着方法的进入和退出而有条不紊地执行着出栈和入栈操作。每一个栈帧中分配多少内存基本上是在类结构确定下来时就已知的(尽管在运行期会由 JIT 编译器进行一些优化),因此这几个区域的内存分配和回收都具备确定性,不需要过多考虑回收的问题,因为方法结束或者线程结束时,内存自然就跟随着回收了。而 Java 堆不一样,一个接口中的多个实现类需要的内存可能不一样,一个方法中的多个分支需要的内存也可能不一样,我们只有在程序处于运行期间时才
2020-08-26 13:13:22
3995
原创 JAVA类加载机制
运行时数据区Java的程序要运行需要将编译好的class文件加载到JVM运行时数据区。JVM用来存储加载的类信息、常量、静态变量、编译后的代码等数据。在虚拟机规范中,这是一个逻辑区划。具体实现根据不同虚拟机来实现。如:oracle的HotSpot在java7中方法去放在永久代,java8放在元数据空间,并且通过GC机制对这个区域进行管理那么class文件是怎么加载进去的?类生命周期在了解类的加载机制之前,我们需要了解一下类的生命周期。Java类从被加载到JVM内存开始,到卸载出内存为止,它的整个
2020-08-26 09:51:05
3909
转载 Adaptive让 Spark SQL 更高效更智能
本文转发自技术世界,原文链接 http://www.jasongj.com/spark/adaptive_execution/1 背景前面《Spark SQL / Catalyst 内部原理 与 RBO》与《Spark SQL 性能优化再进一步 CBO 基于代价的优化》介绍的优化,从查询本身与目标数据的特点的角度尽可能保证了最终生成的执行计划的高效性。但是执行计划一旦生成,便不可更改,即使执行过程中发现后续执行计划可以进一步优化,也只能按原计划执行CBO 基于统计信息生成最优执行计划,需要提前.
2020-07-16 15:58:20
5080
原创 Spark中共享变量
Spark一个非常重要的特性就是共享变量。默认情况下,如果在一个算子的函数中使用到了某个外部的变量,那么这个变量的值会被拷贝到每个task中。此时每个task只能操作自己的那份变量副本。如果多个task想要共享某个变量,那么这种方式是做不到的。Spark为此提供了两种共享变量,一种是Broadcast Variable(广播变量),另一种是Accumulator(累加变量)。Broadca...
2020-05-19 11:04:12
4867
原创 任务提交SparkSubmit源码解析
1. 前言反反复复捣鼓了很久,终于开始学习Spark的源码了,果不其然,那真的很有趣。这里我打算一本正经的胡说八道来讲一下Spark作业的提交过程。基础mac系统基础环境如下:JDK 1.8IDEA 2019.3源码Spark 2.3.3Scala 2.11.8提交脚本# 事先准备好的Spark任务(源码example LocalPi)基于local模式b...
2020-04-16 13:49:02
4647
1
原创 Reactor线程模型
1.Reactor线程模型传统阻塞IO模型存在以下问题:每个连接都需要独立线程处理,当并发数大时,创建线程数多,占用资源采用阻塞IO模型,连接建立后,若当前线程没有数据可读,线程会阻塞在读操作上,造成资源浪费针对于存在的问题可以采取以下方案:基于线程池思想,避免为每个连接创建线程,连接完成后将业务处理交给线程池处理。基于IO复用模型,多个连接共用同一个阻塞对象,不用等待所有的连接...
2020-04-09 18:30:26
4180
原创 一文读懂Java NIO模型
Java IO读写原理在操作系统中,程序运行的空间分为内核空间和用户空间。应用程序都是运行在用户空间的,所以它们能操作的数据也都在用户空间。IO共分为两阶段:数据准备阶段(写入内核缓冲区)。内核缓冲区(内核空间)复制数据到用户进程缓冲区(用户空间)阶段。一旦拿到数据后就变成了数据操作,不再是IO操作。内核缓冲区与进程缓冲区缓冲区的目的,是为了减少频繁的系统IO调用。大家都知道...
2020-04-08 12:38:59
4187
1
原创 Java线程安全中的原子性操作
原子操作可以是一个步骤,也可以是多个操作步骤,但是其顺序不可以被打乱,也不可以被切割,而只执行其中的一部分(不可中断性)。将整个操作视作一个整体,资源在该次操作中保持一致,这是原子性的核心特征。说到原子性,在Java中一共有两个方面需要学习和掌握一个是JDK中已经提供好的Atomic包,他们均使用了CAS完成线程的原子性操作。另一个是使用锁的机制来处理线程之间的原子性。锁包括synch...
2020-04-02 23:13:46
4197
转载 竞态条件与临界区
原文链接:http://ifeve.com/race-conditions-and-critical-sections/在同一程序中运行多个线程本身不会导致问题,问题在于多个线程访问了相同的资源。如,同一内存区(变量,数组,或对象)、系统(数据库,web services等)或文件。实际上,这些问题只有在一或多个线程向这些资源做了写操作时才有可能发生,只要资源没有发生变化,多个线程读取相同的资源...
2020-04-02 12:32:34
3998
原创 大数据学习视频
课程链接地址【极限班培训】大数据hadoop+strom+spark+openstack等链接:https://pan.baidu.com/s/1fUjzNZnGbYWuOPWibB0bwA大数据实时计算系统实践Flink链接:https://pan.baidu.com/s/1I8Eaih_zH0In6MiCIV7_Vg10小时入门大数据链接:https://...
2020-04-02 10:08:10
5174
4
原创 Happens-Before保证线程可见
前言熟悉 Java 并发编程的都知道,JMM(Java 内存模型) 中的 happen-before规则,该规则定义了 Java 多线程操作的有序性和可见性,防止了编译器重排序对程序结果的影响。按照官方的说法:当一个变量被多个线程读取并且至少被一个线程写入时,如果读操作和写操作没有 happens-before 关系,则会产生数据竞争问题。要想保证操作 B 的线程看到操作 A 的结果(无...
2020-03-31 21:07:03
4179
翻译 理解JIT编译与优化
对Oracle JRockit JVM如何生成、编译、执行代码进行了介绍。不仅仅是“黑匣子”从用户的角度来看,JRockit JVM只是一个黑盒子,它将Java代码“转换”为高度优化的机器代码:将Java代码放入JVM的一端,而另一端则是特定平台的机器代码。揭开黑匣子的盖子时,您会看到在针对特定操作系统优化代码之前采取的不同操作。在代码离开JVM之前,发生了以下的一些操作,数据结构更改...
2020-03-31 13:41:23
4243
原创 Java学习资料整合
课程网盘地址Activiti6.0工作流引擎深度解析与实战链接:https://pan.baidu.com/s/1I6sTRM-nvoGXVV2fWWWtkgZooKeeper分布式专题与Dubbo微服务入门链接:https://pan.baidu.com/s/1DjAH5qaEc_zQvf5lNNCiewDocker+Kubernetes(k8s)微服务容器化...
2020-03-29 13:09:20
5436
原创 Java线程池的使用
为什么要用线程池?线程是不是越多越好?线程在java中是一个对象,更是操作系统的资源,线程创建、销毁需要时间。如果创建时间+小会时间>执行任务时间就很不合算。java对象占用堆内存,操作系统线程占用系统内存,根据jvm规范,一个线程默认最大栈大小1M,这个栈空间是需要从系统内存中分配的。线程过多,会消耗很多的内存。操作系统需要频繁切换线程上下文(每个线都想被运行),影响性能。线...
2020-03-27 15:44:17
3927
翻译 Flink Table Api详解(算子)
该文章主要是对Flink官网相关内容进行翻译,原文地址:https://ci.apache.org/projects/flink/flink-docs-release-1.10/dev/table/tableApi.html#over-windowsTable API是用于流和批处理的统一的关系API。Table API查询可以在批处理或流输入上运行而无需修改。Table API是SQL语言...
2020-03-05 13:50:31
10974
翻译 Table Api & SQL查询配置(状态清理)
该文章主要是对Flink官网相关内容进行翻译,原文地址: https://ci.apache.org/projects/flink/flink-docs-release-1.10/dev/table/streaming/query_configuration.html无论Table API和SQL查询的输入是有界批处理输入还是无界流输入,其语义都相同。在许多情况下,对流输入的连续查询能够计算...
2020-03-02 13:13:25
5344
原创 Table Api & SQL连续查询Join
该文章主要是对Flink官网相关内容进行翻译,原文地址:https://ci.apache.org/projects/flink/flink-docs-release-1.9/dev/table/streaming/time_attributes.htmlJoin是批处理数据处理中常见且易于理解的操作,用于连接两个关系的行。 但是,动态表上的连接语义不太明显甚至令人困惑。在Flink中有几...
2020-02-19 13:55:55
4710
原创 Flink Table API & SQL时间属性
该文章主要是对Flink官网相关内容进行翻译,原文地址:https://ci.apache.org/projects/flink/flink-docs-release-1.9/dev/table/streaming/time_attributes.htmlFlink能够根据不同的时间概念处理流数据。处理时间是指正在执行相应操作的机器的系统时间(也称为“挂钟时间”)。事件时间是指基于附加...
2020-02-18 22:36:43
6935
原创 Flink Temporal tables
该文章主要是对Flink官网相关内容进行翻译,原文地址:https://ci.apache.org/projects/flink/flink-docs-release-1.9/dev/table/streaming/temporal_tables.html#temporal-table-functions时态表(又称之为临时表)表示改变的历史记录表上的(参数化)视图的概念,该表返回特定时间点...
2020-02-18 18:52:18
5360
原创 Flink动态表 (Dynamic Table)
传统的数据库SQL在设计时并未考虑流数据。但是结果,传统的数据库SQL处理与流处理之间在概念上几乎没有差距。本文主要是想说一下Flink动态表的思路。主要是可以类比传统数据库的物化视图。翻译于(官网)原地址:https://ci.apache.org/projects/flink/flink-docs-release-1.9/zh/dev/table/streaming/dynamic_tab...
2020-02-12 00:22:16
9469
1
原创 Flink 1.9 Table API& Sql支持的Data Type
Flink 1.9 Table API & SQL 新特性主要包括如下:全新的 SQL 类型系统:Table API & SQL 1.9 引入了全新的 SQL 的类型系统。以往的Table 层的类型系统复用了 Runtime 的 TypeInformation,但在实际操作过程当中遇到较多的限制。引入全新的 SQL 类型系统可以更好的对齐 SQL 语义。DDL初步支持:这个...
2020-02-11 19:37:51
8209
Oracle经典教程_入门(夯推).pdf
2020-11-19
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅