专注于HDFS、HBase、Yarn、Spark、Kafka等领域研发
HDFS源码分析数据块复制监控线程ReplicationMonitor(二)
ReplicationMonitor是HDFS中关于数据块复制的监控线程,它的主要作用就是计算DataNode工作,并将复制请求超时的块重新加入到待调度队列。其定义及作为线程核心的run()方法如下: /** * Periodically calls computeReplicationWork().
UnderReplicatedBlocks还提供了一个数据块迭代器BlockIterator,用于遍历其中的数据块。它是UnderReplicatedBlocks的内部类,有三个成员变量,如下: // 当前迭代级别 private int level; ...
UnderReplicatedBlocks是HDFS中关于块复制的一个重要数据结构。在HDFS的高性能、高容错性体系中,总有一些原因促使HDFS系统内进行块复制工作,比如基于高性能的负载均衡、基于容错性的数据块副本数恢复等。
无论是第一次,还是之后的每次数据块汇报,名字名字节点都会对汇报上来的数据块进行检测,看看其是否为损坏的数据块。那么,损坏数据块是如何被检测的呢?本文,我们将研究下损坏数据块检测的checkReplicaCorrupt()方法。
关于数据块、副本的介绍,请参考文章《HDFS源码分析之数据块Block、副本Replica》。 一、数据块状态BlockUCState 数据块状态用枚举类BlockUCState来表示,代码如下: /** * States, ...
数据块在数据节点上是按照如下方式存储的。 首先是一个存储的根目录/hadoop/data/dfs/dn,如下图所示: 接着进入current目录,如下图所示: 再进入后续的BP-433072574-192.168.1.224-1440568979639下current目录,如下图所示: 在它下面,有一个版本号文件VERSION和分布式文件系统使用情况文件dfsUsed,然后就是两个文件夹,其中rbw存储的是处于写过程中的数据块,而finalized存储的则是写已完成并提交的数据块。
我们知道,HDFS中的文件是由数据块Block组成的,并且为了提高容错性,每个数据块Block都会在不同数据节点DataNode上有若干副本Replica。那么,什么是Block?什么又是Replica? 首先,我们看下Block的定义,如下: /**...
CorruptReplicasMap用于存储文件系统中所有损坏数据块的信息。仅当它的所有副本损坏时一个数据块才被认定为损坏。当汇报数据块的副本时,我们隐藏所有损坏副本。一旦一个数据块被发现完好副本达到预期,它将从CorruptReplicasMap中被移除。
PendingReplicationBlocks实现了所有正在复制的数据块的记账工作。它实现以下三个主要功能: 1、记录此时正在复制的块; 2、一种对复制请求进行跟踪的粗粒度计时器; 3、一个定期识别未执行复制请求的线程。
EditsDoubleBuffer是为edits准备的双缓冲区。新的编辑被写入第一个缓冲区,同时第二个缓冲区可以被flush。为edits准备的双缓冲区。新的编辑被写入第一个缓冲区,同时第二个缓冲区可以被flush。
在《HDFS源码分析EditLog之获取编辑日志输入流》一文中,我们详细了解了如何获取编辑日志输入流EditLogInputStream。在我们得到编辑日志输入流后,是不是就该从输入流中获取数据来处理呢?答案是显而易见的!在《HDFS源码分析之EditLogTailer》一文...
在《HDFS源码分析之EditLogTailer》一文中,我们详细了解了编辑日志跟踪器EditLogTailer的实现,介绍了其内部编辑日志追踪线程EditLogTailerThread的实现,及其线程完成编辑日志跟踪所依赖的最重要的方法,执行日志追踪的doTailEdits()方法。
在FSNamesystem中,有这么一个成员变量,定义如下: /** * Used when this NN is in standby state to read from the shared edit log.
KafkaProducer是一个Kafka客户端实现,可以发布记录records至Kafka集群。KafkaProducer是线程安全的,多线程之间共享单独一个producer实例通常会比多个producer实例要快。
InFlightRequests是对已经被发送或正在被发送但是均未接收到响应的客户端请求集合的一个封装,在它内部,有两个重要的变量,如下: // 每个连接最大执行中请求数 private final int maxInFlightRequestsPerC...
Sender为处理发送produce请求至Kafka集群的后台线程。这个线程更新集群元数据,然后发送produce请求至适当的节点。 首先,我们先看下它的成员变量: /* the state of each nodes connection *...
Java NIO的主要读写处理逻辑就是将数据从通道读入缓冲区,从缓冲区写入到通道中。而这个数据缓冲区的基类就是Buffer。而Buffer本质上就是一块可读写数据的内存,其提供了一些方法,方便外部调用者访问这块内存进行数据读写操作。
KafkaProducer是Kafka中Producer的一种实现,其主要功能就是发送消息给Kafka中broker。其send()方法如下: /** * Asynchronously send a record to a topic.
RecordAccumulator作为一个队列,累积记录records到MemoryRecords实例,然后被发送到服务器server。其成员变量如下: // RecordAccumulator是否关闭的标志位closed private volatile...
MemoryRecords是Kakfa中Record在内存中的实现形式,它基于Java NIO中ByteBuffer来实现。MemoryRecords中成员变量如下: private final static int WRITE_LIMIT_FOR_READABL...
RecordBatch是Kafka中Producer中对批量记录的一个封装,它表示正在或将要被发送的一批记录。这个类不是线程安全的,当修改它时必须使用外部同步。RecordBatch中的成员变量如下: // 记录数目recordCount public i...
awk是一个强大的文本分析工具,其对数据分析并生成报告的能力非常强大。它的处理流程为:将文件逐行读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理。 语法 awk [-F field-separator] 'commands' input-file(s) 其中,[-F field-separator]为可选的指定域分隔符,不指定的话默认为空格;commands是需要执行的命令;input-file(s) 是待处理的文件。
scp全称为secure copy,即安全拷贝,是Linux下进行远程拷贝文件的命令。与其相似的命令是cp和rsync,cp只是在本机进行拷贝不能跨服务器,rsync比较占用资源,虽然会比scp快,但是在小文件众多的情况下,rsync会导致磁盘I/O非常高,而scp则可以进行跨服务器传输,并且传输时加密的,同时不会消耗多少系统资源。
Impala如何加载HBase数据?本文将为大家进行详细介绍Impala加载HBase数据的步骤。 第一步:HBase创建表(或选择已有表) HBase shell命令行执行命令: create 'impala_hbase_test...
Impala中外部(external)表即数据已经存在于HDFS上的一组文件里,只需要把Impala表指向包含这些文件的目录即可。 语句: --创建数据库testexternal create database testexternal; --使用...
Catalogd进程是Impala中用来传递Impala SQL导致的元数据变化的组件,它把这些变化传递给集群中所有的节点。一个集群中只需要一个节点上有这个守护进程,因为请求是通过Statestore传递的,因此Statestored和Catalogd 服务应当运行在同一节点上。
StateStore是用来检查Impala集群中所有节点守护进程Impalad健康状况的守护进程,并且将它的发现持续性的发送给这些Impala守护进程。 一个集群中只需要一个节点上有这个守护进程,如果Impala集群中某个节点因为各种原因离线,StateStore会及时通知集群总其他节点,避免之后的查询会落到这些离线节点。
Impalad进程是Impala的核心组件,它是运行在集群中每个Impala节点上的一个守护进程。它主要负责: 1、从HDFS或HBase中读、写数据; 2、接收来自JDBC、Impala Shell等客户端命令; 3、并...
一、定义(来自百度百科) Impala是Cloudera公司主导开发的新型查询系统,它提供SQL语义,能查询存储在Hadoop的HDFS和HBase中的PB级大数据。
无需赘言,直接上代码: /** * Generates 32 bit murmur2 hash from byte array * 根据一个byte数组产生一个32位的murmur2 hash值 * * @param da...
grep命令的全称为global search regular expression(RE) and print out the line,即全面搜索正则表达式并把行打印出来。它能利用正则表达式搜索文本,并打印出匹配的行。
1、Producer端 import java.util.Properties; import kafka.javaapi.producer.Producer; import kafka.
一、安装 Kafka依赖于ZooKeeper,所以在安装Kafka之前请确保ZooKeeper集群已安装正确并能正常运行。虽然Kafka自身内置了ZooKeeper,但是还是建议大家单独部署ZooKeeper集群,因为可能其他框架也需要使用ZooKeeper。
HBase内部,单元格Cell的实现为KeyValue,它是HBase某行数据的某个单元格在内存中的组织形式,由Key Length、Value Length、Key、Value四大部分组成。
在HBase中,无论是MemStore的flush,还是HFile的Compact,都会涉及到新HFile的产生,那么HFile是如何产生的呢?我们又是如何将数据Cell写入到HFile中的呢?本文,我们将会大家简单介绍下HFile写入Cell的主体流程。
crontab命令是Linux操作系统中实现任务计划相关功能的命令。它包括了任务计划的制定、删除、查看等。其中常用的选项有: 1、-u :指定某个用户,不加-u选项则为当前用户; 2、-e :制定计划任务; 3、-l :列出计划任务; 4、-r :删除计划任务。
同df命令一样,du命令也是Linux中磁盘管理常用的三个命令之一,它的主要作用就是对指定文件或目录磁盘使用的空间的查看,如果没有指定,则默认为对当前路径磁盘使用的空间的查看。这一点还是同df命令有一定区别的。
df命令是Linux中磁盘管理常用的三个命令之一,它的主要作用就是列出文件系统的整体磁盘使用量,可以利用该命令来获取硬盘被占用了多少空间,目前还剩下多少空间等信息。 作用 列出文件系统的整体磁盘使用情况。
date命令是Linux中常用的一个命令,主要作用就是显示本机当前时间。如下: 在本人Linux操作系统中,date命令默认实现格式为年月日-星期-时分秒,然后是CST中央标准时间。
ZooKeeper有四种形式的目录节点,即四种CreateMode,两大类,持久化节点与临时节点,自动编号节点与非自动编号节点,两两组合,分别如下: 1、PERSISTENT 持久化目录节点,存储的数据不会丢失。
ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务。基于ZooKeeper,我们可以实现一种简单的分布式互斥锁,包括可重入与不可重入。代码如下: import java.
Watch是ZooKeeper中非常重要的一个机制,它可以监控ZooKeeper中节点的变化情况,告知客户端。下面,我们以代码为例来分析Watch在ZooKeeper中是如何实现的。
Watch是ZooKeeper中非常重要的一个机制,它可以监控ZooKeeper中节点的变化情况,告知客户端。下面,我们以代码为例来分析Watch在ZooKeeper中是如何实现的。
Watch是ZooKeeper中非常重要的一个机制,它可以监控ZooKeeper中节点的变化情况,告知客户端。下面,我们以代码为例来分析Watch在ZooKeeper中是如何实现的。
代码示例如下: import java.io.IOException; import org.apache.zookeeper.CreateMode; import org.
Alluxio源码分析是一个基于内存的分布式文件系统,和HDFS、HBase等一样,也是由主从节点构成的。而节点之间的通信,一般都是采用的RPC通讯模型。Alluxio中RPC是基于何种技术如何实现的呢?它对于RPC请求是如何处理的?都涉及到哪些组件?本文将针对这些问题,为您一一解答。
Alluxio源码分析是一个基于内存的分布式文件系统,和HDFS、HBase等一样,也是由主从节点构成的。而节点之间的通信,一般都是采用的RPC通讯模型。Alluxio中RPC是基于何种技术如何实现的呢?它对于RPC请求是如何处理的?都涉及到哪些组件?本文将针对这些问题,为您一一解答。
Alluxio源码分析是一个基于内存的分布式文件系统,和HDFS、HBase等一样,也是由主从节点构成的。而节点之间的通信,一般都是采用的RPC通讯模型。Alluxio中RPC是基于何种技术如何实现的呢?它对于RPC请求是如何处理的?都涉及到哪些组件?本文将针对这些问题,为您一一解答。
Thrift开发示例