自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

技术世界

分享大数据领域技术、包括但不限于Storm、Spark、Hadoop等分布式计算系统,Kafka、MetaQ等分布式消息系统, MongoDB等NoSQL,PostgreSQL等RDBMS,SQL优

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

原创 Spark性能优化之道——解决Spark数据倾斜(Data Skew)的N种姿势

本文结合实例详细阐明了Spark数据倾斜的几种场景以及对应的解决方案,包括避免数据源倾斜,调整并行度,使用自定义Partitioner,使用Map侧Join代替Reduce侧Join,给倾斜Key加上随机前缀等。

2017-03-06 06:45:02 2822 1

原创 分布式事务(一) 两阶段提交及JTA

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

2016-08-02 06:49:20 7292

原创 Java进阶(三)多线程开发关键技术

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

2016-06-20 07:15:02 4156

原创 Java设计模式(八) 适配器模式

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

2016-05-09 07:09:35 2094

原创 Java设计模式(一) 简单工厂模式不简单

本文介绍了简单工厂模式的概念,优缺点,实现方式,以及结合Annotation和反射的改良方案。同时介绍了简单工厂模式(未)遵循的OOP原则。最后给出了简单工厂模式在JDBC中的应用

2016-04-14 20:48:29 6236

原创 SQL优化(五) PostgreSQL (递归)CTE 通用表表达式

本文结合实例介绍了CTE(Common Table Expressions,通用表达式)的用法,优缺点,并详细阐述了递归CTE的执行步骤及使用方法。同时给出了使用WITH RECURSIVE计算图的最短路径方案。

2016-04-12 20:57:29 5870

原创 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 1909

原创 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 1120

原创 Kafka设计解析(二)- Kafka High Availability (上)

Kafka在0.8以前的版本中,并不提供High Availablity机制,一旦一个或多个Broker宕机,则宕机期间其上所有Partition都无法继续提供服务。若该Broker永远不能再恢复,亦或磁盘故障,则其上数据将丢失。而Kafka的设计目标之一即是提供数据持久化,同时对于分布式系统来说,尤其当集群规模上升到一定程度后,一台或者多台机器宕机的可能性大大提高,对于Failover机制的需求非常高。因此,Kaf

2015-04-26 11:53:38 1817 1

原创 机器学习(一) 从一个R语言案例学线性回归

本文简要介绍了线性回归的原理,适用场景,并结合实例讲解如何使用R语言解决线性回归问题

2015-04-03 14:17:23 1546

原创 机器学习(一) 从一个R语言案例学线性回归

本文简要介绍了线性回归的原理,适用场景,并结合实例讲解如何使用R语言解决线性回归问题

2015-03-29 15:50:48 3053

原创 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 825

原创 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 2596 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 720

原创 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 572

原创 Java进阶(七)正确理解Thread Local的原理与适用场景

本文结合实例介绍了 Thread Local 的原理与实现方法,并分析了其适用场景。

2017-12-21 12:27:03 1516

转载 Kafka设计解析(八)- Exactly Once语义与事务机制原理

本文介绍了Kafka实现事务性的几个阶段——正好一次语义与原子操作。之后详细分析了Kafka事务机制的实现原理,并介绍了Kafka如何处理事务相关的异常情况,如Transaction Coordinator宕机。最后介绍了Kafka的事务机制与PostgreSQL的MVCC以及Zookeeper的原子广播实现事务的异同

2017-11-28 21:38:43 1112

原创 深入浅出Zookeeper(一) Zookeeper架构及FastLeaderElection机制

本文介绍了Zookeeper的架构,并组合实例分析了原子广播(ZAB)协议的原理,包括但不限于Zookeeper的读写流程,FastLeaderElection算法的原理,ZAB如何保证Leader Failover过程中的数据一致性。

2017-11-27 18:49:25 1788 1

原创 流式处理界的新贵 Kafka Stream - Kafka设计解析(七)

本文介绍了Kafka Stream的背景,如Kafka Stream是什么,什么是流式计算,以及为什么要有Kafka Stream。接着介绍了Kafka Stream的整体架构,并行模型,状态存储,以及主要的两种数据集KStream和KTable。并且分析了Kafka Stream如何解决流式系统中的关键问题,如时间定义,窗口操作,Join操作,聚合操作,以及如何处理乱序和提供容错能力。最后结合示例讲解了如何使用Ka

