- 博客(39)
- 收藏
- 关注
原创 Flink大状态优化笔记
一、问题表现1、taskmanager不断重启。2、吞吐量不断下降,数据堆积,checkpoint失败二、解决:1、由于我们是程序开发,自定义状态,所以首先考虑优化中间结构,将原有MapState中的多个值,简化key及value,state减少了1/3,后自定义对象pojo实现序列化接口,方便存取。状态也减少了一些,但是效果不大。2、开启增量(怎么忘记了这个!)new RocksDBStateBackend(checkpointUrl, true)3、做完上面两步后,taskmanager就
2021-02-01 11:10:35 747
原创 《DS调度实时任务优化》详细设计
《DS调度实时任务优化》详细设计需求背景:由于ds的主从结构,且在了解ds的相关运行原理后,发现ds会占用大量的线程尤其是实时任务会一直占用线程轮询yarn上flink任务的执行状态,而我们的最终方案是直接通过yarn获取任务的执行状态,换言之,不需要ds上保存flink任务的执行状态。所以这里的改造方案:当flink任务提交成功后,直接将ds上该任务的状态置为成功,则ds不会持续轮询。一、DS调度实时任务现状1、ds调度任务的总体流程:2、ds调度实时任务的代码分析:2.1 master轮
2020-06-17 17:56:44 4287
原创 Flink的安装和使用(sql,datastream,cep)
一、安装1、环境准备:环境变量配置:export JAVA_HOME=/usr/share/java/jdk1.8.0_131export JRE_HOME=$JAVA_HOME/jreexport CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/libexport PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/binexport HADOOP_HOME=/usr/hdp/3.1.0.0-78/hadoop/export HADOOP_
2020-05-16 10:38:05 2626
原创 Flink的核心概念及运行流程
一、什么是Flinkflink是数据流上的有状态计算,可以用来处理有界和无界数据(实时和批次)。1、应用的场景:• 事件驱动的应用• 数据管道 & ETL• 流式、批次数据分析二、概念及运行流程1、概念1.1、flink的组件堆栈Programs and Dataflows1、DataFlow的基本套路:构建运行环境-》Source(一个或多个)-》转换(算子) -》Sink(一个或多个)多个DataFlow组成DAG。2、并行化DataFlow(Distributed S
2020-05-15 23:45:11 1153
原创 ElasticSearch为什么快
https://www.jianshu.com/p/b50d7fdbe544https://deepexi.yuque.com/ofnx9c/yga6g1/lpz5mf/editES的最佳实践搜索和写入时节点的通信
2020-03-13 17:29:24 2466
原创 DolphinScheduler1.2源码开发环境搭建及架构分析
一、本地开发环境的搭建1、准备工作:1.1、环境:后端JDK(1.8+)Maven(3.3+)最好在本地解压一个hadoop并配上环境变量(不配好像会报一个winutils…的问题)前端node(Node包下载 (注意版本 8.9.4) https://nodejs.org/download/release/v8.9.4/)本地环境变量的配置:1.2、源码下载git...
2020-03-06 18:48:28 3136
原创 Datax的执行流程源码分析
DataX的框架的核心部分1、配置贯穿DataX,all in configuration,将配置的json用到了极致2、另一块是通过URLClassLoader实现插件的热加载。Job&Task概念 在DataX的逻辑模型中包括job、task两个维度,通过将job进行task拆分,然后将task合并到taskGroup进行运行。job实例运行在jobContainer容器中,...
2020-02-14 19:41:07 954
原创 在使用ssh命令的时候发现java版本不一致
在使用ssh命令的时候发现java版本不一致通过ssh登陆之后会发现找不到JAVA_HOME ,我的JAVA_HOME是定义在/etc/profile 里面的。研究后发现远程登录和直接登录执行的文件是不一样的:/etc/profile: 当用户登录时,该文件被执行./etc/bashrc: 当bash shell被打开时,该文件被执行.ssh作为远程登录的方式进入,当然就无法触发/etc...
2019-10-12 09:50:50 648
原创 Zookeeper选举方式,watch机制及基本操作
一、概念1、Zookeeper是一个分布式协调服务的开源框架,本质是一个分布式的小文件存储系统,主要用来解决分布式集群中,应用系统的一致性问题。2、架构图Leader (Zookeeper集群工作的核心)事务请求(写操作) 的唯一调度和处理者,保证集群事务处理的顺序性;集群内部各个服务器的调度者。*事务:对于 create, setData, delete 等有写操作的请求,则需要...
2019-07-28 21:05:58 568
原创 解决虚拟机克隆网卡问题
因为一般我们克隆时要同时克隆几台机器,所以建议在克隆前解决后面可能会出现的网卡问题1、准备好要克隆的原机器:配置网络2、接下来是重点:删除/etc/udev/rules.d/70-persistent-net.rules的文件原因:应保证图中的两个地址一样,而如果上图的文件不删除会保留原克隆机的地址,导致新克隆的机器无法使用而重新生成一张新的网卡如果/etc/udev/rul...
2019-06-09 12:43:52 474
原创 归并排序
1、归并操作(merge),也叫归并算法,指的是将两个顺序序列合并成一个顺序序列的方法。如 设有数列{6,202,100,301,38,8,1}初始状态:6,202,100,301,38,8,1第一次归并后:{6,202},{100,301},{8,38},{1},比较次数:3;第二次归并后:{6,100,202,301},{1,8,38},比较次数:4;第三次归并后:{1,6,8,38...
2019-05-25 08:28:02 261
原创 堆排序
1、堆排序:是直接选择排序的升级版,是不稳定的排序2、时间复杂度:T(n)= O(nlogn),3、堆是具有以下性质的完全二叉树:每个结点的值都大于或等于其左右孩子结点的值,称为大顶堆;每个结点的值都小于或等于其左右孩子结点的值,称为小顶堆。我们用简单的公式来描述一下堆的定义就是:大顶堆:arr[i] >= arr[2i+1] && arr[i] >= a...
2019-05-24 14:25:55 204
原创 希尔排序
1、希尔排序:是简单插入排序的改进版,是不稳定的排序2、时间复杂度:T(n) = O(n的平方),空间复杂度:S(n) = O(1)3、基本思想:希尔排序是把记录按下标的一定增量分组,对每组使用直接插入排序算法排序;随着增量逐渐减少,每组包含的关键词越来越多,当增量减至1时,整个文件恰被分成一组,算法便终止。代码实现public class ShellSort { public s...
2019-05-24 11:31:40 201
原创 MyBatis逆向工程
1、环境:在IDEA上使用maven的mybatis插件生成逆向工程2、创建maven项目2.1 pom文件中的配置<dependencies> <dependency> <groupId>log4j</groupId> <artifactId>log4j</...
2019-05-22 16:34:52 244
原创 快速排序
1、快速排序是冒泡排序的升级版,思想主要是分治加递归,是不稳定的排序由于使用递归,需要的空间比较大,所以不适合数据量大的情况下使用2、时间复杂度: T(n) = O(nlogn)(平均情况),最快情况:T(n) = O(n的平方)空间复杂度:S(n) = O(nlogn)3、实现:(1)分区(2)递归public class TestQuickSort { publi...
2019-05-21 15:08:22 225
原创 排序算法及三种基本排序(冒泡排序、选择排序、直接插入排序)
一、排序的分类及效率分析二、三种基本排序(冒泡排序、选择排序、直接插入排序)的java代码实现/* 三种基本排序:T(n) = O(n的平方),S(n) = O(1) 1、直接选择排序 不稳定的排序 2、冒泡排序 稳定的排序 3、直接插入排序 稳定的排序 */public class BasicSort { public...
2019-05-20 10:44:51 899
原创 哈希表(散列存储)
一般查找是通过将关键字值与给定值比较来确定位置,效率取决于比较次数。理想的方法是:不需要比较,根据给定值能直接定位记录的存储位置。一、hashtable 也叫散列表特点是很快,结构有多种,最流行、最容易理解的为顺序表—+链表,主结构为顺序表,每个顺序表的节点在单独引出一个链表。1、哈希表添加数据:(1)计算哈希码(调用hashcode)(2)计算在hash表中的存储位置(3)存入h...
2019-05-19 14:28:22 3560
原创 二叉查找树(BST)及红黑树
一、定义:或者是一棵空树或者是具有下列性质的二叉树(1)当左子树不空,则左子树上所有结点的值均小于它的根结点的值;(2)它的右子树上所有结点的值均大于它的根节点的值(3)它的左、右子树也分别为二叉排序树二、分类1、平衡二叉树是自平衡的二叉查找树,又被称为AVL树(有别于AVL算法)它的左右两个子树的高度差(平衡因子)的绝对值不超过1,并且左右两个子树都是一颗平衡二叉树2、红黑树...
2019-05-18 15:31:10 457
原创 线性表查找(顺序查找,二分查找)
1、顺序查找(无序)2、折半查找(必须是有序数组)实现代码(java)public class lineSearch { //测试代码 public static void main(String[] args) { //顺序查找 int[] arr1 = {34,76,23,98,87,35,8,32,74,44}; int ...
2019-05-18 08:17:58 1707
原创 图及最短路径
一、图1、定义:描述的是多对多的关系,图是一种网状数据结构,图是由非空的顶点集合和一个描述顶点之间关系(边)的集合组成。2、分类:3、图的存储(1)邻接矩阵:二维数组 顺序存储结构(2)邻接表:链表 链式存储结构4、应用:各种地图,地铁线路图等二、图的遍历1、概念图的遍历就是从图中某个顶点出发,按某种方法对图中所有顶点访问且仅访问一次。图的遍历算法是求解图的连通性...
2019-05-16 13:23:10 2480
原创 树和二叉树的先、中、后序遍历
一、树的一些概念:1、结点的度与树的度:结点的度:结点拥有的子树的数目(度为0的结点称为叶子结点)树的度:树内各结点的度的最大值2、结点的层次(level)和树的深度(depth)结点的层次:从根开始定义,层次数为1的结点是根结点。树的深度:树中结点的最大层次数称为树的深度或高度3、有序树、m叉树,森林有序树:树中结点的各子树看成是从左至右有次序的。m叉树:树中所...
2019-05-15 19:35:57 1108
原创 数据结构-栈和队列
一、栈1、栈的定义栈(stack )又称堆栈,它是运算受限的线性表。其限制是仅允许在表的一端进行插入和删除操作,不允许在其他任何位置进行插入、查找、删除等操作。表中进行插入、删除操作的一端称为 栈顶(top) ,栈顶保存的元素称为 栈顶元素。相对的,表的另一端称为栈底(bottom)当栈中没有数据元素时称为空栈;向一个栈插入元素又称为 进栈或 入栈;从一个栈中删除元素又称为 出栈或...
2019-05-14 08:56:36 306
原创 算法、时间复杂度及空间复杂度概念
算法一、概念:是指令的集合,是为解决特定问题而规定的一系列操作。它是明确定义的可计算过程,以一个数据集合作为输入,并产生一个数据集合作为输出。1、一个算法通常来说具有以下五个特性:输入:一个算法应以待解决的问题的信息作为输入。输出:输入对应指令集处理后得到的信息。可行性:算法是可行的,即算法中的每一条指令都是可以实现的,均能在有限的时间内完成。有穷性:算法执行的指令个数是有限的,...
2019-05-13 08:35:30 1136
原创 数据结构概念
数据结构数据结构=逻辑结构+存储结构+(在存储结构上的)运算/操作举例:线性表的逻辑结构如图所示:线性表逻辑结构对应的顺序存储结构为顺序表,对应的链式存储结构为链表。顺序表链表同一逻辑结构可以对应多种存储结构。同样的运算,在不同的存储结构中,其实现过程是不同的一、逻辑结构(1)线性结构:数据结构中线性结构指的是数据元素之间存在着“一对一”的线性关系的数据结构。线性...
2019-05-12 15:31:37 270
原创 线性表(数组、链表)-ArrayList与LinkedList的自定义java实现
一、常见数据结构之链表和数组总结:List:ArrayList:底层数据结构是数组,查询快,增删慢LinkedList:底层数据结构是链表,查询慢,增删快二、自定义类实现ArrayList与LinkedList帮助理解java底层代码及数据结构,阅读难度会比源码简单。1、MyArrayList的实现(java代码)public class MyArrayList<AnyT...
2019-05-11 21:36:01 474
原创 多线程同步工具CountdownLatch,CyclicBarrier,Exchanger,Semaphore
一、CountdownLatch允许一个或多个线程等待直到在其他线程中执行的一组操作完成。示例代码:public class CountdownLatchTest { public static void main(String[] args) { ExecutorService service = Executors.newCachedThreadPool(); final...
2019-04-29 18:43:15 195
原创 线程锁(Lock)、读写锁(ReadWriteLock)及条件阻塞Condition
一、线程锁(Lock)Lock实现提供比使用synchronized方法和语句可以获得的更广泛的锁定操作。 它们允许更灵活的结构化,可能具有完全不同的属性,并且可以支持多个相关联的对象Condition 。示例代码:public class LockTest { public static void main(String[] args) { new LockTes...
2019-04-29 18:28:59 1530
原创 线程池Executors
一、线程池的概念Java里面线程池的顶级接口是 java.util.concurrent.Executor ,但是严格意义上讲 Executor 并不是一个线程池,而只是一个执行线程的工具。真正的线程池接口是 java.util.concurrent.ExecutorService 。要配置一个线程池是比较复杂的,尤其是对于线程池的原理不是很清楚的情况下,很有可能配置的线程池不是较优的,...
2019-04-29 14:10:59 190
原创 线程范围内共享数据ThreadLocal
一、ThreadLocal概念:ThreadLocal的实例代表了一个线程局部的变量,ThreadLocal为变量在每个线程中都创建了一个副本,那么每个线程可以访问自己内部的副本变量。它采用采用空间来换取时间的方式,解决多线程中相同变量的访问冲突问题。实现原理:由下方源码可知,ThreadLocal实际上是用当然的Thread对象为键使用map实现效果的。//源码:private T...
2019-04-29 12:00:58 270
原创 传统多线程相关技术
一、多线程的实现方式1、继承Thread类Thread t2 = new Thread(){ @Override public void run() { try { Thread.sleep(500); } catch (Interrupted...
2019-04-29 08:51:57 207
原创 自定义泛型
一、泛型的内部原理(以集合为例)泛型是提供给javac编译器使用的,可以限定集合中的输入类型,让编译器挡住源程序中的非法输入,编译器编译带类型说明的集合时会擦除掉“类型”信息,使程序运行效率不受影响。由于jvm是不知道类型信息的,所以只要能跳过编译器,就可以往某个泛型集合中加入其它类型的数据。参考代码:ArrayList<Integer> list1 = new ArrayList...
2019-04-28 19:30:45 370
原创 动态代理Proxy
一、动态代理的作用:对某一个对象的某一个功能进行增强。与装饰模式不同的是,装饰模式往往是增加一个新的功能,而代理模式是在已有功能的基础上加强。二、动态代理的要素:1、接口:是对接口中的方法进行代理2、被代理对象3、代理对象三、案例public class ProxyDemo { public static void main(String[] args) { //...
2019-04-28 19:15:50 389
原创 自定义注解及注解的解析
一、注解的概念1、注解是JDK1.5开始的概念2、注解相当于一种标记,是类的组成部分,可以给类携带一些额外的信息。但是去掉注解,该类依然是一个完整的类。3、注解是给编译器或JVM看的,编译器或JVM可以根据注解来完成对应的功能。二、自定义注解2.1、定义格式public @interface 注解名{}如:定义一个名为Student的注解public @interface Stu...
2019-04-27 21:01:24 1273
原创 反射的综合案例
一、案例说明编写一个工厂方法可以根据配置文件产任意类型的对象。例如有配置文件stu.properties,存储在项目的src文件夹下内容如下:class=com.itheima.reflect.Student name=rose gender=女 age=18根据配置文件信息创建一个学生对象。二、案例代码public class Demo{ public static void...
2019-04-27 18:58:54 310
原创 位运算符
注意:要做位运算,首先要把数据转换为二进制1、&,|,^, ~:class OperatorDemo { public static void main(String[] args) { int a = 3; int b = 4; System.out.println(3 & 4); //0 System.out.println(3 | 4...
2019-04-27 14:32:29 205
原创 原码、反码和补码
有符号数据的表示法:原码、反码和补码学习目的:因为计算机在操作的时候,都是采用数据对应的二进制的补码来计算的示例:用原码,反码和补码分别表示+7和-7...
2019-04-27 14:00:08 490
原创 二、八、十、十六进制之间的转换
一、二进制到任意进制之间的转换二、任意进制到十进制之间的转换快速计算:系数*基数的权次幂,其中权从0开始计数如: 八进制的255 = 2 * 82 + 5 * 81 + 5 * 80 = 173十六进制的AD = 10 * 161 + 13 * 16 0 = 173三、十进制到任意进制之间的转换1、十进制->二进制2、十进制到十六进制(同理):如果熟练,可...
2019-04-27 13:53:14 1920
原创 Java反射获取类的构造方法、属性和成员方法及使用
public class ReflectTest { public static void main(String[] args) {//com.generic.Manager //获取输入的类的名称 String name; if(args.length>0) name = args[0]; else{ Scanner in = new Scanner(Syste...
2019-03-18 20:28:16 1315 1
原创 Java反射及如何获得Class对象
获取Class类的三种方式方法一 //创建对象 Manager m = new Manager(); //获取Classd对象 Class m1 = m.getClass(); //得到类名(带包名) System.out.println(m1.getName());方法二 //通过类的名称得到Class对象 Class m2 = Class.forName("com.gen...
2019-03-18 20:07:13 281
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人