自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(48)
  • 资源 (3)
  • 收藏
  • 关注

原创 datax(八)源码阅读之reader、writer协作机制

目录一、前言二、核心源码解读①writer线程②reader线程③源码流程图三、总结一、前言我们都知道我们在使用datax完成一个异构数据源的同步任务的时候,比如从mysql读取一张表写入到hdfs,我们只需要配置一个json文件进行reader和writer的配置,然后执行datax,他就会不断的从reader处拉取数据写入到writer,这个过程是持续进行的,直到所需要的数据都读取且写入完毕,才算完成任务,那么这个过程中reader和writer是怎么协作的呢,我们下面慢

2021-01-03 18:32:26 2818

原创 datax(六)源码阅读之外部插件加载机制(reader、writer)

目录一、插件使用方法二、插件机制原理三、源码走读四、QA一、插件使用方法众所周知,datax通过插件机制,动态的在运行时载入reader和writer进行数据同步的执行。站在用户侧,用户只需要做下列步骤就可以实现插件执行1、按datax的约定实现自己的插件,并放在${DATAX_HOME}/plugin/reader/或者${DATAX_HOME}/plugin/writer/目录下,以mysqlreader为例jar包就是用户实现的mysqlreader插件,lib

2021-01-02 21:34:03 1757 1

原创 datax(七)源码阅读之运行时监控MXBean

目录一、JMX前置知识二、datax的运行时监控三、运行时常用的MXBean大全一、JMX前置知识官方文档:https://docs.oracle.com/javase/tutorial/jmx/index.html网上比较不错的文章:http://www.tianshouzhi.com/api/tutorials/jmx/28简单的说就是,JMX可以通过MBean的注册来实现运行时监控,而MXBean是一种可以支持复杂变量类型的MBean,具体的细节大家可以参考下上面两篇.

2021-01-02 16:49:21 991

原创 datax(四)源码阅读之一张图搞定datax执行流程(附带各种说明)

执行流程图如下,还在持续补充更新:https://www.processon.com/view/link/5fe81e2363768932a287d1fc

2020-12-28 14:53:02 616

原创 datax(三)源码阅读之脚本入口datax.py

目录一、整体流程二、获取参数解析器解析参数流程三、构建启动命令流程一、整体流程我们线上使用datax,一般会通过执行datax.py进行datax任务的启动,比如执行如下命令:python datax.py datax.json我们聚焦到datax.py的main方法:if __name__ == "__main__": printCopyright() // 1.打印版权信息 parser = getOptionParser() // 2.获取.

2020-11-08 21:57:00 2159

原创 datax(二)datax on azkaban架构设计之datax as a service

一、背景上篇文章说道,datax目前版本只支持单机模式,单机性能容易出现瓶颈,因此在线上使用datax做数据同步的时候,配合调度系统进行使用是个普遍的选择,这里我们选用的是azkaban作为调度系统进行设计,对datax进行封装提供服务。二、功能说明1、支持datax的服务调用,包括同步任务的执行、停止。2、支持分数据源类型 / 输出数据源类型 / 租户名称 /同步名称 /运行状态 / 创建者的同步任务列表分页查询。3、支持同步任务的状态查询,包括成功任务的指标查询;运行...

2020-11-03 22:10:05 1390 3

原创 datax(一)alibaba datax简介

github:https://github.com/alibaba/DataX目录一、datax简介1.1 原理简介1.1.1 概览1.1.2 框架设计1.1.3 核心架构1.2 特点1.3 使用场景二、data使用方式、注意点2.1 基本使用2.2 数据预处理2.2.1 transformer例子2.2.2 已有trasformer列表2.2.3扩展transformer方法2.3流控、并发调整2.3.1 流控、并发配置项2.3...

2020-11-03 00:09:51 4820 6

原创 spark原理之一张图搞定shuffle原理

如下:https://www.processon.com/view/link/60127d50079129652cdd3570

2021-02-01 16:27:24 176

原创 spark原理之一张图搞定算子执行原理

目录一、案例:从最简单的wordCount说起二、执行流程图三、总结四、附录:常见算子源码分析表一、案例:从最简单的wordcount说起一般来说我们见到的第一个spark程序,也就是传说中的wordcount,如下所示val textFileRDD = sc.textFile("hdfs://xxxx")textFileRDD.flatMap(_.split(" ")).map((_, 1)).reduceByKey(_+_).collect().foreac..

2021-01-27 20:34:12 262

原创 spark原理之一张图搞定spark-submit提交流程

如下:https://www.processon.com/diagraming/5fd80fdc63768906e6ddf8b8

2021-01-24 20:48:33 281 2

