hdfs 读数据的流程

1、跟namenode通信查询元数据,找到文件块所在的datanode服务器。
2、挑选一台datanode(就近原则,然后随机)服务器,请求建立socket流。
3、datanode开始发送数据(从磁盘里面读取数据放入流,以packet为单位来做校验)。
4、客户端以packet为单位接收,现在本地缓存,然后写入目标文件。

hdfs 写数据的流程

1、根namenode通信请求上传文件,namenode检查目标文件是否已存在,父目录是否存在。
2、namenode返回是否可以上传。
3、client请求第一个 block该传输到哪些datanode服务器上。
4、namenode返回3个datanode服务器A/B/C。
5、client请求3台dn中的一台A上传数据(本质上是一个RPC调用,建立pipeline),A收到请求会继续调用B,然后B调用C,将真个pipeline建立完成,逐级返回客户端。
6、client开始往A上传第一个block(先从磁盘读取数据放到一个本地内存缓存),以packet为单位,A收到一个packet就会传给B,B传给C;A每传一个packet会放入一个应答队列等待应答。
7、当一个block传输完成之后,client再次请求namenode上传第二个block的服务器。

hadoop的RPC框架

Hadoop中各节点之间存在大量的远程过程调用,hadoop为此封装了一个RPC基础框架
使用方法:

  • (1)定义一个接口,实例如下:
//RCP通信的两端共同遵守的协议(本质上就是业务实现类的接口)
public interface ClientNameNodeProtocal {//RPC通信双方一致的版本号public static final long versionID = 1L;//业务方法签名public String getMetaData(String path);}
  • (2)编写接口的业务实现类
/*** 业务的具体实现类,应该运行在远端服务器上* @author zhangxueliang**/
public class NamNodeNameSystemImpl implements ClientNameNodeProtocal {@Overridepublic String getMetaData(String path) {//many logic code to find the meta data in meta data poolreturn "{/aa/bb/bian4.mp4;300M;[BLK_1,BLK_2,BLK_3];3;
{[BLK_1:DN-A,DN-B,DN-E],[BLK_2:DN-A,DN-B,DN-C],[BLK_3:DN-A,DN-D,DN-E]}}";}
}
  • (3)使用RPC框架API将业务实现发布为RPC服务
/*** RPC服务发布工具* @author zhangxueliang**/
public class PublishServiceTool {public static void main(String[] args) throws HadoopIllegalArgumentException, IOException {//创建一个RPC服务builderBuilder builder = new RPC.Builder(new Configuration());//将要发布的服务的信息设置到builder中builder.setBindAddress("spark01").setPort(10000).setProtocol(ClientNameNodeProtocal.class).setInstance(new NamNodeNameSystemImpl());//用builder构建出一个socket服务Server server = builder.build();//将服务启动,就可以等待客户端请求server.start();}
}
  • (4)客户端通过RPC框架API获取跟RPC服务端通信的socket代理,调用远端服务
public class Client {public static void main(String[] args) throws Exception {       //首先用RPC框架获得要调用的远端服务的引用(动态代理对象)ClientNameNodeProtocal namenodeImpl = RPC.getProxy(ClientNameNodeProtocal.class, 1L, new InetSocketAddress("spark01",10000), new Configuration());//因为这个动态代理对象实现了业务类的接口,所以可以直接通过这个引用来调用业务类的实现方法(本质上,具体实现在远端,走的是socket通信请求)String metaData = namenodeImpl.getMetaData("/aa/bb/bian4.mp4");   System.out.println(metaData);}
}

远程debug跟踪Hadoop服务端代码

  • (1)需要在$HADOOP_HOME/etc/hadoop/hadoop-env.sh文件的最后添加你想debug的进程
#远程调试namenode
export HADOOP_NAMENODE_OPTS="-agentlib:jdwp=transport=dt_socket,address=8888,server=y,suspend=y"
#远程调试datanode
export HADOOP_DATANODE_OPTS="-agentlib:jdwp=transport=dt_socket,address=9888,server=y,suspend=y"
  • (2)在本地的eclipse中打开NameNode或者DataNode类,点击右键,添加远程debug配置,如图:
  • (3)添加一个远程debug调试配置
  • (4)填写远程服务端的debug地址和端口号

  • (5)接着在namenode类中添加断点,如图:
  • (6)回到集群服务器上启动hdfs.
  • (7)回到eclipse之前配置的远程debug配置上,点击debug开始调试
  • (8)成功进入断点

hadoop大数据--深入讲解hdfs源码相关推荐

  1. 2020大数据学习资料,全套源码无加密网盘下载

