hadoop源码
文章平均质量分 68
zhixingheyi_tian
Intel Big Data. Spark
展开
-
hadoop 2.6 源码解读之RPC Server 类高性能设计
hadoop 2.6 采用 谷歌protocol buffer作为通信协议,但是protocol buffer 相对于Thrift ,需要自己实现一套底层通信框架。hadoop Server类及其相关类,采用java NIO 及 多reactor 模式事件驱动I/O模型,外加多线程,实现了服务端高并发通信,构建了强有力的分布式基础设施。今天剖析下其代码实现。多reactorjava...原创 2018-04-10 17:11:31 · 171 阅读 · 0 评论 -
hadoop 2.6 源码 解读之FileSystem.get(conf)实现
hdfs 常见的获取文件系统代码,如下Configuration conf = new Configuration(); FileSystem fs; fs = FileSystem.get(conf);fs 最终指向的是FileSystem哪个子类呢,过程是怎么样的, 逐步跳进代码一看 public static FileSystem ...原创 2018-05-13 17:46:14 · 3386 阅读 · 0 评论 -
hadoop 2.6 源码 解读之创建文件
HDFS客户端创建文件示例Path file = new Path("demo.txt"); FSDataOutputStream outStream = fs.create(file); fs 是 DistributedFileSystem 实例, DistributedFileSystem createpublic HdfsDataOutputStream create(...原创 2018-05-13 21:39:02 · 387 阅读 · 0 评论 -
hadoop 2.6 源码 解读之写操作之总体流程篇
hdfs写文件示例代码 Configuration conf = new Configuration(); FileSystem fs = FileSystem.get(URI.create(file), conf); Path path = new Path(file); FSDataOutputStream out = fs.cr...原创 2018-05-14 17:59:38 · 332 阅读 · 0 评论 -
hadoop 2.6 源码 解读之关闭文件流
客户端写完文件之后,要关闭文件流,如下: out.write("hello".getBytes("UTF-8"));// out.writeUTF("da jia hao,cai shi zhen de hao!"); out.close();最后调用 DFSOutputStream 的 close() 方法..原创 2018-05-25 17:05:50 · 369 阅读 · 0 评论 -
hadoop 2.6 源码 解读之写操作之DataStreamer篇
DataStreamer是 在创建 文件流的时候已经初始化DFSClient create()方法中{ final DFSOutputStream result = DFSOutputStream.newStreamForCreate(this, src, masked, flag, createParent, replication, blockSize, p...原创 2018-05-22 21:08:47 · 1381 阅读 · 0 评论 -
hadoop 2.6 源码 解读之写操作中异常处理
nextBlockOutputStream 调用 createBlockOutputStream 创建到 pipeline 第一个DataNode 的输出流,如果失败,nextBlockOutputStream 会调用 abadonBlock() 放弃这个块,并将DataNode将入到故障节点队列中。然后重新向DataNode 申请新的数据块。重试一定次数,不成功就抛出异常...原创 2018-06-03 22:39:45 · 581 阅读 · 0 评论 -
hadoop 2.6 源码 解读之写操作服务端篇
Client 端发起的写请求通过流式接口到达Datanode后。Datanode的DataXceiverServer接受这个请求并构造DataXceiver对象, DataXceiver.writeBlock执行这个请求。DataXceiverServerDataXceiverServer 是个线程类,在run 方法里监听客户端的请求public void run() {....原创 2018-06-04 18:39:04 · 286 阅读 · 0 评论 -
hadoop 2.6 源码 解读之上传文件(-put)内部实现之FsShell init()篇
hdfs 命令行 -put 上传文件操作,通过shell脚本最终调用 FsShell 的main入口方法,实现相应的逻辑功能为便于debug调试,编写相应的测试程序模拟 -put 操作,示例代码如下public class TestShell { public static void main(String argv[]) throws Exception { ...原创 2018-05-29 17:52:39 · 647 阅读 · 1 评论 -
hadoop 2.6 源码 解读之上传文件(-put)内部实现之写数据篇
此篇blog,承接 《hadoop 2.6 源码 解读之上传文件(-put)内部实现之FsShell init()篇》:https://blog.csdn.net/zhixingheyi_tian/article/details/80499773入口处,FsShell run() 处 instance = commandFactory.getInstance(cmd); ...原创 2018-05-30 17:56:41 · 719 阅读 · 0 评论 -
hadoop 2.6 源码 解读之 HDFS小结
HDFS 文件 是 write-once-read-many ,不支持客户端的并行写操作。 租约(lease)机制保证了HDFS文件的互斥操作。 客户端写HDFS文件时,先从租约管理器(LeaseManager)申请一个租约,成为租约持有者,也就有了对该HDFS文件的独占权限Hadoop 2.3 以上,新增了centralized Cache Management,允许用户将一些文件目...原创 2018-04-28 10:41:27 · 258 阅读 · 0 评论 -
hadoop 2.6 源码 解读之 Namenode 与 Datanode 交互
Datanode启动后,会与Namenode握手、注册,以及第一次向NameNode发送全量块汇报,之后 每100个心跳间隔 (默认300s) 向Namenode发起增量汇报(添加、删除信息),同时间隔6小时发起全量汇报汇报(防止增量汇报出现异常)。为提高HDFS启动速度,针对DataNode第一次全量汇报,为提高响应速度,Namenode不会对元数据做处理(重新计算哪些需要删除 或 失效),推迟到原创 2018-04-27 17:57:04 · 313 阅读 · 0 评论 -
hadoop 2.6 源码 解读之读写中级单元Packet类
在hdfs中 Packet 是读写 网络传输的基本单元, 有必要探讨下Packet 的基本结构以下是Packet 类所有的数据成员,均已详细注释private static class Packet { private static final long HEART_BEAT_SEQNO = -1L; long seqno; // sequencenumber of bu...原创 2018-05-17 18:08:55 · 257 阅读 · 0 评论 -
hadoop 2.6 源码 解读之 DFSClient方法调用的RPC流程
DFSClient 是应用程序访问hdfs的主要入口类 其方法调用最终通过RPC通信触发服务端响应请求。 以 rename方法为例,介绍整个流程 public void rename(String src, String dst, Options.Rename... options) throws IOException { checkOpen(); try...原创 2018-04-13 11:47:22 · 402 阅读 · 1 评论 -
hadoop 2.6 源码 解读之NameNodeRpcServer启动及request处理
NameNodeRpcServer 启动监听clientRpcServer 用于响应 hdfs 客户端的 RPC请求 serviceRpcServer 用于响应 DataNode RPC 请求 /** * Start client and service RPC servers. */ void start() { clientRpcServer.start(...原创 2018-04-12 09:45:57 · 774 阅读 · 0 评论 -
hadoop 2.6 源码 解读之 DFSClient 中的 proxyInfo HA case 实现
在DFSClient 中this.namenode = proxyInfo.getProxy();proxyInfo 用于和NameNode通信的对象在HA模式下首先创建 failoverProxyProvider AbstractNNFailoverProxyProvider<T> failoverProxyProvider = creat...原创 2018-04-18 17:49:48 · 350 阅读 · 1 评论 -
hadoop 2.6 源码 解读之零拷贝数据传输
DataNode重要的数据功能之一是读取数据块原创 2018-05-09 13:00:10 · 667 阅读 · 0 评论 -
hadoop 2.6 源码 解读之限流
DataTransferThrottlerhdfs Datanode是 IO密集型应用,网络IO、磁盘IO容易成为系统的瓶颈。 Datanode 有各种任务占用这些共同资源,为保证可用性,有必要对流量进行控制//a class to throttle the data transfers. 实现限流作用的是类DataTransferThrottler ,其实现也相当简单: 周期period(毫原创 2018-05-09 18:52:20 · 263 阅读 · 0 评论 -
hadoop 2.6 源码 解读之追加写操作流程
客户端DistributedFileSystem.java调用入口 @Override public FSDataOutputStream append(Path f, final int bufferSize, final Progressable progress) throws IOException { statistics.incrementWrite...原创 2018-05-03 14:48:54 · 498 阅读 · 0 评论 -
hadoop 2.6 源码 解读之Namenode启停
NameNode类入口 public static void main(String argv[]) throws Exception { if (DFSUtil.parseHelpArgument(argv, NameNode.USAGE, System.out, true)) { System.exit(0); } try { Stri...原创 2018-05-04 16:01:44 · 325 阅读 · 0 评论 -
使用 intellij 远程调试 hdfs 源码 经验总结
最近在阅读hadoop源码,有时候为搞清楚来龙去脉,必要时得做debug。 在搭建调试环境的时候,遇到不少问题,最后逐一解决。在此分享给大家,以飨读者、同仁。NoClassDefFoundError第一个问题,莫名其妙,类找不到,代码都没标红,排查了很久以为环境没搭好。Exception in thread "main" java.lang.NoClassDefFoundErro...原创 2018-05-17 14:23:21 · 1621 阅读 · 1 评论 -
hadoop 2.6 源码 解读之 Fsimage 实现
实现类 为 FSImage 主要有三个功能保存命名空间,NameNode内存中的namespace 保存在本地文件系统fsimage 文件中加载fsimage 加载editlogseen_txid:保存了日志重置时的最新的 transaction id,并不代表 Namenode 内存中最新的事务id使用 protobuf 对 fsimage 文件 进行序列化合并 fsi...原创 2018-04-26 17:53:14 · 302 阅读 · 0 评论 -
hadoop 集群遇到的问题汇总
有时候报错会误导问题的定位和排查,比如下面这一款org.apache.hadoop.ipc.RemoteException(java.io.IOException): File /user/root/.sparkStaging/application_1539063128463_0573/__spark_libs__2844575839698714585.zip could only be re...原创 2018-11-12 09:43:06 · 593 阅读 · 0 评论