2017-11-27 09:29:12 6515

原创 Java进阶(六)从ConcurrentHashMap的演进看Java多线程核心技术

本文分析了HashMap的实现原理,以及resize可能引起死循环和Fast-fail等线程不安全行为。同时结合源码从数据结构,寻址方式,同步方式,计算size等角度分析了JDK 1.7和JDK 1.8中ConcurrentHashMap的实现原理。

2017-07-05 09:17:19 693

原创 揭秘Kafka高性能架构之道-Kafka设计解析(六)

本文从宏观架构层面和微观实现层面分析了Kafka如何实现高性能。包含Kafka如何利用Partition实现并行处理和提供水平扩展能力,如何通过ISR实现可用性和数据一致性的动态平衡,如何使用NIO和Linux的sendfile实现零拷贝以及如何通过顺序读写和数据压缩实现磁盘的高效利用。

2017-04-25 06:49:02 2897

原创 机器学习(二) 如何做到机器学习竞赛Kaggle排名前2%

本文详述了如何通过数据预览,探索式数据分析,缺失数据填补,删除关联特征以及派生新特征等方法,在Kaggle的Titanic幸存预测这一分类问题竞赛中获得前2%排名的具体方法。

2017-04-13 08:09:00 3439 1

原创 Java进阶(五)Java I/O模型从BIO到NIO和Reactor模式

本文介绍了Java中的四种I/O模型,同步阻塞,同步非阻塞,多路复用,异步阻塞。同时将NIO和BIO进行了对比,并详细分析了基于NIO的Reactor模式,包括经典单线程模型以及多线程模式和多Reactor模式。

2016-08-23 07:00:09 5306 2

原创 UML(一) 类图及类间关系

在UML 2.*的13种图形中,类图是使用频率最高的UML图之一,它表示了类与类之间的关系,帮助开发人员理解系统。它是系统分析和设计阶段的重要产物,也是系统编码和测试的重要模型依据。本文详细介绍了类间的依赖关系,关联关系(聚合、组合等),实现关系以及继承关系的UML表示形式及其在代码中的实现方式。

2016-08-10 06:44:02 7169

原创 Java线程间通信方式剖析——Java进阶(四)

本文将介绍常用的线程间通信工具CountDownLatch、CyclicBarrier和Phaser的用法,并结合实例介绍它们各自的适用场景及相同点和不同点。

2016-06-24 06:57:45 1645

原创 当我们说线程安全时,到底在说什么——Java进阶系列(二)

提到线程安全,可能大家的第一反应是要确保接口对共享变量的操作要具体原子性。实际上,在多线程编程中我们需要同时关注可见性、顺序性和原子性问题。本篇文章将从这三个问题出发,结合实例详解volatile如何保证可见性及一定程序上保证顺序性,同时例讲synchronized如何同时保证可见性和原子性,最后对比volatile和synchronized的适用场景。

2016-06-13 07:24:13 2249

原创 Java设计模式(五) 多态的极致应用——组合模式

本文介绍了组合模式的概念,UML类图,优缺点,实例讲解以及组合模式(未)遵循的OOP原则。

2016-06-08 07:25:09 4415 1

原创 SQL优化(六) MVCC PostgreSQL实现事务和多版本并发控制的精华

数据库事务隔离性可通过锁机制或者MVCC实现,PostgreSQL默认使用MVCC。本文结合实例介绍了PostgreSQL的MVCC实现机制,并介绍了PostgreSQL如何通过MVCC保证事务的原子性和隔离性,最后介绍了PostgreSQL如何通过VACUUM机制克服MVCC带来的副作用。

2016-06-06 07:13:45 2968

原创 Java设计模式(十三) 别人再问你设计模式,叫他看这篇文章

本文讲解了设计模式与OOP的三大特性及OOP七项原则间的关系,并讲解了使用设计模式的好处及为何需要使用设计模式。最后通过问答形式讲解了设计模式相关的常见问题

2016-06-02 07:35:56 830

