-
Hadoop源码分析-08-Lease
前言在写文件和读取文件的时候,为了保证读写的一致性,如果一个客户端向HDFS写文件,是不允许其他客户端写入的。HDFS使用了租约(Lease)的机制,一个客户端写入数据他会持有临时的身份,但是如果身份过期后,需要续约或者需要释放该租约。下面作者聊聊HDFS的租约。租约概念相关类 LeaseManager Lease Monitor LeaseRenewer DFSClient LeaseManager 该类为核心的租约管理类,其中包含了Lease租约...…
-
Hadoop源码分析-07-INode
前言经常使用HDFS,一定听说过文件文件夹修改权限,但是听说过INode的可能不多,如果你对Linux底层比较熟悉的话,可能会了解到Linux存储文件的方式 是采用INode方式存储,HDFS也是仿照Linux底层实现了一套INode元数据文件的存储方式.其中涉及到在开发和使用中不常用的功能,比如XAttr,ACL,快照 等.本文笔者就介绍和简单分析一下HDFS INode结构.类结构梳理如下图INode周边类的结构 结构梳理 从上图我们可以看出,整体围绕INode...…
-
Hadoop源码分析-06-Compression
前言 文件压缩和解压在我们平时使用计算机的时候经常会提到,压缩一定程度上减少了磁盘成本,但是增加了CPU计算成本,在大数据中经常会使用到压缩, 在Hadoop中,我们会经常听说Gzip压缩,Lzo压缩,Snappy压缩,Bzip压缩等等,这些压缩算法各有各的好处.如果压缩速度上快了,自然压缩率会降低一些.笔者本文聊一聊压缩在Hadoop中的使用和源代码的部分剖析.压缩算法对比如下图为压缩算法压缩比和压缩解压速度对比 算法 压缩比 压缩速度 ...…
-
Hadoop源码分析-05-NetworkTopology
前言 如果读者使用过Hadoop,一定听说过移动计算不移动数据.提到这个就涉及到了Hadoop的机架感知.Hadoop机架感知包括了计算本地化以及存储分散化.相信很多的大数据使用者都或多或少了解过和配置过Hadoop的机架感知.笔者深入捋一捋Hadoop Common源码结构的部分实现逻辑,希望本文可以对读者起到一定帮助作用.核心类核心类基本介绍 Node InnerNode NodeBase InnerNodeImpl DomainNameResol...…
-
Hadoop源码分析-04-IPC
前言 Hadoop IPC为Hadoop RPC最底层的通讯,涵盖了HDFS各个角色组件的通讯以及Yarn各种组件组件的通讯,Hadoop IPC通讯机制依然采用了NIO非阻塞的方式实现的.尚未使用Netty作为其RPC调用的过程依赖.该源代码中涉及到了NIO中Selector,ByteBuffer,Channel,以及阻塞队列,等待和唤醒机制等等.NIO 知识点回顾Reactor工作模型 Nio也操作NoBlock IO,即非阻塞的IO,NIO采用了reactor工作模型.+ 当...…
-
Hadoop源码分析-03-阅读源码方法
前言 笔者早之前就阅读过Netty源代码以及MyBatis源代码,由于早期没有任何经验在阅读源代码是基本上都无从下手, 后来,随着笔者项目和工作经验的增加,对于阅读源代码有了一定的技巧,以Hadoop源代码为例,笔者大致介绍一下 源代码的阅读方法阅读之前准备知识储备举个例子,假如你要阅读Hadoop源代码,首先你要知道很多的分布式系统概念以及计算机网络,比如TCP的相关知识点,对Hadoop原理有一定的深入的理解,并且你已经使用了相当长的时间Hadoop. 笔者不建议你刚刚学习了几...…
-
Hadoop源码分析-02-Configuration
前言 在Hadoop启动的过程中,如果我们修改了配置后,会加载hdfs-site.xml core-site.xml yarn-site.xml 等配置文件,如果你没有修改配置文件,Hadoop默认会加载hdfs-default.xml文件.相对来说Configuration是比较结构简单,本文笔者分析一下关于Hadoop Configuration(配置类的结构),进一步加深读者对hadoop配置文件加载的理解.配置文件类介绍源码类解释 ConfigRedactor 存...…
-
Hadoop源码分析-01-Startup Progress
前言 在HDFS启动的过程中,我们可以在webUI观察到,Startup Progress.笔者以最新的源代码对这一部分源码做一个简要的分析,加深对HDFS启动加载的过程做一个更加深入的理解.启动过程剖析启动阶段(Phase) LOADING_FSIMAGE LOADING_EDITS SAVING_CHECKPOINT SAFEMODE public enum Phase { LOADING_FSIMAGE("LoadingFsImage", "Loa...…
-
Zookeeper不丢失Quorum扩容
前言 笔者平台搭建时,Zookeeper仅仅部署了三个节点,三个节点对于大型集群是比较少的.笔者对zk作了扩容.从3个节点扩容到了5个节点同时保证在不丢失已有的Quorum情况下,下面是笔者的操作的流程部署3台zk集群 mkdir ~/zookcd ~/zookwget http://apache.claz.org/zookeeper/zookeeper-3.4.5/zookeeper-3.4.5.tar.gz # You may wish to choose a closer m...…
-
禁用HiveCli,执行hive命令默认连接HiveServer2
前言目前我们使用Hive的大多数时候采用的HiveCli模式,但是HiveCli模式有一些短板,比如Ranger无法控制权限,所执行的相关脚本无法被Atlas捕获记录数据血缘关系,在交互方面HiveCli交互体验效果不是太好等等,Hive社区逐渐地抛弃HiveCli.生产环境通常使用诸如Zeus,Hera,Easyscheduler调度中心执行HQL,默认直接执行`hive -e "show databases;"`或者执行文件`hive -f show.hive`,由于生产环境已经使用了...…