- 博客(31)
- 资源 (1)
- 收藏
- 关注
原创 cdh5.15.1集成flink说明
本文说明如何在已有的cdh集群上添加flink服务。分为如下几步进行说明:1.环境说明2.flink-parcel的制作3.cm添加flink-parcel4.cm上添加flink服务5.验证环境说明flink-parcel制作前提:在制作flink-parcel的时候保证git、maven已安装并可以访问外网。 制作分为如下步骤:1)下载制作包执行命令:git clone https://github.com/pecanNBU/flin...
2020-05-30 21:00:48
2029
4
原创 cdh5.15.1添加kafka服务
安装好cdh后在cloudera-manager管理界面上并没有kafka服务,在CDH官网中关于Kafka的安装和升级中已经说到,在CDH中,Kafka作为一个分布式的parcel,单独出来作为parcel分发安装包。只要我们把分离开的kafka的服务描述jar包和服务parcel包下载了,就可以实现完美集成了。(一)查看版本对应访问网址https://www.cloudera.com/documentation/enterprise/release-notes/topics/rn_con...
2020-05-29 15:11:08
1453
3
原创 cdh5.15.1离线搭建说明
由于使用apache hadoop进行部署,部署步骤繁多,管理运维成本较高,于是使用Cloudera Manager进行部署、管理hadoop集群,能够加快部署,减少运维成功,同时支持其他集群的部署和管理,如:kafka、zookeeper、spark等。前言 本文档的搭建说明是基于centos7、jdk8、cdh5.15.1、cloudera manager5.15.1,部署节点为3个对应的hostname为node1、node2和node3。下载资源下载cloudera m...
2020-05-28 18:48:58
955
3
原创 hbase-compact剖析
前面的文章介绍了当达到一定的条件后memstore会flush生成hfile,随着hfile文件逐渐增多,查询可能需要更多的IO操作,为了合并这些hfile文件从而衍生出了compaction操作。compact分为两种:Minor Compaction、Major Compaction。Minor Compaction:选择部分小的、相邻的文件合并为一个大文件。 Major Compation:将store中所有的hfile文件合并成一个大的文件,并且在这个阶段将过期的数据、...
2020-05-28 10:26:09
395
原创 hbase-window idea调试源码
个人觉得debug运行代码是理解代码最为有效的方式,所以今天说一下在window上使用idea进行调试运行hbase源码(使用的是cdh版本的hbase)。下面将从环境配置、源码编译、配置修改以及运行四个方面进行讲解。环境配置1).下载源码,本次讲解的是cdh的hbase,所以git地址为:https://github.com/cloudera/hbase.git2).idea环境配置,使用idea打开下载的pom文件,进行下面图片所示的配置3)切换hbase源码版本。...
2020-05-18 18:14:02
712
原创 hbase-region split剖析
hbase region 切分是hbases水平扩展一个重要因素,将一个region切分为两个小region,并将切分后的region放在不同的节点上,以达到将负载进行均衡到其他节点。下面从split的策略、split流程以及split策略的设置三方面进行讲解region split。split策略region split的策略分为如下几种DisabledRegionSplitPolicy、ConstantSizeRegionSplitPolicy、IncreasingToUpper...
2020-05-15 00:49:22
566
原创 hbase-memstore flush剖析
memstore是hbase中一个非常重要的组件,对于hbase的读写操作的性能起到举足轻重的作用,下面讲从memstore概述、memstore flush触发条件、memstore flush流程、memstore flush流程源码四个方面对memstore进行说明memstore概述 一个RegionServer上对应多个Region,一个Region对应多个Store,一个Store对应一个Memstore和多个HFile,几者之间的关系如下图Regionserve...
2020-05-12 23:38:31
340
原创 hbase-BucketCache剖析
虽说hbase适合写多读少,但是hbase的读性能也是非常强悍的,hbase有如此好的读性能其中少不了BlockCache。BlockCache是regionserver级别的一种缓存,目前有三种实现方式:LruBlockCache、SlabCache和BucketCache,本文只对BucketCache的实现方式进行剖析。本文从BucketCache的内存模型、读写流程以及使用配置三方面进行说明。 BucketCache可以指定三种不同的存储介质:onHeap(java堆上内存)、of...
2020-05-12 00:03:06
1690
原创 hbase-put流程剖析
众所周知hbase是一个写性能非常优越的NOSQL,今天从源码中分析一下put操作到了region中是如何进行处理的。 region中处理put请求的大致流程如下图所示:1)检查region状态并尝试获取region中读写锁中的读锁,1.检查读操作时是否可读。2.检查region是否rit状态,是则不允许read、split和merge操作。3.获取region读写...
2020-05-07 20:08:20
864
原创 多线程并发编程20-线程同步之CyclicBarrier
前文介绍了使用CountDownLatch来实现线程间同步,但是CountDownLatch的计数器是一次性的,当计数器值减到0之后再调用await或countdown方法就会立刻返回。今天讲解的CyclicBarrier是一种可重置的线程间同步,当指定个数的线程全部到达了一个状态后再全部同时执行,并重置CyclicBarrier。 下面通过一个代码示例介绍CountDownLa...
2020-04-18 00:03:23
182
原创 多线程并发编程19-线程同步之CountDownLatch
说到线程同步第一个想到的一定是Thread类的join方法,当需要等待一个线程执行结束之后再接着执行本线程接下去的逻辑,join经常会在这种场景下被使用,但是join方法是Thread类的方法,需要使用Thread类实例进行调用,不够灵活,不能满足不同场景的需求,例如使用线程池来管理线程的时,一般直接添加Runnable到线程池,这个时候就没办法再调用线程的join方法,而接下来要介绍的C...
2020-04-08 22:35:28
538
原创 多线程并发编程18-定时线程池ScheduledThreadPoolExecutor
ScheduledThreadPoolExecutor是一个可以指定一定延迟时间后或者定时进行任务调度执行的线程池,继承于ThreadPoolExecutor,关于ThreadPoolExecutor的介绍请查看前面文章。因为继承于ThreadPoolExecutor,所以ScheduledThreadPoolExecutor内部也有如下参数:corePoolSize:线程池核...
2020-04-05 21:41:51
904
原创 多线程并发编程17-线程池ThreadPoolExecutor源码剖析
今天来说一说线程池ThreadPoolExecutor,线程池主要解决两个问题:一是当执行大量异步任务时线程池能够提供较好的性能。在不使用线程池时,每当需要执行异步任务时直接new一个线程来运行,而线程的创建和销毁都需要开销。线程池中的线程是可以复用的,不需要每次执行异步任务都进行创建线程,从而减少了开销。二是线程池提供了一种资源限制和管理的手段,例如限制线程的个数、动态增加线程的个数、缓...
2020-04-05 21:40:59
223
原创 多线程并发编程16-并发队列总结
前面介绍了5种并发队列的原理,ConcurrentLinkedQueue、LinkedBlockingQueue、ArrayBlockingQueue、PriorityBlockingQueue和DelayQueue。下面横向的对比一下这5中并发队列的异同。 ConcurrentLinkedQueue是非阻塞无界的双向FIFO队列,ConcurrentLinkedQueue是5个...
2020-04-04 15:08:35
193
原创 多线程并发编程15-DelayQueue源码剖析
今天来说一说DelayQueue,DelayQueue并发队列是一个无界阻塞延迟队列,队列中的每个元素都有一个过期时间,当从队列获取元素时,只有过期元素才会出队列,不允许存放null元素。队列头元素是最快要过期的元素。 DelayQueue内部有一个PriorityQueue优先队列,存入到该队列的元素都实现Delayed接口,由于每个原始都有一个过期时间,所以要实现获取当前元素...
2020-04-04 15:07:22
180
原创 多线程并发编程14-PriorityBlockingQueue源码剖析
PriorityBlockingQueue是带优先级的无界阻塞队列,每次出队都返回优先级最高或最低的元素。其内部使用平衡二叉树堆实现的,所以遍历队列元素不能保证有序性。默认使用对象的compareTo方法进行比较,也可以自定义comparators。 PriorityBlockingQueue内部有一个数组用来存放队列元素,在前面介绍的ArrayBlockingQueue类中也有...
2020-03-23 21:26:44
195
原创 多线程并发编程13-ArrayBlockingQueue源码剖析
前面一文介绍了有界链表阻塞队列LinkedBlockingQueue,今天来说一说有界数组阻塞队列ArrayBlockingQueue。 ArrayBlockingQueue类中的常用方法和前文介绍的LinkedBlockingQueue类常用方法一样,内部源码实现也大同小异。ArrayBlockingQueue类初始化一个固定大小的数组items,使用ReentrantLock...
2020-03-23 21:25:40
129
原创 多线程并发编程12-LinkedBlockingQueue源码剖析
前面的文章介绍了使用CAS算法实现的非阻塞有界队列ConcurrentLinkedQueue,今天介绍另一个并发队列LinkedBlockingQueue。 LinkedBlockingQueue是一个阻塞有界的队列,使用单链表实现,和ConcurrentLinkedQueue一样也有两个Node,分别存放首、尾节点,并且还有一个初始值为0的原子变量count,用来记录队列元素个...
2020-03-22 20:23:23
272
原创 多线程并发编程11-ConcurrentLinkedQueue源码剖析
今天来说一说ConcurrentLinkedQueue类,ConcurrentLinkedQueue类是线程安全的非阻塞无界的FIFIO队列,通过CAS算法进行入队和出队。 ConcurrentLinkedQueue类中主要的成员变量如下:private transient volatile Nodehead; //内部双向列表的头节点,volatile保证内存可见性。...
2020-03-22 20:20:37
172
原创 多线程并发编程10-CopyOnWriteArrayList源码剖析
今天来说一说CopyOnWriteArrayList类,纵观JUC包下并发List只有CopyOnWriteArrayList类。CopyOnWriteArrayList是一个线程安全的ArrayList,从它的命名也能看出在进行写操作的时候会进行复制,这种写时复制策略会产生弱一致性问题。下面对CopyOnWriteArrayList类继续剖析。 在CopyOnWriteArra...
2020-03-18 22:49:37
698
原创 多线程并发编程9-ReentrantReadWriteLock源码剖析
前面文章说到了ReentrantLock,解决线程间安全问题,使用ReentrantLock就可以,但是ReentrantLock是独占锁,某一个时刻只能一个线程获取锁,在写少读多的场景下,显然ReentrantLock并不能满足次场景。今天要说的ReentrantReadWriteLock锁就能满足写少读多的场景。 ReentrantReadWriteLock锁采用读写分离的策...
2020-03-18 22:48:58
133
原创 多线程并发编程8-ReentrantLock源码剖析
今天来说一说ReentrantLock类。ReentrantLock是可重入的独占锁,同时只能有一个线程获取该锁,其他获取该锁的线程就会被阻塞挂起。 ReentrantLock内部最为核心的就是Sync实例,内部类Sync继承AbstractQueuedSynchronizer,又根据公平锁还是非公平锁实现对应的FairSync类和NonfairSync类。ReentrantLo...
2020-03-17 23:10:05
139
原创 多线程并发编程7-AQS源码剖析
今天来说一说AQS,是AbstractQueuedSynchronizer抽象同步队列的简称。AbstractQueuedSynchronizer类是实现同步器的基础组件,并发包中的锁的底层使用的就是AQS。AbstractQueuedSynchronizer类中的唤醒和挂起是用的LockSupport类,并添加了一些别的参数,上层不同的锁机制以及同步机制就是对这些新增的参数进行不同的操作...
2020-03-17 23:07:52
172
原创 多线程编发编程6-LockSupport源码剖析
今天来说一说LockSupport类,为什么要说该类呢?因为这LockSupport类是锁和同步类的基础,它提供线程的挂起和唤醒。其实从源码中也可以看到LockSupport只是多Unsafe类的park系列方法和unpark系列方法进行了一层浅浅的封装。 LockSupport类与每个使用它的线程都会关联一个许可证,在默认情况下调用LockSupport类方法的线程是不持有许可...
2020-03-15 22:48:44
113
原创 多线程并发编程5-ThreadLocalRandom类源码剖析
今天来说一说ThreadLocalRandom类,ThreadLocalRandom类是juc包下的随机数生成器,它弥补了Random类的不足。下面介绍Random的源码实现、Random存在的问题以及ThreadLocalRandom是如何优化Random存在的缺陷的。Random Random类是一个使用广泛的随机生成工具类,下面的代码相信大家一定不陌生,Rando...
2020-03-15 22:47:40
271
原创 多线程并发编程4-原子操作类源码剖析
今天来讲一讲原子操作类,JUC包提供了一系列的原子性操作类,这些操作类使用的是CAS非阻塞算法实现的,相比于锁,原子性的操作性能有更大的提升。各个原子操作类的实现原理都大同小异,今天就拿AtomicLong类进行讲解。除了讲解AtomicLong类之后还会讲解JDK8新增的原子操作类LongAdder.AtomicLong 从AtomicLong类中的源码可以看出来,Atom...
2020-03-14 17:19:57
198
原创 多线程并发编程3-锁类型
本文来说一说锁的各个类型以及之间的差异。乐观锁与悲观锁 乐观锁和悲观锁是在数据库中引入的名词,但在java的并发锁中也使用了乐观锁和悲观锁的思想。 乐观锁,认为数据在一般情况下不会造成冲突,所以在对数据进行读操作的时候不会加排它锁,而是在进行数据写的时候,才会对数据冲突与否进行检测,也就是加排他锁。由于乐观锁是在提交时才锁定,所以不会产生任何死锁。juc中CopyO...
2020-03-14 17:16:35
129
原创 多线程并发编程2-基础2
并发与并行 本文抛出的第一个问题就是何为并发?何为并行?并发,是指同一时间段多个任务同时都在执行,并都没有结束。经常有听到TPS/QPS这些指的就是每秒的并发的响应数/请求数。并行,是指在单位时间内多个任务同时在执行。 在以前的单CPU时代多线程并发并没有什么意义,因为单个CPU同一个单位时间只能执行一个任务,其余为被执行的任务就需要被挂起,这就导致线程间频繁的上下文切换带来了...
2020-03-14 17:14:24
300
原创 多线程并发编程1-基础1
线程与进程多线程,首先第一个会问的就是什么是线程?什么是进程?进程是代码在数据集合上的一次运行运动,是系统进行资源分配和调度的基本单位。线程是进程中的一个执行路径,一个进程中至少有一个线程(main),进程中的多个线程共享进程的资源。关于操作系统的资源分配这里多说一句,操作系统是把资源分配给进程的,但是CPU资源比较特殊,它是直接分配给线程的。线程的生命周期...
2020-03-13 22:14:21
142
原创 hbase-visibility(可见性标签)
可见性标签是一串逻辑表达式字符串,用于标定数据的可见性。启用可见性标签在hbase-site.xml配置文件中添加如下配置 hbase.coprocessor.user.region.classes org.kye.endpoint.impl.CountRowEndpoint 自定义endpoint coprocessor hfile.format.v...
2019-03-08 17:59:44
1278
原创 geomesa hbase为已创建好的schema添加字段
记录一次为已创建好的schema添加字段,使用hbase作为数据源。当迭代不断的向前业务不断的加大,导致前期设计的schema无法满足现在业务的需求,需要在已创建好的schema上新增字段以此来满足需求。schema新增字段很自然的会想到更新schema,刚好api接口中有个接口void updateSchema(String typeName, SimpleFeatureType featu...
2019-02-22 16:56:36
1371
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人