Adaptive Execution 让 Spark SQL 更高效更智能 发表于 2018-10-17 | 更新于 2018-10-17 | 分类于 Spark , big data , 大数据 , 分布式 | 评论次数 0 | 阅读次数 | 字数 5,168 RBO 与 CBO 在逻辑计划优化阶段与物理计划生成阶段通过规则优化最终生成的 DAG。本文介绍的 Adaptive Execution 可在 Spark Job 执行过程中,自动基于中间结果的统计信息优化后续的执行计划从而提高整体执行效率,并降低使用门槛 阅读全文 »
Spark 灰度发布的参考方法 CI CD 发表于 2018-10-08 | 更新于 2018-10-08 | 分类于 Spark , 大数据 | 评论次数 0 | 阅读次数 | 字数 5,181 本文介绍 Spark 的 CI 与 CD & CD 参考方法。包含如何维护源代码,如何维护 Release 多版本,开发版与正式版,以及如何实现灰度发布,如何进行 hotfix。 阅读全文 »
Spark CommitCoordinator 保证数据一致性 发表于 2018-09-26 | 更新于 2018-09-26 | 分类于 Spark , big data , 大数据 , 分布式 | 评论次数 0 | 阅读次数 | 字数 3,013 本文结合实例介绍了 Spark 保证数据一致性的方法,OutputCommitter原理,CommitCoordinator原理,以及 fileoutputcommitter.algorithm v1 与 v2 的原理与区别 阅读全文 »
Spark SQL 性能优化再进一步 CBO 基于代价的优化 发表于 2018-09-17 | 更新于 2018-09-17 | 分类于 Spark , big data , 大数据 , 分布式 | 评论次数 0 | 阅读次数 | 字数 4,094 上文介绍的 RBO 属于逻辑计划的优化,只考虑查询,未考虑数据本身的特点。本文将介绍 CBO 如何利用数据本身的特点优化物理执行计划。 阅读全文 »
Spark SQL / Catalyst 内部原理 与 RBO 发表于 2018-09-10 | 更新于 2018-09-10 | 分类于 Spark , big data , 大数据 , 分布式 | 评论次数 0 | 阅读次数 | 字数 4,287 本文结合案例详述了 Spark SQL 的工作原理,包括但不限于 Parser,Analyzer,Optimizer,Rule-based optimization等内容。 阅读全文 »
Java进阶(七)正确理解Thread Local的原理与适用场景 发表于 2017-12-19 | 更新于 2017-12-19 | 分类于 java | 评论次数 0 | 阅读次数 | 字数 8,086 本文结合实例介绍了 Thread Local 的原理与实现方法,并分析了其适用场景。 阅读全文 »
深入浅出Zookeeper(二) 基于Zookeeper的分布式锁与领导选举 发表于 2017-12-05 | 更新于 2017-12-05 | 分类于 zookeeper , big data , 大数据 , 分布式 | 评论次数 0 | 阅读次数 | 字数 3,665 本文结合实例演示了使用Zookeeper实现分布式锁与领导选举的原理与具体实现方法。 阅读全文 »
Kafka设计解析(八)- Exactly Once语义与事务机制原理 发表于 2017-11-21 | 更新于 2017-11-28 | 分类于 Kafka , big data , 大数据 , 分布式 | 评论次数 0 | 阅读次数 | 字数 8,847 本文介绍了Kafka实现事务性的几个阶段——正好一次语义与原子操作。之后详细分析了Kafka事务机制的实现原理,并介绍了Kafka如何处理事务相关的异常情况,如Transaction Coordinator宕机。最后介绍了Kafka的事务机制与PostgreSQL的MVCC以及Zookeeper的原子广播实现事务的异同 阅读全文 »
机器学习(三) 关联规则R语言实战 Apriori 发表于 2017-11-21 | 更新于 2017-11-21 | 分类于 machine learning , 机器学习 , AI | 评论次数 0 | 阅读次数 | 字数 9,321 本文由尿布与啤酒的精典案例开始介绍了关联规则的起源及核心概念,并详细阐述了Apriori算法的原理,生成频繁项目集的具体过程及抽取强关联规则的方法。之后结合案例介绍了构建FP树的具体步骤及从FP树挖掘频繁项目集的过程。最后给出了在R语言中使用Apriori算法进行关联规则挖掘的实战案例。 阅读全文 »
深入浅出Zookeeper(一) Zookeeper架构及FastLeaderElection机制 发表于 2017-11-08 | 更新于 2017-11-12 | 分类于 zookeeper , big data , 大数据 , 分布式 | 评论次数 0 | 阅读次数 | 字数 6,285 本文介绍了Zookeeper的架构,并组合实例分析了原子广播(ZAB)协议的原理,包括但不限于Zookeeper的读写流程,FastLeaderElection算法的原理,ZAB如何保证Leader Failover过程中的数据一致性。 阅读全文 »
Kafka设计解析(七)- Kafka Stream 发表于 2017-08-07 | 更新于 2017-08-07 | 分类于 Kafka , big data , 大数据 , 分布式 | 评论次数 0 | 阅读次数 | 字数 8,770 本文介绍了Kafka Stream的背景,如Kafka Stream是什么,什么是流式计算,以及为什么要有Kafka Stream。接着介绍了Kafka Stream的整体架构,并行模型,状态存储,以及主要的两种数据集KStream和KTable。并且分析了Kafka Stream如何解决流式系统中的关键问题,如时间定义,窗口操作,Join操作,聚合操作,以及如何处理乱序和提供容错能力。最后结合示例讲解了如何使用Kafka Stream。 阅读全文 »
Java进阶(六)从ConcurrentHashMap的演进看Java多线程核心技术 发表于 2017-05-31 | 更新于 2017-05-31 | 分类于 java | 评论次数 0 | 阅读次数 | 字数 6,687 本文分析了HashMap的实现原理,以及resize可能引起死循环和Fast-fail等线程不安全行为。同时结合源码从数据结构,寻址方式,同步方式,计算size等角度分析了JDK 1.7和JDK 1.8中ConcurrentHashMap的实现原理。 阅读全文 »
Kafka设计解析(六)- Kafka高性能架构之道 发表于 2017-04-17 | 更新于 2018-08-31 | 分类于 Kafka , big data , 大数据 , 分布式 | 评论次数 0 | 阅读次数 | 字数 7,124 本文从宏观架构层面和微观实现层面分析了Kafka如何实现高性能。包含Kafka如何利用Partition实现并行处理和提供水平扩展能力,如何通过ISR实现可用性和数据一致性的动态平衡,如何使用NIO和Linux的sendfile实现零拷贝以及如何通过顺序读写和数据压缩实现磁盘的高效利用。 阅读全文 »
机器学习(二) 如何做到Kaggle排名前2% 发表于 2017-04-12 | 更新于 2017-11-12 | 分类于 machine learning , 机器学习 , AI | 评论次数 0 | 阅读次数 | 字数 12,023 本文详述了如何通过数据预览,探索式数据分析,缺失数据填补,删除关联特征以及派生新特征等方法,在Kaggle的Titanic幸存预测这一分类问题竞赛中获得前2%排名的具体方法。 阅读全文 »
Spark性能优化之道——解决Spark数据倾斜(Data Skew)的N种姿势 发表于 2017-02-28 | 更新于 2017-10-17 | 分类于 Spark , big data , 大数据 , 分布式 | 评论次数 0 | 阅读次数 | 字数 13,006 本文结合实例详细阐明了Spark数据倾斜的几种场景以及对应的解决方案,包括避免数据源倾斜,调整并行度,使用自定义Partitioner,使用Map侧Join代替Reduce侧Join,给倾斜Key加上随机前缀等。 阅读全文 »
Java进阶(五)Java I/O模型从BIO到NIO和Reactor模式 发表于 2016-08-23 | 更新于 2017-02-15 | 分类于 java | 评论次数 0 | 阅读次数 | 字数 10,254 本文介绍了Java中的四种I/O模型,同步阻塞,同步非阻塞,多路复用,异步阻塞。同时将NIO和BIO进行了对比,并详细分析了基于NIO的Reactor模式,包括经典单线程模型以及多线程模式和多Reactor模式。 阅读全文 »
UML(一) 类图详解 发表于 2016-08-08 | 更新于 2017-03-15 | 分类于 system design , 系统设计 | 评论次数 0 | 阅读次数 | 字数 3,526 在UML 2.*的13种图形中,类图是使用频率最高的UML图之一,它表示了类与类之间的关系,帮助开发人员理解系统。它是系统分析和设计阶段的重要产物,也是系统编码和测试的重要模型依据。本文详细介绍了类间的依赖关系,关联关系(聚合、组合等),实现关系以及继承关系的UML表示形式及其在代码中的实现方式。 阅读全文 »
分布式事务(一)两阶段提交及JTA 发表于 2016-08-01 | 更新于 2017-02-18 | 分类于 big data , 大数据 , 分布式 | 评论次数 0 | 阅读次数 | 字数 6,071 分布式事务与本地事务一样,包含原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)和持久性(Durability)。两阶段提交是保证分布式事务中原子性的重要方法。本文重点介绍了两阶段提交的原理,PostgreSQL中两阶段提交接口,以及Java中两阶段提交接口规范JTA的使用方式。 阅读全文 »
Java进阶(四)线程间通信剖析 发表于 2016-06-23 | 更新于 2017-02-15 | 分类于 java | 评论次数 0 | 阅读次数 | 字数 4,938 本文将介绍常用的线程间通信工具CountDownLatch、CyclicBarrier和Phaser的用法,并结合实例介绍它们各自的适用场景及相同点和不同点。 阅读全文 »
Java进阶(三)多线程开发关键技术 发表于 2016-06-20 | 更新于 2017-02-15 | 分类于 java | 评论次数 0 | 阅读次数 | 字数 10,197 本文将介绍Java多线程开发必不可少的锁和同步机制,同时介绍sleep和wait等常用的暂停线程执行的方法,并详述synchronized的几种使用方式,以及Java中的重入锁(ReentrantLock)和读写锁(ReadWriteLock),之后结合实例分析了重入锁条件变量(Condition)的使用技巧,最后介绍了信号量(Semaphore)的适用场景和使用技巧。 阅读全文 »
Java进阶(二)当我们说线程安全时,到底在说什么 发表于 2016-06-13 | 更新于 2017-02-15 | 分类于 java | 评论次数 0 | 阅读次数 | 字数 4,107 提到线程安全,可能大家的第一反应是要确保接口对共享变量的操作要具体原子性。实际上,在多线程编程中我们需要同时关注可见性、顺序性和原子性问题。本篇文章将从这三个问题出发,结合实例详解volatile如何保证可见性及一定程序上保证顺序性,同时例讲synchronized如何同时保证可见性和原子性,最后对比volatile和synchronized的适用场景。 阅读全文 »
SQL优化(六) MVCC PostgreSQL实现事务和多版本并发控制的精华 发表于 2016-06-06 | 更新于 2017-03-15 | 分类于 PostgreSQL , Database , SQL优化 , SQL | 评论次数 0 | 阅读次数 | 字数 5,522 数据库事务隔离性可通过锁机制或者MVCC实现,PostgreSQL默认使用MVCC。本文结合实例介绍了PostgreSQL的MVCC实现机制,并介绍了PostgreSQL如何通过MVCC保证事务的原子性和隔离性,最后介绍了PostgreSQL如何通过VACUUM机制克服MVCC带来的副作用。 阅读全文 »
Java设计模式(十三) 别人再问你设计模式,叫他看这篇文章 发表于 2016-06-02 | 更新于 2017-02-17 | 分类于 设计模式 , Design Pattern | 评论次数 0 | 阅读次数 | 字数 3,087 本文讲解了设计模式与OOP的三大特性及OOP七项原则间的关系,并讲解了使用设计模式的好处及为何需要使用设计模式。最后通过问答形式讲解了设计模式相关的常见问题 阅读全文 »
Java设计模式(十二) 策略模式 发表于 2016-05-30 | 更新于 2017-02-17 | 分类于 设计模式 , Design Pattern | 评论次数 0 | 阅读次数 | 字数 4,623 本文结合实例详述了策略模式的实现方式,并介绍了如何结合简单工厂模式及Annotation优化策略模式。最后分析了策略模式的优缺点及已(未)遵循的OOP原则 阅读全文 »
Java设计模式(十一) 享元模式 发表于 2016-05-23 | 更新于 2017-02-17 | 分类于 设计模式 , Design Pattern | 评论次数 0 | 阅读次数 | 字数 2,938 本文介绍了享元模式的适用场景,并结合实例详述了享元模式的实现方式。最后分析了享元模式的优缺点及已(未)遵循的OOP原则 阅读全文 »
Java设计模式(十) 你真的用对单例模式了吗? 发表于 2016-05-16 | 更新于 2017-11-12 | 分类于 设计模式 , Design Pattern | 评论次数 0 | 阅读次数 | 字数 4,443 本文介绍了为何需要单例模式,单例模式的设计要点,饿汉和懒汉的区别,并通过实例介绍了实现单例模式的八种实现方式及其优缺点。 阅读全文 »
Java设计模式(九) 桥接模式 发表于 2016-05-12 | 更新于 2017-02-17 | 分类于 设计模式 , Design Pattern | 评论次数 0 | 阅读次数 | 字数 3,664 当一种事物可在多种维度变化(如两个维度,每个维度三种可能)时,如果为每一种可能创建一个子类,则每增加一个维度上的可能需要增加多个类,这会造成类爆炸(3*3=9)。若使用桥接模式,使用类聚合,而非继承,将可缓解类爆炸,并增强可扩展性。 阅读全文 »
Java设计模式(八) 适配器模式 发表于 2016-05-09 | 更新于 2017-02-17 | 分类于 设计模式 , Design Pattern | 评论次数 0 | 阅读次数 | 字数 2,816 适配器模式可将一个类的接口转换成调用方希望的另一个接口。这种需求往往发生在后期维护阶段,因此有观点认为适配器模式只是前期系统接口设计缺乏的一种弥补。从实际工程来看,并不完全这样,有时不同产商的功能类似但接口很难完全一样,而为了系统使用方式的一致性,也会用到适配器模式。 阅读全文 »
Java设计模式(七) Spring AOP JDK动态代理 vs. Cglib 发表于 2016-05-02 | 更新于 2017-02-17 | 分类于 设计模式 , Design Pattern | 评论次数 0 | 阅读次数 | 字数 7,815 Spring的AOP有JDK动态代理和cglib两种实现方式。JDK动态代理要求被代理对象实现接口;cglib通过动态继承实现,因此不能代理被final修饰的类;JDK动态代理生成代理对象速度比cglib快;cglib生成的代理对象比JDK动态代理生成的代理对象执行效率高。 阅读全文 »
Java设计模式(六) 代理模式 vs. 装饰模式 发表于 2016-04-29 | 更新于 2017-02-17 | 分类于 设计模式 , Design Pattern | 评论次数 0 | 阅读次数 | 字数 4,141 代理模式与装饰模式在代码组织结构上非常相近,以至于很多读者很难区分它们。本文将结合实例对比代理模式和装饰模式的适用场景,实现方式。 阅读全文 »
Java设计模式(五) 组合模式 发表于 2016-04-24 | 更新于 2017-02-17 | 分类于 设计模式 , Design Pattern | 评论次数 0 | 阅读次数 | 字数 3,298 本文介绍了组合模式的概念,UML类图,优缺点,实例讲解以及组合模式(未)遵循的OOP原则。 阅读全文 »
Java设计模式(四) 观察者模式 发表于 2016-04-13 | 更新于 2017-02-17 | 分类于 设计模式 , Design Pattern | 评论次数 0 | 阅读次数 | 字数 3,165 本文介绍了观察者模式的概念,UML类图,优缺点,实例分析以及观察者模式(未)遵循的OOP原则。 阅读全文 »
Java设计模式(三) 抽象工厂模式 发表于 2016-04-09 | 更新于 2017-02-17 | 分类于 设计模式 , Design Pattern | 评论次数 0 | 阅读次数 | 字数 2,676 本文介绍了抽象工厂模式的概念,UML类图,优缺点,实现方式以及(未)遵循的OOP原则。同时结合J2EE中常用的DAO实例详解了抽象工厂模式的实现。 阅读全文 »
Java设计模式(二) 工厂方法模式 发表于 2016-04-02 | 更新于 2017-02-18 | 分类于 设计模式 , Design Pattern | 评论次数 0 | 阅读次数 | 字数 2,390 本文介绍了工厂方法模式的概念,优缺点,实现方式,UML类图,并介绍了工厂方法(未)遵循的OOP原则 阅读全文 »
SQL优化(五) PostgreSQL (递归)CTE 通用表表达式 发表于 2016-03-18 | 更新于 2017-03-15 | 分类于 PostgreSQL , Database , SQL优化 , SQL | 评论次数 0 | 阅读次数 | 字数 5,953 本文结合实例介绍了CTE(Common Table Expressions,通用表达式)的用法,优缺点,并详细阐述了递归CTE的执行步骤及使用方法。同时给出了使用WITH RECURSIVE计算图的最短路径方案。 阅读全文 »
Java设计模式(一) 简单工厂模式不简单 发表于 2016-03-08 | 更新于 2017-02-17 | 分类于 设计模式 , Design Pattern | 评论次数 0 | 阅读次数 | 字数 7,640 本文介绍了简单工厂模式的概念,优缺点,实现方式,以及结合Annotation和反射的改良方案。同时介绍了简单工厂模式(未)遵循的OOP原则。最后给出了简单工厂模式在JDBC中的应用 阅读全文 »
Java进阶(一)Annotation(注解) 发表于 2016-01-17 | 更新于 2017-02-15 | 分类于 java | 评论次数 0 | 阅读次数 | 字数 3,515 本文介绍了Java Annotation的概念及Java提供的四种Meta Annotation的功能,并结合实例详解了自定义Annotation的方法和注意事项 阅读全文 »
Kafka设计解析(五)- Kafka性能测试方法及Benchmark报告 发表于 2015-12-31 | 更新于 2017-03-15 | 分类于 Kafka , big data , 大数据 , 分布式 | 评论次数 0 | 阅读次数 | 字数 3,476 本文详细阐述了Kafka的性能测试方法,并全面展示了Kafka各组件的性能测试报告。 阅读全文 »
SQL优化(四) PostgreSQL存储过程 发表于 2015-12-27 | 更新于 2017-03-15 | 分类于 PostgreSQL , Database , SQL优化 , SQL | 评论次数 0 | 阅读次数 | 字数 9,618 本文介绍了存储过程的概念,优势,并结合实例讲解了存储过程在PostgreSQL中的实现,注意事项 阅读全文 »
SQL优化(三) PostgreSQL Table Partitioning 发表于 2015-12-13 | 更新于 2017-03-15 | 分类于 PostgreSQL , Database , SQL优化 , SQL | 评论次数 0 | 阅读次数 | 字数 9,969 本文介绍了数据库分区表的使用场景,优势,原理,及在PostgreSQL中的实现和注意事项。 阅读全文 »
Kafka设计解析(四)- Kafka Consumer设计解析 发表于 2015-08-09 | 更新于 2017-03-15 | 分类于 Kafka , big data , 大数据 , 分布式 | 评论次数 0 | 阅读次数 | 字数 5,983 本文主要介绍了Kafka High Level Consumer,Consumer Group,Consumer Rebalance,Low Level Consumer实现的语义,以及适用场景。以及未来版本中对High Level Consumer的重新设计--使用Consumer Coordinator解决Split Brain和Herd等问题。 阅读全文 »
Kafka设计解析(三)- Kafka High Availability (下) 发表于 2015-06-08 | 更新于 2017-03-15 | 分类于 Kafka , big data , 大数据 , 分布式 | 评论次数 0 | 阅读次数 | 字数 6,897 本文在上篇文章 基础上,更加深入讲解了Kafka的HA机制,主要阐述了HA相关各种场景,如Broker failover,Controller failover,Topic创建/删除,Broker启动,Follower从Leader fetch数据等详细处理过程。同时介绍了Kafka提供的与Replication相关的工具,如重新分配Partition等。 阅读全文 »
Kafka设计解析(二)- Kafka High Availability (上) 发表于 2015-04-24 | 更新于 2017-03-15 | 分类于 Kafka , big data , 大数据 , 分布式 | 评论次数 0 | 阅读次数 | 字数 8,822 Kafka从0.8版本开始提供High Availability机制,从而提高了系统可用性及数据持久性。本文从Data Replication和Leader Election两方面介绍了Kafka的HA机制。 阅读全文 »
机器学习(一) 从一个R语言案例学线性回归 发表于 2015-03-27 | 更新于 2017-04-02 | 分类于 machine learning , 机器学习 , AI | 评论次数 0 | 阅读次数 | 字数 3,435 本文简要介绍了线性回归的原理,适用场景,并结合实例讲解如何使用R语言解决线性回归问题 阅读全文 »
SQL优化(二) 快速计算Distinct Count 发表于 2015-03-15 | 更新于 2017-03-15 | 分类于 PostgreSQL , Database , SQL优化 , SQL | 评论次数 0 | 阅读次数 | 字数 4,152 本文介绍了distinct count的SQL优化方法,以及常用的高效近似算法及其在PostgreSQL上的实现。 阅读全文 »
Kafka设计解析(一)- Kafka背景及架构介绍 发表于 2015-03-10 | 更新于 2017-03-29 | 分类于 Kafka , big data , 大数据 , 分布式 | 评论次数 0 | 阅读次数 | 字数 7,434 本文介绍了Kafka的创建背景,设计目标,使用消息系统的优势以及目前流行的消息系统对比。并介绍了Kafka的架构,Producer消息路由,Consumer Group以及由其实现的不同消息分发方式,Topic & Partition,最后介绍了Kafka Consumer为何使用pull模式以及Kafka提供的三种delivery guarantee。 阅读全文 »
SQL优化(一) Merge Join vs. Hash Join vs. Nested Loop 发表于 2015-03-07 | 更新于 2017-03-15 | 分类于 PostgreSQL , Database , SQL优化 , SQL | 评论次数 0 | 阅读次数 | 字数 3,383 本文介绍了Merge Join,Hash Join,Nested Loop这三种数据库Join方式的工作原理,并通过实验进一步说明了其适用范围。 阅读全文 »
Java高性能异步处理框架-Disruptor 发表于 2015-01-25 | 更新于 2019-04-01 | 分类于 Message Queue , Disruptor | 评论次数 0 | 阅读次数 | 字数 49 本文将介绍 Disruptor 原理与适用场景 阅读全文 »
Kafka深度解析 发表于 2015-01-02 | 更新于 2017-03-15 | 分类于 Kafka , big data , 大数据 , 分布式 | 评论次数 0 | 阅读次数 | 字数 17,899 介绍Kafka背景,使用消息系统的优势,常用消息系统对比,Kafka架构介绍,Kafka实现语义分析,Replication及Leader Election机制剖析,Consumer Group Rebalance实现原理介绍,以及Benchmark测试。 阅读全文 »