[置顶] Java并发之ReentrantLock详解

一、入题        ReentrantLock是Java并发包中互斥锁,它有公平锁和非公平锁两种实现方式,以lock()为例,其使用方式为: ReentrantLock takeLock = new ReentrantLock(); // 获取锁 takeLock.lock(); try { // 业务逻辑 } finally { ...
阅读(4810) 评论(1)

[置顶] MapReduce源码分析之LocatedFileStatusFetcher

LocatedFileStatusFetcher通过多线程的方式,实现了针对给定输入路径数组,使用配置的线程数目来获取数据块位置的核心功能。它通过google的可监听并发技术ListenableFuture、ListeningExecutorService,实现了两层级别的子任务的并发执行、结果监听与回调处理,还使用了可重入互斥锁ReentrantLock、多线程间协调通信工具Condition来解决多线程之间的并发同步问题,特别是主任务线程与子任务线程间的主从协调、通信等。...
阅读(8145) 评论(0)

[置顶] HDFS源码分析之LightWeightGSet

LightWeightGSet是名字节点NameNode在内存中存储全部数据块信息的类BlocksMap需要的一个重要数据结构,它是一个占用较低内存的集合的实现,它使用一个数组存储元素,数组中存储的元素实际上是一个链表,这样,综合利用了数组、链表的优势,取长补短、相互促进。它利用long类型的blockId,采用一定的算法来定位元素在数组中的位置,并将其添加到列表头部,删除与查询亦是类似定位过程。...
阅读(6166) 评论(1)

[置顶] HDFS源码分析心跳汇报之数据块增量汇报

数据块增量汇报是负责向NameNode发送心跳信息工作线程BPServiceActor中周期性的一个工作,它负责向NameNode及时汇报DataNode节点上数据块的变化情况,比如数据块正在接收、已接收或者已被删除。它的工作周期要小于正常的数据块汇报,目的就是为了能够让NameNode及时掌握DataNode上数据块变化情况,以便HDFS系统运行正常,略显机智!而且,当数据块增量汇报不成功时,下一个循环会接着立即发送数据块增量汇报,而不是等其下一个周期的到来,这显示了HDFS良好的容错性,是一个值得我们借...
阅读(1170) 评论(0)

[置顶] HDFS源码分析心跳汇报之BPServiceActor工作线程运行流程

在《HDFS源码分析心跳汇报之数据结构初始化》一文中,我们了解到HDFS心跳相关的BlockPoolManager、BPOfferService、BPServiceActor三者之间的关系,并且知道最终HDFS的心跳是通过BPServiceActor线程实现的。那么,这个BPServiceActor线程到底是如何工作的呢?本文,我们将继续HDFS心跳分析之BPServiceActor工作线程。...
阅读(900) 评论(0)

[置顶] HBase源码分析之MemStore的flush发起时机、判断条件等详情(二)

在《HBase源码分析之MemStore的flush发起时机、判断条件等详情》一文中,我们详细介绍了MemStore flush的发起时机、判断条件等详情,主要是两类操作,一是会引起MemStore数据大小变化的Put、Delete、Append、Increment等操作,二是会引起HRegion变化的诸如Regin的分裂、合并以及做快照时的复制拷贝等,同样会触发MemStore的flush流程。同时,在《HBase源码分析之compact请求发起时机、判断条件等详情(一)》一文中,我们讲到了针对compa...
阅读(2737) 评论(0)

[置顶] HBase源码分析之HRegionServer上MemStore的flush处理流程(一)

在《HBase源码分析之HRegion上MemStore的flsuh流程(一)》、《HBase源码分析之HRegion上MemStore的flsuh流程(二)》等文中,我们介绍了HRegion上Memstore flush的主体流程和主要细节。但是,HRegion只是HBase表中按照行的方向对一片连续的数据区域的抽象,它并不能对外提供单独的服务,供客户端或者HBase其它实体调用。而HRegion上MemStore的flush还是要通过HRegionServer来对外提供服务的。下面,我们就详细探究下HR...
阅读(1804) 评论(0)

