- 博客(58)
- 资源 (4)
- 收藏
- 关注

原创 Spark性能优化之道——解决Spark数据倾斜(Data Skew)的N种姿势
本文结合实例详细阐明了Spark数据倾斜的几种场景以及对应的解决方案,包括避免数据源倾斜,调整并行度,使用自定义Partitioner,使用Map侧Join代替Reduce侧Join,给倾斜Key加上随机前缀等。
2017-03-06 06:45:02
2932

原创 分布式事务(一) 两阶段提交及JTA
分布式事务与本地事务一样,包含原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)和持久性(Durability)。两阶段提交是保证分布式事务中原子性的重要方法。本文重点介绍了两阶段提交的原理,PostgreSQL中两阶段提交接口,以及Java中两阶段提交接口规范JTA的使用方式。
2016-08-02 06:49:20
7387

原创 Java进阶(三)多线程开发关键技术
本文将介绍Java多线程开发必不可少的锁和同步机制,同时介绍sleep和wait等常用的暂停线程执行的方法,并详述synchronized的几种使用方式,以及Java中的重入锁(ReentrantLock)和读写锁(ReadWriteLock),之后结合实例分析了重入锁条件变量(Condition)的使用技巧,最后介绍了信号量(Semaphore)的适用场景和使用技巧。
2016-06-20 07:15:02
4234

原创 Java设计模式(八) 适配器模式
适配器模式可将一个类的接口转换成调用方希望的另一个接口。这种需求往往发生在后期维护阶段,因此有观点认为适配器模式只是前期系统接口设计缺乏的一种弥补。从实际工程来看,并不完全这样,有时不同产商的功能类似但接口很难完全一样,而为了系统使用方式的一致性,也会用到适配器模式。
2016-05-09 07:09:35
2155

原创 Java设计模式(一) 简单工厂模式不简单
本文介绍了简单工厂模式的概念,优缺点,实现方式,以及结合Annotation和反射的改良方案。同时介绍了简单工厂模式(未)遵循的OOP原则。最后给出了简单工厂模式在JDBC中的应用
2016-04-14 20:48:29
6304

原创 SQL优化(五) PostgreSQL (递归)CTE 通用表表达式
本文结合实例介绍了CTE(Common Table Expressions,通用表达式)的用法,优缺点,并详细阐述了递归CTE的执行步骤及使用方法。同时给出了使用WITH RECURSIVE计算图的最短路径方案。
2016-04-12 20:57:29
6027

原创 Kafka设计解析(三)- Kafka High Availability (下)
本文在上篇文章基础上,更加深入讲解了Kafka的HA机制,主要阐述了HA相关各种场景,如Broker failover,Controller failover,Topic创建/删除,Broker启动,Follower从Leader fetch数据等详细处理过程。同时介绍了Kafka提供的与Replication相关的工具,如重新分配Partition等。
2015-06-09 09:48:02
1966

原创 Nested Loop,Hash Join,Merge Join
原创文章,首发自本人个人博客站点,转载请务必注明出自http://www.jasongj.comNested Loop,Hash Join,Merge Join介绍Nested Loop:对于被连接的数据子集较小的情况,Nested Loop是个较好的选择。Nested Loop就是扫描一个表(外表),每读到一条记录,就根据Join字段上的索引去另一张表(内
2015-06-08 22:14:32
1219