    点击上方蓝字"优派编程"选择"加为星标",第一时间关注原创干货 前言--–2020最新大数据完整版,全套源码无加密网盘下载 java大数据: 大数据(big d ...

  2. 基于Java毕业设计大数据文章发布系统源码+系统+mysql+lw文档+部署软件

    基于Java毕业设计大数据文章发布系统源码+系统+mysql+lw文档+部署软件 基于Java毕业设计大数据文章发布系统源码+系统+mysql+lw文档+部署软件 本源码技术栈: 项目架构:B/S架构 ...

  3. 一篇文章看懂TPCx-BB(大数据基准测试工具)源码

    TPCx-BB是大数据基准测试工具,它通过模拟零售商的30个应用场景,执行30个查询来衡量基于Hadoop的大数据系统的包括硬件和软件的性能.其中一些场景还用到了机器学习算法(聚类.线性回归等).为了 ...

  4. 2022年Python+大数据学习路线图,源码笔记,最优学习资源

    任何学习过程都需要一个科学合理的学习路线,才能够有条不紊的完成我们的学习目标.Python+大数据所需学习的内容纷繁复杂,难度较大,所以今天特别为大家整理了一个全面的Python+大数据学习路线图,帮 ...

  5. 大数据之-Hadoop3.x_MapReduce_ReduceTask源码解析---大数据之hadoop3.x工作笔记0127

    然后我们接着去reducetask的源码: 可以看到上面,maptask执行以后,数据被分区,然后溢写到磁盘文件中,然后 就到了执行reducetask的时候,首先走到reducetask的上面这个位 ...

  6. [大数据可视化]-saiku的源码包Bulid常见问题和jar包

    最近在做kylin+mondrian+saiku的二次开发的时候,Bulid saiku的源码出现了很多问题,基本上一大部分问题jar找不到问题,很多jar国内网站都找不到.这时候只有手动下载然后注册 ...

  7. 大数据之-Hadoop3.x_MapReduce_MapTask源码解析---大数据之hadoop3.x工作笔记0126

    然后我们来看一下maptask的源码,这个对理解maptask如何工作很重要 我们在一个例子的基础上去debug,去看,可以看到,我们用 partitioner2这个案例,这个是我们之前,用来区分,把 ...

  8. 大数据_MapperReduce_Hbase_批处理batchMutate源码分析_数据的写入流程源码分析---Hbase工作笔记0032

    技术交流QQ群[JAVA,C++,Python,.NET,BigData,AI]:170933152 我们知道hbase是用java语言编写的,所以我们再来看一下源码: 然后我们再去看一下这个batc ...

  9. 【亲测纯净版】10月最新晴天贷立刻贷小额借贷大数据借贷平台网站源码已对接免签支付

    csdn下载: https://download.csdn.net/download/dujiangdu123/13060276 蓝奏云下载:​ https://youyacao.lanzous.co ...

最新文章

  1. 关于反爬虫,看这一篇就够了 1
  2. 【linux】服务器运维必备之linux常用命令合集
  3. 直接使用汇编编写 .NET Standard 库
  4. 使用R进行相关性分析
  5. 冰冰讲数学鸿蒙团队4年级,冰冰也曾是水肿星人?3分钟急救方案教你甩掉晨间浮肿脸!...
  6. 空调开28度,一晚上会消耗多少电?空调耗电量与什么有关?
  7. java使用重绘实现拖动_【Android】利用自己定义View的重绘实现拖动移动,获取组件的尺寸...
  8. Jmeter压力测试快速使用
  9. 2013元旦成都九寨沟攻略
  10. 7. 吴恩达机器学习课程-作业7-Kmeans and PCA
  11. Spring Boot 定时任务,怎么实现任务动态增删启停?
  12. php如何查看端口有没被占用,如何查看某个端口被谁占用
  13. mac关闭开机启动时的客人用户
  14. 布局之WrapPanel与StackPanel
  15. 文本去重:sim哈希算法
  16. 数据科学包_Eighth_Chapter
  17. Google Guava简介
  18. 一个k8s集群——跨云服务器部署
  19. 【WPF】CAD工程图纸转WPF可直接使用的xaml代码技巧
  20. NestJS 7.x 折腾记: (4) Swagger接入及相关用法

热门文章

  1. 从 Google 的一道面试题谈谈数学基础的重要性
  2. 机器学习技巧:如何(以及为什么需要)创建一个好的验证集
  3. 云信小课堂丨简单四步,快速搭建协同办公系统!
  4. 0409互联网新闻 | 微信:朋友圈广告@好友评论互动能力全量开放;视频会议软件Zoom将于4月18日在纳斯达克交易所挂牌上市...
  5. 扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎扎心了
  6. Spring bean 装配
  7. 构造代码块会想你所想
  8. ストアドプロシージャ(存储过程)
  9. 不一致的国际数据隐私法
  10. PowerShell管理Azure