原创 Java设计模式(十二) 策略模式

本文结合实例详述了策略模式的实现方式,并介绍了如何结合简单工厂模式及Annotation优化策略模式。最后分析了策略模式的优缺点及已(未)遵循的OOP原则

2016-05-30 07:28:29 751

原创 Java设计模式(十一) 享元模式

本文介绍了享元模式的适用场景,并结合实例详述了享元模式的实现方式。最后分析了享元模式的优缺点及已(未)遵循的OOP原则

2016-05-23 08:22:38 780

原创 Java设计模式(四) 观察者模式

本文介绍了观察者模式的概念,UML类图,优缺点,实例分析以及观察者模式(未)遵循的OOP原则。

2016-05-20 08:07:30 991

原创 Java设计模式(十) 你真的用对单例模式了吗?

本文介绍了为何需要单例模式,单例模式的设计要点,饿汉和懒汉的区别,并通过实例介绍了实现单例模式的九种实现方式及其优缺点。

2016-05-16 08:20:40 1601 1

原创 Java设计模式(九) 桥接模式

当一种事物可在多种维度变化(如两个维度,每个维度三种可能)时,如果为每一种可能创建一个子类,则每增加一个维度上的可能需要增加多个类,这会造成类爆炸(3*3=9)。若使用桥接模式,使用类聚合,而非继承,将可缓解类爆炸,并增强可扩展性。

2016-05-12 07:29:34 958

原创 Java设计模式(七) Spring AOP JDK动态代理 VS. cglib

Spring的AOP有JDK动态代理和cglib两种实现方式。JDK动态代理要求被代理对象实现接口;cglib通过动态继承实现,因此不能代理被final修饰的类;JDK动态代理生成代理对象速度比cglib快;cglib生成的代理对象比JDK动态代理生成的代理对象执行效率高。

2016-05-06 07:49:33 1188

转载 如果有人问你数据库的原理,叫他看这篇文章