[置顶] HBase源码分析之HRegion上MemStore的flsuh流程(二)

继上篇《HBase源码分析之HRegion上MemStore的flsuh流程(一)》之后,我们继续分析下HRegion上MemStore flush的核心方法internalFlushcache(),它的主要流程如图所示:         其中,internalFlushcache()方法的代码如下: /** * Flush the memstore. Flushing the mems...
阅读(3389) 评论(2)

[置顶] HBase行锁原理及实现

请带着如下问题阅读本文。        1、什么是行锁?        2、HBase行锁的原理是什么?        3、HBase行锁是如何实现的?         三、HBase行锁的实现         HBase的行锁主要是通过HRegion的两个内部类实现的,其中一个是RowLock,另外一个是RowLockContext。         我们首先看RowLock...
阅读(3655) 评论(5)

[置顶] HBase源码分析之HRegion上MemStore的flsuh流程(一)

HRegion中,有两个关于关闭的状态标志位成员变量,分别定义如下: final AtomicBoolean closed = new AtomicBoolean(false); final AtomicBoolean closing = new AtomicBoolean(false); 为什么需要两个状态标志位呢?我么知道,Region下线关闭时,需要处理一些诸如flush等的操作,...
阅读(3131) 评论(0)

Hhadoop-2.7.0中HDFS写文件源码分析(二):客户端实现之DFSPacket

一、简介      HDFS在数据传输过程中,针对数据块Block,不是整个block进行传输的,而是将block切分成一个个的数据包进行传输。而DFSPacket就是HDFS数据传输过程中对数据包的抽象。二、实现      HDFS客户端在往DataNodes节点写数据时,会以数据包packet的形式写入,且每个数据包包含一个包头,n个连续的校验和数据块checksum chunks和n个连续的...
阅读(619) 评论(0)

Hhadoop-2.7.0中HDFS写文件源码分析(二):客户端实现(1)

一、综述      HDFS写文件是整个Hadoop中最为复杂的流程之一,它涉及到HDFS中NameNode、DataNode、DFSClient等众多角色的分工与合作。      首先上一段代码,客户端是如何写文件的:Configuration conf = new Configuration(); FileSystem fs = FileSystem.get(conf); Path file...
阅读(595) 评论(0)

Hadoop-2.7.0中HDFS NameNode HA实现之DFSZKFailoverController、ZKFailoverController(一)

一、简介      DFSZKFailoverController是Hadoop-2.7.0中HDFS NameNode HA实现的中心组件,它负责整体的故障转移控制等。它是一个守护进程,通过main()方法启动,继承自ZKFailoverController。二、实现流程      1、启动       通过main()方法启动,如下: /** * 进程启动的main()方法 */...
阅读(1486) 评论(1)

Hadoop-2.7.0中HDFS NameNode HA实现综述

一、原理      HDFS中NameNode等的HA是基于ZooKeeper实现的。它应用了ZooKeeper集群的如下功能或特性:      1、只要半数以上节点还存活,就继续能对外提供服务;      2、ZooKeeper通过Paxos算法提供了leader选举功能,其它follower learn leader;      3、ZooKeeper提供了watcher机制,只要ZooKee...
阅读(368) 评论(0)

Hadoop-2.7.0 HA实现细节分析之HealthMonitor

一、HealthMonitor是什么      HealthMonitor是一个周期性工作的后台线程,它在一个循环中周期性的同HA服务进行心跳,负责跟踪NameNode服务的健康状况,并在健康状况变化时调用failover控制器的回调方法。二、HealthMonitor是如何实现的      1、成员变量            HealthMonitor内部有如下主要成员变量:...
阅读(412) 评论(0)

Java源码分析之CountDownLatch

一、CountDownLatch介绍       CountDownLatch是一种同步手段,允许一个或者更多的线程等待,直到在其他线程正在执行的一组操作完成。给定count数目后CountDownLatch被初始化。await()方法阻塞,直到由于调用countDown()方法,当前count值达到0,之后所有等待线程被释放,而任何后续await()方法的调用会立即返回。这个是只有一次的现场,即...
阅读(197) 评论(0)