原创 Kafka设计解析(二)- Kafka High Availability (上)
Kafka在0.8以前的版本中,并不提供High Availablity机制,一旦一个或多个Broker宕机,则宕机期间其上所有Partition都无法继续提供服务。若该Broker永远不能再恢复,亦或磁盘故障,则其上数据将丢失。而Kafka的设计目标之一即是提供数据持久化,同时对于分布式系统来说,尤其当集群规模上升到一定程度后,一台或者多台机器宕机的可能性大大提高,对于Failover机制的需求非常高。因此,Kaf
2015-04-26 11:53:38
1891
原创 Spark 灰度发布在十万级节点上的成功实践 CI CD
Spark 灰度发布在十万级节点上的成功实践 CI CDSpark CI 持续集成实践CI 介绍Spark CI 实践Spark CD 持续交付CD 持续交付介绍Spark CD 持续发布实践方案一:单分支正常流程bug fixhot fixPros.Cons.方案二:两分支正常流程bug fixhot fixPros.Cons.方案三:多分支正常流程bug fixhot fix灰度发布回滚机制P...
2018-10-31 08:08:28
911
原创 Spark SQL 性能优化再进一步 CBO 基于代价的优化
本文所述内容均基于 2018年9月17日 Spark 最新 Release 2.3.1 版本。后续将持续更新Spark CBO 背景上文Spark SQL 内部原理中介绍的 Optimizer 属于 RBO,实现简单有效。它属于 LogicalPlan 的优化,所有优化均基于 LogicalPlan 本身的特点,未考虑数据本身的特点,也未考虑算子本身的代价。本文将介绍 CBO,它充分考虑...
2018-09-26 07:38:43
2731
3
原创 Spark CommitCoordinator 保证数据一致性
原创文章,转载请务必将下面这段话置于文章开头处。本文转发自技术世界,原文链接 http://www.jasongj.com/spark/committer/本文所述内容均基于 2018年9月17日 Spark 最新 Release 2.3.1 版本,以及 hadoop-2.6.0-cdh-5.4.4概述Spark 输出数据到 HDFS 时,需要解决如下问题:由于多个 Task ...
2018-09-26 07:34:34
816
原创 Spark SQL / Catalyst 内部原理 与 RBO
原创文章,转载请务必将下面这段话置于文章开头处。 本文转发自技术世界,原文链接 http://www.jasongj.com/spark/rbo/ 本文所述内容均基于 2018年9月10日 Spark 最新 Release 2.3.1 版本。后续将持续更新Spark SQL 架构Spark SQL 的整体架构如下图所示 从上图可见,无论是直接使用 SQL 语句...
2018-09-11 07:43:29
643
原创 Java进阶(七)正确理解Thread Local的原理与适用场景
本文结合实例介绍了 Thread Local 的原理与实现方法,并分析了其适用场景。
2017-12-21 12:27:03
1623
转载 Kafka设计解析(八)- Exactly Once语义与事务机制原理
本文介绍了Kafka实现事务性的几个阶段——正好一次语义与原子操作。之后详细分析了Kafka事务机制的实现原理,并介绍了Kafka如何处理事务相关的异常情况,如Transaction Coordinator宕机。最后介绍了Kafka的事务机制与PostgreSQL的MVCC以及Zookeeper的原子广播实现事务的异同
2017-11-28 21:38:43
1190
原创 深入浅出Zookeeper(一) Zookeeper架构及FastLeaderElection机制
本文介绍了Zookeeper的架构,并组合实例分析了原子广播(ZAB)协议的原理,包括但不限于Zookeeper的读写流程,FastLeaderElection算法的原理,ZAB如何保证Leader Failover过程中的数据一致性。
2017-11-27 18:49:25
1887
1
原创 流式处理界的新贵 Kafka Stream - Kafka设计解析(七)
本文介绍了Kafka Stream的背景,如Kafka Stream是什么,什么是流式计算,以及为什么要有Kafka Stream。接着介绍了Kafka Stream的整体架构,并行模型,状态存储,以及主要的两种数据集KStream和KTable。并且分析了Kafka Stream如何解决流式系统中的关键问题,如时间定义,窗口操作,Join操作,聚合操作,以及如何处理乱序和提供容错能力。最后结合示例讲解了如何使用Ka
2017-11-27 09:29:12
6645
原创 Java进阶(六)从ConcurrentHashMap的演进看Java多线程核心技术
本文分析了HashMap的实现原理,以及resize可能引起死循环和Fast-fail等线程不安全行为。同时结合源码从数据结构,寻址方式,同步方式,计算size等角度分析了JDK 1.7和JDK 1.8中ConcurrentHashMap的实现原理。
2017-07-05 09:17:19
751
原创 揭秘Kafka高性能架构之道-Kafka设计解析(六)
本文从宏观架构层面和微观实现层面分析了Kafka如何实现高性能。包含Kafka如何利用Partition实现并行处理和提供水平扩展能力,如何通过ISR实现可用性和数据一致性的动态平衡,如何使用NIO和Linux的sendfile实现零拷贝以及如何通过顺序读写和数据压缩实现磁盘的高效利用。
2017-04-25 06:49:02
2996
原创 机器学习(二) 如何做到机器学习竞赛Kaggle排名前2%
本文详述了如何通过数据预览,探索式数据分析,缺失数据填补,删除关联特征以及派生新特征等方法,在Kaggle的Titanic幸存预测这一分类问题竞赛中获得前2%排名的具体方法。
2017-04-13 08:09:00
3606
原创 Java进阶(五)Java I/O模型从BIO到NIO和Reactor模式
本文介绍了Java中的四种I/O模型,同步阻塞,同步非阻塞,多路复用,异步阻塞。同时将NIO和BIO进行了对比,并详细分析了基于NIO的Reactor模式,包括经典单线程模型以及多线程模式和多Reactor模式。
2016-08-23 07:00:09
5393
2
原创 UML(一) 类图及类间关系
在UML 2.*的13种图形中,类图是使用频率最高的UML图之一,它表示了类与类之间的关系,帮助开发人员理解系统。它是系统分析和设计阶段的重要产物,也是系统编码和测试的重要模型依据。本文详细介绍了类间的依赖关系,关联关系(聚合、组合等),实现关系以及继承关系的UML表示形式及其在代码中的实现方式。
2016-08-10 06:44:02
7343
原创 Java线程间通信方式剖析——Java进阶(四)
本文将介绍常用的线程间通信工具CountDownLatch、CyclicBarrier和Phaser的用法,并结合实例介绍它们各自的适用场景及相同点和不同点。
2016-06-24 06:57:45
1721
原创 当我们说线程安全时,到底在说什么——Java进阶系列(二)
提到线程安全,可能大家的第一反应是要确保接口对共享变量的操作要具体原子性。实际上,在多线程编程中我们需要同时关注可见性、顺序性和原子性问题。本篇文章将从这三个问题出发,结合实例详解volatile如何保证可见性及一定程序上保证顺序性,同时例讲synchronized如何同时保证可见性和原子性,最后对比volatile和synchronized的适用场景。
2016-06-13 07:24:13
2313
原创 Java设计模式(五) 多态的极致应用——组合模式
本文介绍了组合模式的概念,UML类图,优缺点,实例讲解以及组合模式(未)遵循的OOP原则。
2016-06-08 07:25:09
4546
1
原创 SQL优化(六) MVCC PostgreSQL实现事务和多版本并发控制的精华
数据库事务隔离性可通过锁机制或者MVCC实现,PostgreSQL默认使用MVCC。本文结合实例介绍了PostgreSQL的MVCC实现机制,并介绍了PostgreSQL如何通过MVCC保证事务的原子性和隔离性,最后介绍了PostgreSQL如何通过VACUUM机制克服MVCC带来的副作用。
2016-06-06 07:13:45
3074
原创 Java设计模式(十三) 别人再问你设计模式,叫他看这篇文章
本文讲解了设计模式与OOP的三大特性及OOP七项原则间的关系,并讲解了使用设计模式的好处及为何需要使用设计模式。最后通过问答形式讲解了设计模式相关的常见问题
2016-06-02 07:35:56
892
原创 Java设计模式(十二) 策略模式
本文结合实例详述了策略模式的实现方式,并介绍了如何结合简单工厂模式及Annotation优化策略模式。最后分析了策略模式的优缺点及已(未)遵循的OOP原则
2016-05-30 07:28:29
798
原创 Java设计模式(十一) 享元模式
本文介绍了享元模式的适用场景,并结合实例详述了享元模式的实现方式。最后分析了享元模式的优缺点及已(未)遵循的OOP原则
2016-05-23 08:22:38
837
原创 Java设计模式(十) 你真的用对单例模式了吗?
本文介绍了为何需要单例模式,单例模式的设计要点,饿汉和懒汉的区别,并通过实例介绍了实现单例模式的九种实现方式及其优缺点。
2016-05-16 08:20:40
1671
原创 Java设计模式(九) 桥接模式
当一种事物可在多种维度变化(如两个维度,每个维度三种可能)时,如果为每一种可能创建一个子类,则每增加一个维度上的可能需要增加多个类,这会造成类爆炸(3*3=9)。若使用桥接模式,使用类聚合,而非继承,将可缓解类爆炸,并增强可扩展性。
2016-05-12 07:29:34
1027
原创 Java设计模式(七) Spring AOP JDK动态代理 VS. cglib
Spring的AOP有JDK动态代理和cglib两种实现方式。JDK动态代理要求被代理对象实现接口;cglib通过动态继承实现,因此不能代理被final修饰的类;JDK动态代理生成代理对象速度比cglib快;cglib生成的代理对象比JDK动态代理生成的代理对象执行效率高。
2016-05-06 07:49:33
1246
转载 如果有人问你数据库的原理,叫他看这篇文章
一提到关系型数据库,我禁不住想:有些东西被忽视了。关系型数据库无处不在,而且种类繁多,从小巧实用的 SQLite 到强大的 Teradata 。但很少有文章讲解数据库是如何工作的。你可以自己谷歌/百度一下『关系型数据库原理』,看看结果多么的稀少【译者注:百度为您找到相关结果约1,850,000个…】 ,而且找到的那些文章都很短。现在如果你查找最近时髦的技术(大数据、NoSQL或JavaScript
2016-05-05 19:58:25
2085
原创 Java设计模式(六) 代理模式 VS. 装饰模式
代理模式与装饰模式在代码组织结构上非常相近,以至于很多读者很难区分它们。本文将结合实例对比代理模式和装饰模式的适用场景,实现方式。
2016-05-03 07:11:47
974
原创 Java系列(一)Annotation(注解)
本文介绍了Java Annotation的概念及Java提供的四种Meta Annotation的功能,并结合实例详解了自定义Annotation的方法和注意事项
2016-04-18 20:36:16
1337
原创 Kafka深度解析
介绍Kafka背景,使用消息系统的优势,常用消息系统对比,Kafka架构介绍,Kafka实现语义分析,Replication及Leader Election机制剖析,Consumer Group Rebalance实现原理介绍,以及Benchmark测试。
2016-02-29 21:29:35
1139
快学 scala 中文版 带完整目录
2018-12-10
Linux/Unit Shell 脚本 指南 自己总结精华版
2012-12-30
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人