- 博客(178)
- 收藏
- 关注

原创 MapReduce源码分析之LocatedFileStatusFetcher
LocatedFileStatusFetcher通过多线程的方式,实现了针对给定输入路径数组,使用配置的线程数目来获取数据块位置的核心功能。它通过google的可监听并发技术ListenableFuture、ListeningExecutorService,实现了两层级别的子任务的并发执行、结果监听与回调处理,还使用了可重入互斥锁ReentrantLock、多线程间协调通信工具Condition来解决多线程之间的并发同步问题,特别是主任务线程与子任务线程间的主从协调、通信等。
2016-04-20 14:05:10
9305

原创 HDFS源码分析之LightWeightGSet
LightWeightGSet是名字节点NameNode在内存中存储全部数据块信息的类BlocksMap需要的一个重要数据结构,它是一个占用较低内存的集合的实现,它使用一个数组存储元素,数组中存储的元素实际上是一个链表,这样,综合利用了数组、链表的优势,取长补短、相互促进。它利用long类型的blockId,采用一定的算法来定位元素在数组中的位置,并将其添加到列表头部,删除与查询亦是类似定位过程。
2016-04-14 16:38:31
7638

原创 HDFS源码分析心跳汇报之BPServiceActor工作线程运行流程
在《HDFS源码分析心跳汇报之数据结构初始化》一文中,我们了解到HDFS心跳相关的BlockPoolManager、BPOfferService、BPServiceActor三者之间的关系,并且知道最终HDFS的心跳是通过BPServiceActor线程实现的。那么,这个BPServiceActor线程到底是如何工作的呢?本文,我们将继续HDFS心跳分析之BPServiceActor工作线程。
2016-03-19 17:22:01
2727
1

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

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

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

