Russ Xia Blog

身处寒夜,把握星光。

构建第一个Flink应用

编写Flink程序

开发环境准备 JDK 1.8 ➜ [/Users/russ/workspace] java -version java version "1.8.0_191" Java(TM) SE Runtime Environment (build 1.8.0_191-b12) Java HotSpot(TM) 64-Bit Server VM (build 25.191-b12, mixed mod...

Hive的安装和使用

Hive的安装和使用步骤,以及Hive中的分区和桶

前置准备 安装JDK 安装Mysql 安装Hadoop 启动HDFS和YARN Hive的安装 下载hive https://hive.apache.org/downloads.html 配置相关参数(本例以本地模式(local metastroe)启动) 启动mysql,并创建对应数据库(本例名为hive) 将mysql的j...

Hive的基本概念

Hive的基本架构、体系结构,以及和传统数据库的对比

什么是Hive? Hive是一个构建在Hadoop上的数据仓库框架。 Hive定义了类似SQL的Hive QL,允许用户用类似SQL的方式进行操作。Hive把SQL查询转换为一系列在Hadoop集群上运行的map-reduce作业。 Hive的基本架构 Hive的基本组成: 用户接口:包挎CLI(shell命令行)、JDBC/ODBC,WebUI等 元数据存储:通常是存储在关系...

Sharding-JDBC Lexer源码分析

Lexer的源码分析,Lexer时怎么做词法分析的

Sharding-JDBC Lexer源码分析 Lexer中的Toekn Lexer在Sharding-JDBC中的主要作用是顺序解析sql,将字符串解析成一个个Token(包含词法类型、词法字面量、sql字符串中结束位置等信息)。 @RequiredArgsConstructor @Getter public final class Token { //词法类型 pr...

Java中几种属性copy工具比较

常见的属性copy工具及其性能对比

Java中几种属性copy工具比较 属性copy是日常开发中比较常见的操作,如DO转DTO等。常见的属性copy工具类方法有: 直接调用类的getter setter方法(效率高,代码长) Spring提供的BeanUtils.copyProperties(Object source, Object target[,String… ignoreProperties])工具方法。...

AQS中的独占模式

AQS的毒战模式,以及公平锁和非公平锁

三、AQS中的独占模式 本文以ReentrantLock的非公平锁为例。上半部分主要讲述了获取锁的过程,下半部分主要讲述释放锁的过程。 ReentrantLock中的加锁操作 ReentrantLock是一个可重入锁!compareAndSetState(0, 1)可以理解为获取锁的操作,如果返回true,则获取锁成功。 下面以ReentrantLock.NonfairSync为例,...

AQS的基本数据结构

AQS的数据结构以及acquire和release的实现

AQS的基本数据结构 AQS的背景 AbstractQueuedSynchronizer(简称AQS)是整个JUC的基础,大部分的同步器都是基于AQS的。 Doug Lea在设计之初,再设计之初,希望建立一个小框架,AQS类,来为构造这些同步器提供一种通用的机制。 我们平常所熟悉的,Semaphore、CountDownLatch、ReentrantLock、ReentrantRead...

基于自旋的CLH锁

CLH锁的Java实现

基于自旋的CLH锁 什么是CLH锁 CLH锁满足一下几个特点 CLH锁是利用链表实现的无界队列,公平的(FIFO队列),自旋锁。 线程在局部变量上自旋,不断轮询前置节点的状态,如果发现前置节点已经释放了锁,则结束自旋获取锁。 AQS(AbstractQueuedSynchronizer)源码中使用的是CLH锁的一个变种。 CLH算法 CLH算法的数据结构及实现 数...

自旋锁和互斥锁

自旋锁和互斥锁的区别和对比

自旋锁和互斥锁 自旋锁的由来 计算机系统资源总是有限的,有些资源需要互斥访问,因此就有了锁机制,只有获得锁的线程才能访问资源。锁保证了每次只有一个线程可以访问资源。 当线程申请一个已经被其他线程占用的锁,就会出现两种情况。一种是没有获得锁的线程会阻塞自己,等到锁被释放后再被唤起,这就是互斥锁;另一种是没有获得锁的线程一直循环在那里看是否该锁的保持者已经释放了锁,这就是自旋锁。 对自旋...

基于SnowFlake的分布式主键生成器

SnowFlake的算法分析和实现

基于SnowFlake的分布式主键生成器 常见的分布式主键生成策略 UUID UUID(Universally Unique Identifier)主要优点是: 性能高,本地生成,不需要网络开销; 主要缺点: 太长不易存储,也不适合做MySQL.InnoDB引擎的主键(索引开销大大增大) 基于MAC地址生成,信息不安全 类SnowFlake方案 这个也是我...