原创 spark原理之一张图搞定ContextCleaner

如下:https://www.processon.com/view/link/6007a4e31e08534bec2adf7e

2021-01-20 11:41:43 120

原创 spark原理之一张图搞定accumulator

如下:https://www.processon.com/view/link/6006922cf346fb566ebb6807

2021-01-19 16:09:29 180

原创 spark原理之一张图搞定broadcast

如下:https://www.processon.com/diagraming/6004f1e0f346fb566eb6a4ca

2021-01-18 17:25:17 159

转载 spark中num-executors,executor-cores,executor-memory调参的艺术

在跑Spark-On-Yarn程序的时候,往往会对几个参数(num-executors,executor-cores,executor-memory等)理解很模糊,从而凭感觉地去指定值,这是不符合有追求程序员信仰的。因此,搞懂它们,很有必要。本文翻译自https://spoddutur.github.io/spark-notes/distribution_of_executors_cores_and_memory_for_spark_application.html。译文如下:是否曾经想要知道如何

2020-10-26 23:18:42 4292

原创 《Hbase原理与实践》读书笔记——2.基础数据结构与算法

2.1 总体介绍HBase的一个列簇(Column Family)本质上就是一棵LSM树(Log-StructuredMerge-Tree)。LSM树分为内存部分和磁盘部分。内存部分是一个维护有序数据集合的数据结构。一般来讲,内存数据结构可以选择平衡二叉树、红黑树、跳跃表(SkipList)等维护有序集的数据结构,这里由于考虑并发性能,HBase选择了表现更优秀的跳跃表。磁盘部分是由一个个独立的文件组成,每一个文件又是由一个个数据块组成。对于数据存储在磁盘上的数据库系统来说,磁盘寻道以及数据读取都是非

2020-10-22 23:59:24 355 2

原创 《Hbase原理与实践》读书笔记——1.HBase概述

1.1 HBase前世今生Google当年风靡一时的“三篇论文”:GFS -> HDFS , Mapreduce -> hadoop mapreduce , bigTable -> HBase。HBase在国外起步很早,包括Facebook、Yahoo、Pinterest等大公司都大规模使用HBase作为基础服务。在国内HBase相对起步较晚,但现在各大公司对于HBase的使用已经越来越普遍,包括阿里巴巴、小米、华为、网易、京东、滴滴、中国电信、中国人寿等公司都使用HBase存储海

2020-10-21 17:01:36 467

原创 Flink on yarn实践中踩过的一些坑

Flink on yarn实践中踩过的一些坑背景最近公司项目在做实时计算相关,也是使用了flink做实时计算的引擎,是以flink on yarn的方式进行任务的调度,过程中也踩了一些坑,没有完整记录下来,就记录一些自己印象比较深刻的问题或者坑,希望对大家也有所帮助,问题如下:1、jar包集群lib中管理? or maven打fat jar?2、运行直接报错 Caused by: org.apache.flink.table.api.NoMatchingTableFactoryException:

2020-09-30 15:13:00 2703

原创 多线程之Callable接口及FutureTask源码分析

两者的不同在于:1、Runnable接口的run()方法没有返回值,而Callable接口的call()方法是带有泛型的返回值。2、Runnable方法的run()方法的异常只能在内部处理,而不能向上抛,而Callable的call()方法允许抛出异常。

2017-07-17 21:05:05 384

原创 多线程之线程局部变量ThreadLocal及原理

ThreadLocal为变量在每个线程中都创建了一个副本,那么每个线程可以访问自己内部的副本变量。既然是只有当前线程可以访问的数据,自然是线程安全的。

2017-07-16 20:50:42 487

原创 多线程之循环栅栏CyclicBarrier及原理

CyclicBarrier它允许一组线程互相等待,直到到达某个公共屏障点 (common barrier point)。在涉及一组固定大小的线程的程序中,这些线程必须不时地互相等待。因为该 barrier 在释放等待线程后可以重用,所以称它为循环 的 barrier。比如将计数器设置为10,那么凑齐第一批10个线程后,计数器就会归0,然后接着凑齐下一批10个线程,这就是循环栅栏内在的含义。

2017-07-15 22:49:31 2697

原创 多线程之倒计时器CountDownLatch及原理

一、倒计时器CountDownLatch这个工具通常用来控制线程等待,它可以让某一个线程等待直到倒计时结束再开始执行。CountDownLatch是共享模式的。

2017-07-15 21:24:56 618

原创 多线程之信号量Semaphore及原理

重入锁ReentrantLock是独占模式,一次都只允许一个线程访问一个资源,而信号量是共享模式,也就是说可以指定多个线程,同时访问某一个资源。