原创 HBase源码分析之HRegion上MemStore的flsuh流程(二)
继上篇《HBase源码分析之HRegion上MemStore的flsuh流程(一)》之后,我们继续分析下HRegion上MemStore flush的核心方法internalFlushcache(),它的主要流程如图所示: 其中,internalFlushcache()方法的代码如下:/** * Flush the memstore. Flushing the mems
2016-02-25 23:31:47
4749
1

原创 HBase源码分析之HRegion上MemStore的flsuh流程(一)
HRegion中,有两个关于关闭的状态标志位成员变量,分别定义如下:final AtomicBoolean closed = new AtomicBoolean(false);final AtomicBoolean closing = new AtomicBoolean(false);为什么需要两个状态标志位呢?我么知道,Region下线关闭时,需要处理一些诸如flush等的操作,
2016-02-25 21:21:36
4795

原创 HBase行锁原理及实现
请带着如下问题阅读本文。 1、什么是行锁? 2、HBase行锁的原理是什么? 3、HBase行锁是如何实现的? 三、HBase行锁的实现 HBase的行锁主要是通过HRegion的两个内部类实现的,其中一个是RowLock,另外一个是RowLockContext。 我们首先看RowLock
2016-02-20 23:41:50
10390
1
原创 Hhadoop-2.7.0中HDFS写文件源码分析(二):客户端实现之DFSPacket
一、简介 HDFS在数据传输过程中,针对数据块Block,不是整个block进行传输的,而是将block切分成一个个的数据包进行传输。而DFSPacket就是HDFS数据传输过程中对数据包的抽象。二、实现 HDFS客户端在往DataNodes节点写数据时,会以数据包packet的形式写入,且每个数据包包含一个包头,n个连续的校验和数据块checksum chunks和n个连续的
2016-12-20 17:18:52
3228
原创 Hhadoop-2.7.0中HDFS写文件源码分析(二):客户端实现(1)
一、综述 HDFS写文件是整个Hadoop中最为复杂的流程之一,它涉及到HDFS中NameNode、DataNode、DFSClient等众多角色的分工与合作。 首先上一段代码,客户端是如何写文件的:Configuration conf = new Configuration();FileSystem fs = FileSystem.get(conf);Path file
2016-12-19 16:12:57
5553
2
原创 Hadoop-2.7.0中HDFS NameNode HA实现之DFSZKFailoverController、ZKFailoverController(一)
一、简介 DFSZKFailoverController是Hadoop-2.7.0中HDFS NameNode HA实现的中心组件,它负责整体的故障转移控制等。它是一个守护进程,通过main()方法启动,继承自ZKFailoverController。二、实现流程 1、启动 通过main()方法启动,如下: /** * 进程启动的main()方法 */
2016-12-14 14:40:29
15849
原创 Hadoop-2.7.0中HDFS NameNode HA实现综述
一、原理 HDFS中NameNode等的HA是基于ZooKeeper实现的。它应用了ZooKeeper集群的如下功能或特性: 1、只要半数以上节点还存活,就继续能对外提供服务; 2、ZooKeeper通过Paxos算法提供了leader选举功能,其它follower learn leader; 3、ZooKeeper提供了watcher机制,只要ZooKee
2016-12-14 14:39:58
3323
原创 Hadoop-2.7.0 HA实现细节分析之HealthMonitor
一、HealthMonitor是什么 HealthMonitor是一个周期性工作的后台线程,它在一个循环中周期性的同HA服务进行心跳,负责跟踪NameNode服务的健康状况,并在健康状况变化时调用failover控制器的回调方法。二、HealthMonitor是如何实现的 1、成员变量 HealthMonitor内部有如下主要成员变量:
2016-12-11 11:54:26
2036
原创 Java源码分析之CountDownLatch
一、CountDownLatch介绍 CountDownLatch是一种同步手段,允许一个或者更多的线程等待,直到在其他线程正在执行的一组操作完成。给定count数目后CountDownLatch被初始化。await()方法阻塞,直到由于调用countDown()方法,当前count值达到0,之后所有等待线程被释放,而任何后续await()方法的调用会立即返回。这个是只有一次的现场,即
2016-12-10 12:26:49
764
原创 堆排序之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
2016-12-09 14:01:04
565
原创 Java设计模式之单例模式
一、懒汉模式package com.pengli.designmode.singleton;public class Singleton1 { // 私有静态变量 // 需要 用volatile修饰 private static volatile Singleton1 singleton = null; // 私有构造函数,不能实例化 private Singleton1() {
2016-12-09 10:05:38
535
原创 冒泡排序之Java实现
一、冒泡排序算法 1、 比较相邻的元素。如果第一个比第二个大,就交换他们两个。 2、对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。 3、针对所有的元素重复以上的步骤,除了最后一个。 4、持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。 二、Java实现package com.
2016-12-09 09:40:27
629
原创 Hadoop-2.7.0 HDFS DataXceiverServer两个参数的疑问
1、TcpPeerServer的数据接收缓冲区大小 Hadoop-2.7.0的DataXceiverServer中,在DataNode中对其初始化时,会构造一个TcpPeerServer,并设置数据接收缓冲区大小如下:tcpPeerServer.setReceiveBufferSize(HdfsConstants.DEFAULT_DATA_SOCKET_SIZE); 这
2016-12-07 18:46:21
1008
原创 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
2016-12-02 00:01:45
747
原创 HBase-1.2.4 CombinedBlockCache和InclusiveCombinedBlockCache
一、综述 在《HBase-1.2.4 Allow block cache to be external分析》一文的最后,讲解了如何实例化外部缓存MemcachedBlockCache。本文将对上文中提到的几种缓存中的InclusiveCombinedBlockCache和CombinedBlockCache做个综述。 上文中提到的缓存实现,有以下几种: 1
2016-12-01 23:54:23
860
原创 HBase-1.2.4 Allow block cache to be external分析
从HBase-1.1.0起,HBase可以使用memcached作为外部BlockCache,这是一个在设备失效或者升级时不会发生完全的冷缓存的很好的特性。用句通俗的话讲,就是HBase出现故障或者升级时,缓存轻易不会丢失。
2016-12-01 23:35:54
903
原创 HBase-1.2.4LruBlockCache实现分析(一)
BlockCache是HBase中的一个重要特性,相比于写数据时缓存为Memstore,读数据时的缓存则为BlockCache。 LruBlockCache是HBase中BlockCache的默认实现,它采用严格的LRU算法来淘汰Block。
2016-12-01 17:28:22
2479
原创 HDFS Archival Storage
一、是什么二、怎么做 1、标记DataNode存储属性 2、重启DataNode 3、标记或查看HDFS路径存储策略 4、迁移数据 5、检查文件数据块三、测试四、我们可以用来做什么一、是什么 随着数据的日益增长,很多数据由热变冷,已经不再或者很少使用,而数据的存储需求越来越大,计算需求则相应增长不大。如何解耦这种急剧增长的存储需求和计算需
2016-12-01 14:45:25
2113
原创 Hadoop-2.6.0 DFSClient Hedged Read实现分析
一、简介 DFSClient Hedged Read是Hadoop-2.4.0引入的一个新特性,如果读取一个数据块的操作比较慢,DFSClient Hedged Read将会开启一个从另一个副本的hedged读操作。我们会选取首先完成的操作,并取消其它操作。这个Hedged读特性将有助于控制异常值,比如由于命中一个坏盘等原因而需要花费较长时间的异常阅读等。二、开启 DFSCli
2016-11-29 18:05:19
4071
原创 《Redis设计与实现》阅读:Redis底层研究之哈希表hashtable
字典是一种存储键值对的抽象数据结构,其又被称为符号表(symbol table)、关联数组(associative array)或映射(map)。Redis使用字典存储键值对,而Redis在底层是通过自定义的哈希表来实现字典这一数据结构的。本文,我们将研究Redis中哈希表的实现。
2016-11-29 16:15:44
2391
原创 Hadoop-2.6.0NodeManager Restart Recover实现分析(二)
继上篇《Hadoop-2.6.0NodeManager Restart Recover实现分析(二)》。 4、NMLeveldbStateStoreService实现分析 在 1)、initStorage() initStorage()方法中,完成了存储相关的初始化,如下: @Override protected void initStorage(Co
2016-11-29 14:04:35
1079
原创 Hadoop-2.6.0NodeManager Restart Recover实现分析(一)
一、简介 This document gives an overview of NodeManager (NM) restart, a feature that enables the NodeManager to be restarted without losing the active containers running on the node. At a high level,
2016-11-29 13:38:13
1983
原创 NM Restart Design Overview
This document describes the design of the NodeManager restart work under YARN1336 and its subJIRAs. NM restart is a feature where the NodeManager can be restarted without losing the active containe
2016-11-28 14:27:51
641
原创 Hadoop-2.6.0 CPU CGroup实现分析
一、概述二、实现细节 1、CgroupsLCEResourcesHandler配置 2、setupLimits()核心实现 3、clearLimits()核心实现一、概述 Hadoop-2.6.0中对CPU CGroups的实现,主要是通过CgroupsLCEResourcesHandler来实现的,通过它的int*()系列方法初始化一些参数和环境,比如C
2016-11-28 10:58:21
1326
原创 HDFS读取文件失败Incorrect value for packet payload size
一、现象 Hadoop-2.7.2中,使用hadoop shell命令行读取文件内容时,针对大文件,会有如下报错,小文件则不会。hadoop fs -cat /tmp/hue_database_dump4.json 16/09/29 15:13:37 WARN hdfs.DFSClient: Exception while r
2016-09-30 10:41:01
3229
原创 container-executor.cfg文件及其各级父路径问题解决方案
一、背景 为了增加Hadoop CGroup来限制部分作业对CPU的占用,近日在搭建Hadoop-2.6.0的CGroup过程中,碰到了以下一个问题,提示如下(注:500为用户hadoop的id号):File /opt/hadoop/hadoop-2.6.0/etc/hadoop/container-executor.cfg must be owned by root, but is o
2016-09-28 09:37:40
5270
2
原创 Java并发之Semaphore详解
一、入题 Semaphore是一种基于计数的信号量。它可以设定一个阈值,基于此,多个线程竞争获取许可信号,做完自己的申请后归还,超过阈值后,线程申请许可信号将会被阻塞。Semaphore可以用来构建一些对象池,资源池之类的,比如数据库连接池,我们也可以创建计数为1的Semaphore,将其作为一种类似互斥锁的机制,这也叫二元信号量,表示两种互斥状态。它的用法如下: 二、
2016-08-09 20:51:38
29908
原创 Java并发之ReentrantLock详解
一、入题 ReentrantLock是Java并发包中互斥锁,它有公平锁和非公平锁两种实现方式,以lock()为例,其使用方式为: ReentrantLock takeLock = new ReentrantLock(); // 获取锁 takeLock.lock(); try { // 业务逻辑 } finally {
2016-08-08 21:03:58
26713
3
翻译 Live long and process (#LLAP) 翻译
Live long and process (#LLAP) sershe, sseth, hagleitn, 2014-08-27.Overview综述Hive has become significantly faster thanks to various features and improvements that were built by the community over the p
2016-08-03 13:40:22
2540
原创 Yarn中ResourceManager相关三大RPC协议
ResourceManager是Hadoop资源管理器Yarn的Master,负责资源的统一管理和调度。它与Yarn中另外三个组件协同工作,共同完成应用程序在Yarn上的资源管理与调度。ResourceManager居于整体体系的正中,这也印证了它是Hadoop Yarn中Master节点。它通过不同的RPC协议与NodeManager、ApplicationMaster、Application Client一起协同工作,首先由Application Client向ResourceManager提交应用程序
2016-07-23 11:39:02
3773
原创 《Redis设计与实现》阅读:Redis底层研究之简单动态字符串SDS
除仅用于字符串字面量的情况外,对于可以被修改值的字符串的表示,Redis底层并没有采用C语言传统的字符串表示,即以空字符结尾的字符数组,而是采用专门为其设计的简单动态字符串作为其默认字符串表示,其英文全称为Simple Dynamic String,简称SDS。除了用于保存数据库中字符串值外,SDS也可以用于缓冲区buffer,比如AOF中的缓冲区、客户端输入缓冲区等。本文,我们将详细研究简单动态字符串SDS的实现及其在性能等方面的独特之处。
2016-05-14 13:06:33
6396
转载 (转载)Kafka文件存储机制那些事
转自《Kafka文件存储机制那些事》,by美团点评技术团队,地址:http://tech.meituan.com/kafka-fs-design-theory.html! 分析的很不错,转载下来! Kafka是什么Kafka是最初由Linkedin公司开发,是一个分布式、分区的、多副本的、多订阅者,基于zookeeper协调的分布式日志系统(也可以当做MQ系统),常见可
2016-05-11 13:47:49
5138
转载 (转载)从Apache Kafka 重温文件高效读写
文章转自《从Apache Kafka 重温文件高效读写》,地址:http://calvin1978.blogcn.com/articles/kafkaio.html! 写的非常不多,转载下来!0. Overview卡夫卡说:不要害怕文件系统。它就那么简简单单地用顺序写的普通文件,借力于Linux内核的Page Cache,不(显式)用内存,胜用内存,完全没有别家那样要同时维护内存中数
2016-05-11 13:41:00
6353
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人