堆排序之Java实现

一、堆排序算法① 先将初始文件R[1..n]建成一个大根堆,此堆为初始的无序区② 再将关键字最大的记录R[1](即堆顶)和无序区的最后一个记录R[n]交换,由此得到新的无序区R[1..n-1]和有序区R[n],且满足R[1..n-1].keys≤R[n].key③由于交换后新的根R[1]可能违反堆性质,故应将当前无序区R[1..n-1]调整为堆。然后再次将R[1..n-1]中关键字最大的记录R[1...
阅读(189) 评论(0)

Java设计模式之单例模式

一、懒汉模式package com.pengli.designmode.singleton; public class Singleton1 { // 私有静态变量 // 需要 用volatile修饰 private static volatile Singleton1 singleton = null; // 私有构造函数,不能实例化 private Singleton1() {...
阅读(162) 评论(0)

冒泡排序之Java实现

一、冒泡排序算法      1、 比较相邻的元素。如果第一个比第二个大,就交换他们两个。      2、对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。      3、针对所有的元素重复以上的步骤,除了最后一个。      4、持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。      二、Java实现package com....
阅读(202) 评论(0)

Hadoop-2.7.0 HDFS DataXceiverServer两个参数的疑问

1、TcpPeerServer的数据接收缓冲区大小        Hadoop-2.7.0的DataXceiverServer中,在DataNode中对其初始化时,会构造一个TcpPeerServer,并设置数据接收缓冲区大小如下:tcpPeerServer.setReceiveBufferSize(HdfsConstants.DEFAULT_DATA_SOCKET_SIZE);        这...
阅读(263) 评论(0)

HBase-1.2.4LruBlockCache实现分析(二)

本文介绍LruBlockCache如何获取缓存数据。        缓存数据的获取是在方法getBlock()中实现的,代码如下: /** * Get the buffer of the block with the specified name. * @param cacheKey block's cache key * @param caching true if the ...
阅读(276) 评论(0)

HBase-1.2.4 CombinedBlockCache和InclusiveCombinedBlockCache

一、综述        在《HBase-1.2.4 Allow block cache to be external分析》一文的最后,讲解了如何实例化外部缓存MemcachedBlockCache。本文将对上文中提到的几种缓存中的InclusiveCombinedBlockCache和CombinedBlockCache做个综述。        上文中提到的缓存实现,有以下几种:        1...
阅读(251) 评论(0)

HBase-1.2.4 Allow block cache to be external分析

从HBase-1.1.0起,HBase可以使用memcached作为外部BlockCache,这是一个在设备失效或者升级时不会发生完全的冷缓存的很好的特性。用句通俗的话讲,就是HBase出现故障或者升级时,缓存轻易不会丢失。...
阅读(302) 评论(0)

HBase-1.2.4LruBlockCache实现分析(一)

BlockCache是HBase中的一个重要特性,相比于写数据时缓存为Memstore,读数据时的缓存则为BlockCache。 LruBlockCache是HBase中BlockCache的默认实现,它采用严格的LRU算法来淘汰Block。...
阅读(606) 评论(0)

HDFS Archival Storage

一、是什么二、怎么做      1、标记DataNode存储属性      2、重启DataNode      3、标记或查看HDFS路径存储策略      4、迁移数据      5、检查文件数据块三、测试四、我们可以用来做什么一、是什么      随着数据的日益增长,很多数据由热变冷,已经不再或者很少使用,而数据的存储需求越来越大,计算需求则相应增长不大。如何解耦这种急剧增长的存储需求和计算需...
阅读(443) 评论(0)
178条 共12页1 2 3 4 5 ... 下一页 尾页
    个人资料
    • 访问:419696次
    • 积分:6488
    • 等级:
    • 排名:第3691名
    • 原创:175篇
    • 转载:2篇
    • 译文:1篇
    • 评论:111条
    最新评论