2017-07-14 14:58:32 876

转载 java枚举类型enum的使用

有的人说,不推荐使用枚举。有的人说,枚举很好用。究竟怎么使用,如何使用,仁者见仁智者见智。总之,先学会再说~为什么要引入枚举类一个小案例你写了一个小程序,不过好久不用了,突然有一天,你想使用一下它。程序要想正确运行,需要将今天星期几存到数据库里。这个时候,你开始犯难了。当初的你还很年轻,不懂程序界的险恶,设计这个程序的时候,傻不拉几把这个字段设计为int类型的,

2017-07-12 09:50:04 698

原创 idea下载多个插件项目启动不了解决方案

idea下载多个插件项目启动不了解决方案

2017-07-11 17:42:03 4713

原创 多线程之重入锁ReentrantLock及原理

重入锁是sunchronized、Object.wait()和Object.notify()方法的替代品(或者说是增强版),在JDK5.0的早期版本,重入锁的性能远远好于synchronized,但从JDK6.0开始,JDK在synchronized上做了大量的优化,使得两者的性能差距并不大。但ReentrantLock也有一些synchronized没法实现的特性。重入锁,为啥要叫重入锁呢,

2017-07-10 16:33:43 974

原创 多线程之AQS原理

AQS,全称为AbstractQueuedSynchronizer,粗粗的翻译下就是抽象的队列式的同步器。java.util.concurrent包中很多同步类,都是基于AQS,像ReentrantLock、Semaphore等等。小小的截取一段ReentrantLock类的这部分代码:

2017-07-10 11:41:11 582

原创 spring的事务传播行为及事务隔离级别

<tx:advice id="txAdvice" transaction-manager="transactionManager"> <tx:attributes> <tx:method name="query*" read-only="true" propagation="SUPPORTS" /> <tx:method name="get*" read-only="true" propagation="SUPPORTS" />

2017-07-09 10:38:26 2017 1

原创 多线程之CAS

不同于synchronized这种悲观的阻塞同步机制,java.util.concurrent包中还借助CAS实现了乐观的非阻塞同步机制。CAS(CompareAndSwap):比较并交换CAS有包含三个操作数:内存值V,旧的预期值A以及更新值B。当且仅当V的值等于A的时候,CAS才通过原子方式用更新值B来更新V的值。否则不做任何操作。CAS的含义是:“我认为V的值应该是A,如果是,那么将V的值更新为B,否则不修改并告诉V的值实际为多少”。

2017-07-07 13:42:53 835

原创 《深入理解java虚拟机》读书笔记——方法的解析调用与分派调用

方法调用并不等同于方法执行,方法调用阶段唯一的任务就是确定被调用方法的版本(即调用哪一个方法),暂时还不涉及方法内部的具体运行过程。Class文件的编译过程中不包含传统编译中的连接步骤,一切方法调用在Class文件里面存储的都只是符号引用,而不是方法在实际运行时内存布局中的入口地址(即直接引用)。这个特性需要在类加载期间,甚至到运行期间才能确定目标方法的直接引用。

2017-06-27 17:01:49 602

原创 《深入理解java虚拟机》读书笔记——运行时栈帧结构

栈帧是用于虚拟机进行方法调用和方法执行的数据结构,是虚拟机栈的栈元素。每一个方法从调用开始至执行完成的过程,都对应着一个栈帧在虚拟机栈里面从入栈到出栈的过程。每一个栈帧都包括了局部变量表、操作数栈、动态连接、方法返回地址和一些额外的附加信息。在编译程序代码的时候,栈帧需要多大的局部变量表,多深的操作数栈都已经完全确定,并且写入到方法表的Code属性中,因此一个栈帧需要分配多少内存,不会受到程序运行期变量数据的影响,而仅仅取决于具体的虚拟机实现。对于执行引擎来说,在活动线程中,只有位于栈顶的栈帧才是有效的

2017-06-27 14:20:14 442

转载 《深入理解java虚拟机》读书笔记——垃圾收集器

如果说收集算法是内存回收的方法论,那么垃圾收集器就是内存回收的具体实现。Java虚拟机规范中对垃圾收集器应该如何实现并没有任何规定,因此不同的厂商、不同版本的虚拟机所提供的垃圾收集器都可能会有很大差别,并且一般都会提供参数供用户根据自己的应用特点和要求组合出各个年代所使用的收集器。

2017-06-26 23:11:28 332

转载 mysql存储引擎InnoDB和MyISAM的区别