一提到关系型数据库,我禁不住想:有些东西被忽视了。关系型数据库无处不在,而且种类繁多,从小巧实用的 SQLite 到强大的 Teradata 。但很少有文章讲解数据库是如何工作的。你可以自己谷歌/百度一下『关系型数据库原理』,看看结果多么的稀少【译者注:百度为您找到相关结果约1,850,000个…】 ,而且找到的那些文章都很短。现在如果你查找最近时髦的技术(大数据、NoSQL或JavaScript

2016-05-05 19:58:25 2030

原创 Java设计模式(六) 代理模式 VS. 装饰模式

代理模式与装饰模式在代码组织结构上非常相近,以至于很多读者很难区分它们。本文将结合实例对比代理模式和装饰模式的适用场景,实现方式。

2016-05-03 07:11:47 923

原创 Java系列(一)Annotation(注解)

本文介绍了Java Annotation的概念及Java提供的四种Meta Annotation的功能,并结合实例详解了自定义Annotation的方法和注意事项

2016-04-18 20:36:16 1268

原创 Java设计模式(二) 工厂方法模式

本文介绍了工厂方法模式的概念,优缺点,实现方式,UML类图,并介绍了工厂方法(未)遵循的OOP原则

2016-04-18 10:05:05 850

原创 Kafka深度解析

介绍Kafka背景,使用消息系统的优势,常用消息系统对比,Kafka架构介绍,Kafka实现语义分析,Replication及Leader Election机制剖析,Consumer Group Rebalance实现原理介绍,以及Benchmark测试。

2016-02-29 21:29:35 1081

Spark 调优 在 facebook 的实践

Spark 调优 在 facebook 的实践

2018-12-10

Spark core 源码解读与扩展

深入浅出介绍了 spark core 的原理,同时也进行了扩展,是大数据从业者很好的参考资料

2018-12-10

快学 scala 中文版 带完整目录

目 录 译者序 V 第1版序 XVII 前言 XIX 作者简介 XXIII 第1章 基础 A1 1 1.1 Scala解释器 1 1.2 声明值和变量 4 1.3 常用类型 5 1.4 算术和操作符重载 7 1.5 关于方法调用 8 1.6 apply方法 9 1.7 Scaladoc 11 练习 16 第2章 控制结构和函数 A1 19 2.1 条件表达式 20 2.2 语句终止 22 2.3 块表达式和赋值 22 2.4 输入和输出 23 2.5 循环 25 2.6 高级for循环 27 2.7 函数 28 2.8 默认参数和带名参数 L1 29 2.9 变长参数 L1 29 2.10 过程 31 2.11 懒值 L1 31 2.12 异常 32 练习 35 第3章 数组相关操作 A1 39 3.1 定长数组 39 3.2 变长数组:数组缓冲 40 3.3 遍历数组和数组缓冲 41 3.4 数组转换 42 3.5 常用算法 44 3.6 解读Scaladoc 45 3.7 多维数组 47 3.8 与Java的互操作 48 练习 49 第4章 映射和元组 A1 53 4.1 构造映射 53 4.2 获取映射中的值 54 4.3 更新映射中的值 55 4.4 迭代映射 56 4.5 已排序映射 57 4.6 与Java的互操作 57 4.7 元组 58 4.8 拉链操作 59 练习 60 第5章 类 A1 63 5.1 简单类和无参方法 63 5.2 带getter和setter的属性 64 5.3 只带getter的属性 67 5.4 对象私有字段 68 5.5 Bean属性 L1 69 5.6 辅助构造器 71 5.7 主构造器 72 5.8 嵌套类 L175 练习 78 第6章 对象 A1 81 6.1 单例对象 81 6.2 伴生对象 82 6.3 扩展类或特质的对象 83 6.4 apply方法 84 6.5 应用程序对象 85 6.6 枚举 86 练习 87 第7章 包和引入 A1 91 7.1 包 91 7.2 作用域规则 93 7.3 串联式包语句 95 7.4 文件顶部标记法 95 7.5 包对象 96 7.6 包可见性 97 7.7 引入 97 7.8 任何地方都可以声明引入 98 7.9 重命名和隐藏方法 99 7.10 隐式引入 99 练习 100 第8章 继承 A1 103 8.1 扩展类 103 8.2 重写方法 104 8.3 类型检查和转换 105 8.4 受保护字段和方法 106 8.5 类的构造 106 8.6 重写字段 107 8.7 匿名子类 109 8.8 抽象类 109 8.9 抽象字段 110 8.10 构造顺序和提前定义 L3 110 8.11 Scala类继承关系 112 8.12 对象相等性 L1 114 8.13 值类 L2 116 练习 117 第9章 文件和正则表达式 A1 121 9.1 读取行 121 9.2 读取字符 122 9.3 读取词法单元和数字 123 9.4 从URL或其他源读取 124 9.5 读取二进制文件 124 9.6 写入文本文件 124 9.7 访问目录 125 9.8 序列化 125 9.9 进程控制 A2126 9.10 正则表达式 129 9.11 正则表达式组 130 练习 131 第10章 特质 A1135 10.1 为什么没有多重继承 135 10.2 当作接口使用的特质 137 10.3 带有具体实现的特质 138 10.4 带有特质的对象 139 10.5 叠加在一起的特质 140 10.6 在特质中重写抽象方法 141 10.7 当作富接口使用的特质 142 10.8 特质中的具体字段 143 10.9 特质中的抽象字段 144 10.10 特质构造顺序 145 10.11 初始化特质中的字段 147 10.12 扩展类的特质 148 10.13 自身类型 L2 149 10.14 背后发生了什么 151 练习 152 第11章 操作符 A1157 11.1 标识符 157 11.2 中置操作符 158 11.3 一元操作符 159 11.4 赋值操作符 160 11.5 优先级 161 11.6 结合性 162 11.7 apply和update方法 162 11.8 提取器 L2 164 11.9 带单个参数或无参数的提取器 L2166 11

2018-12-10

Linux/Unit Shell 脚本 指南 自己总结精华版

这个是本人在有一定的实战经验下,通过看书和看教学视频,结合一些人的学习需求总结出来的Linux /Unix 下Shell 脚本(命令)用法指南。为求好用,里面加入了不少例子。相信各位读者能很快上手。注:一定要多动手。

2012-12-30

空空如也

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

TA关注的人

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