MyISAM不需要事务支持(不支持)并发相对较低(锁定机制问题)数据修改相对较少(阻塞问题),以读为主数据一致性要求不是非常高尽量索引(缓存机制)调整读写优先级,根据实际需求确保重要操作更优先启用延迟插入改善大批量写入性能尽量顺序操作让insert数据都写入到尾部,减少阻塞分解大的操作,降低单个操作的阻塞时间降低并发数,某些高并发场景通过应用来进行排队机制对于相对静态的数据,充分利用Query Cache可以极大的提高访问效率MyISAM的Count只有在全表扫描的时候特别高效,带有

2017-06-26 09:27:05 371

原创 《深入理解java虚拟机》读书笔记——类加载机制

什么情况下开始类加载阶段的第一个阶段:加载?java虚拟机并没有进行强制约束,这点交给虚拟机的具体实现来自由把握。但是对于初始化阶段,虚拟机规范则是严格规定了有且只有5种情况必须立即对类进行初始化(主动使用)。1、使用new关键字实例化对象的时候、读取或设置一个类的静态字段(被final修饰、已在编译期把结果放入常量池的静态字段除外)的时候,以及调用类的静态方法的时候。2、使用java.lang.reflect包的方法对类进行反射调用的时候(如Class.forName("con.xx.Test"))

2017-06-25 10:51:23 501

原创 《深入理解java虚拟机》读书笔记——GC与内存分配策略

一、垃圾收集器如何判断堆里的哪些对象需要回收1、引用计数算法:给对象中添加一个引用计数器,每当有一个地方引用它时,计数器值就加1;当引用失效时,计数器值就减1;任何时刻计数器为0的对象就是不可能再被使用,作为"死对象"被垃圾收集器回收。主流的java虚拟机没有选用引用计数算法来管理内存,主要的原因是它很难解决对象之间循环引用的问题。比如对象A和对象B都有字段obj,其中A.obj = B且B.obj = A,除此之外无其他引用,引用计数算法无法通知垃圾收集器回收它们,因为它们相互引用,彼此的引用计数都不

2017-06-24 18:42:17 384

原创 《深入理解java虚拟机》读书笔记——OOM发生的原因及解决方案

除了程序计数器外,虚拟机内存的其他几个运行时区域都有发生OOM的可能,如果能够区分根据报错区分出是哪些区域报出来的异常,会更便于定位问题,解决问题。

2017-06-24 13:26:12 321

原创 《深入理解java虚拟机》读书笔记——jvm内存区域

java虚拟机所管理的内存将会包括下列几个运行时数据区域:方法区:1、用于存储已被虚拟机加载的类信息、常量、静态变量和即时编译器编译后的代码等数据。2、垃圾收集在这个区域较少出现,主要是针对常量池的回收和类型的卸载,当方法区无法满足内存分配需求时,将抛出OutOfMemoryError异常(OOM)。3、该区域被线程共享。4、运行时常量池是方法区的一部分,用于存放编

2017-06-24 11:54:04 532

原创 等待(wait)和通知(notify)

为了支持多线程之间的协作,jdk提供了两个非常重要的方法线程等待wait()和通知notify()方法,这两个方法不是Thread类的,而是属于Object类。

2017-06-23 21:54:36 409

原创 synchronized的用法以及常见的使用错误

synchronized的作用是实现线程之间的同步,既能保证可见性,又能保证原子性。用法也有很多种,如下所示用一个线程类来演示下这三种:指定加锁对象直接作用于实例方法直接作用于静态方法

2017-06-23 20:15:49 936

原创 笔试题while((i+1) == (i+1)){}引发的思考

原题大致如下:定义一个变量i,使while( (i+1) == (i+1) )能够跳出循环,并说明理由

2017-06-06 12:09:51 2827

原创 结合代码彻底理解Spring AOP的术语

每本Spring的书在介绍AOP之前,总能有一箩筐的术语,看半天似懂非懂,也就没兴趣再继续学习下去,其实并没有这么复杂。难懂的定义我们就不贴了,就说说咱们通俗的解释,下面让我们结合代码来理清楚各个术语的含义一、Advice(通知,叫增强更贴切低啊,也更好理解)增强可以这么理解:为某些方法增加某些功能,这些功能可以安全、事物、日志等;增强分为前置增强(Before Advice):对方法执行前进行的增强 后置增强(After Advice):对方法执行后进行的增强

2017-05-16 14:54:29 353

datax on azkaban——datax as a service

datax基于azkaban调度的服务实现代码,0积分,需要的请自取

2020-11-03

自己搭建轻量级javaWeb框架之mvc以及ioc

自己搭建轻量级javaWeb框架之mvc以及ioc

2017-05-15

java生成二维码所需jar包

java生成二维码的zxing、qrcode、jqueryqrcode所需jar包

2017-01-18

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除