hadoop 中HDFC client 写数据的基本流程

一、要了解HDFS客户端写数据的过程,首先需要明白namenode和datanode

namenode:主要保存数据的元数据,它维护着文件系统树及整棵树内所有的文件和目录,说的直白点就是文件目录的管理以及Block的管理,体现的是一个管理者的身份;

datanode:存储并检索数据块的作用,也就是说数据的存储是有datanode来直接操作的,在这体现的是一个工作者的身份,并且会定期的向namenode汇报自身的情况,

namenode 就可以比较清楚的知道其管理的每个datanode的具体情况,在数据存储的时候就知道选择那些datanode来存储

二、1、客户端需要上传文件,首先会向namenode请求,告诉namenode需要上传的文件的相关信息,例如路径文件名称大小等等,namenode会告诉客户端是否可以上传;如果允许客户端上传,(默认配置的块的大小是128M)

如果文件大于128M,客户端会对文件进行分割处理,这里就做三份处理,这时候客户端会请求namenode,提供相关块的信息以及需要存储的备份数(这里默认3份),namenode会返回相关datanode的信息给客户端(如何选择datanode?),

namenode会告诉客户端 服务器1,服务器2,服务器3即将上传的三个datanode服务器地址,这里客户端就会根据返回的地址进行文件的上传;

2、客户端上传时,namenode返回的是三台服务器的地址,那么客户端在上传时其实每次只针对一个datanode,也就是说客户端不需要分别向三个datanode上传文件,比如客户端选择服务器1上传,服务器2和3其实在客户端上传的时候,

服务器1已经和服务器2建立了上传通道,服务器2和服务器3也建立上传的通道,也就是说其实三台服务器的上传基本是同步的,如果每次都要分别取处理,这样效率也低,如果一个服务器上传出现问题,这样容错的能力也相应的降低;

只要保证服务器1成功,上传就是成功,HDFS内部应该是有机制去处理2-3过程中上传失败的容错机制;同理文件的第二个块也是和第一个块一样的上传;

三、以上只是大致描述一下HDFS客户端上传的一个流程,其中还有很多细节需要在去深究,例如,上传时,namenode是如何去选择datanode的,客户端是如何与namenode之间进行通信的等等,最后还是通过自己画的一张图来直观的表示上传的大致流程

原文地址:https://www.cnblogs.com/muyarn/p/9463810.html

时间: 2024-10-31 12:23:18

hadoop 中HDFC client 写数据的基本流程的相关文章

Hadoop(三)HDFS写数据的基本流程

HDFS写数据的流程 HDFS shell上传文件a.txt,300M 对文件分块,默认每块128M. shell向NameNode发送上传文件请求 NameNode检测文件系统目录树,看能否上传 NameNode向shell发送允许上传通知 shell向NameNode发送上传block1,备份为3的通知. NameNode检测DataNode信息池,查找的3台DataNode的IP,查找的IP有以下机制: 网络拓扑距离最近(经历交换机最少) 如果shell本身就是一个DataNode,本地会

关于MATLAB中xlswrite函数写数据出现服务器异常情况的解决办法

在网上找了半天解决办法,也没有找到,在此共享我自己的一个问题,不具有普遍性,仅作参考! 问题描述:MATLAB调用xlsread函数出现问题,第一次运行的时候,出现服务器异常,再次运行能够正常读取数据: 在调用xlswrite函数时,一直出现服务器异常状况,不能将数据写入excel表格中. 问题关键:不是MATLAB的原因,问题出在excel软件上! 问题解决:xlswrite函数在调用时会占用excel的com端口,所以要保证在调用时这个端口是开放的,也就是没有被其他程序占用.打开excel(

Netty源码分析第7章(编码器和写数据)---->第2节: MessageToByteEncoder

Netty源码分析第七章: Netty源码分析 第二节: MessageToByteEncoder 同解码器一样, 编码器中也有一个抽象类叫MessageToByteEncoder, 其中定义了编码器的骨架方法, 具体编码逻辑交给子类实现 解码器同样也是个handler, 将写出的数据进行截取处理, 我们在学习pipeline中我们知道, 写数据的时候会传递write事件, 传递过程中会调用handler的write方法, 所以编码器码器可以重写write方法, 将数据编码成二进制字节流然后再继

Hadoop源码分析——数据节点写数据1

即使不考虑数据节点出错后的故障处理,文件写入也是HDFS中最复杂的流程.本章以创建一个新文件并向文件中写入数据,然后关闭文件为例,分析客户端写文件时系统各节点的配合,如下图所示. 客户端调用DistributedFileSystem的create()方法创建文件,上图的步骤1,这时,DistributedFileSystem创建DFSOutputStream,并由远程过程调用,让名字节点执行同名方法,在文件系统的命名空间中创建一个新文件.名字节点创建新文件时,需要执行各种各样的检查,如名字节点处

Hadoop源码分析——数据节点写数据2

数据接收 客户端写往数据节点的数据由org.apache.hadoop.hdfs.server.datanode.BlockReceiver.java中的receiveBlock方法接收 void receiveBlock( DataOutputStream mirrOut, // output to next datanode DataInputStream mirrIn, // input from next datanode DataOutputStream replyOut, // ou

Hadoop 中利用 mapreduce 读写 mysql 数据

Hadoop 中利用 mapreduce 读写 mysql 数据 有时候我们在项目中会遇到输入结果集很大,但是输出结果很小,比如一些 pv.uv 数据,然后为了实时查询的需求,或者一些 OLAP 的需求,我们需要 mapreduce 与 mysql 进行数据的交互,而这些特性正是 hbase 或者 hive 目前亟待改进的地方. 好了言归正传,简单的说说背景.原理以及需要注意的地方: 1.为了方便 MapReduce 直接访问关系型数据库(Mysql,Oracle),Hadoop提供了DBInp

Linux启动kettle及linux和windows中kettle往hdfs中写数据(3)

在xmanager中的xshell运行进入图形化界面 1 sh spoon.sh 新建一个job 1.往hdfs中写数据 1)linux中kettle往hdfs中写数据 双击hadoop copy files 运行此job 查看数据: 1)windows中kettle往hdfs中写数据 Windows中往power服务器中hdfs写数据 日志: 2016/07/28 16:21:14 - Version checker - OK 2016/07/28 16:21:57 - 数据整合工具-作业设计

浅析 Hadoop 中的数据倾斜

转自:http://my.oschina.net/leejun2005/blog/100922 最近几次被问到关于数据倾斜的问题,这里找了些资料也结合一些自己的理解. 在并行计算中我们总希望分配的每一个task 都能以差不多的粒度来切分并且完成时间相差不大,但是集群中可能硬件不同,应用的类型不同和切分的数据大小不一致总会导致有部分任务极大的拖慢了整个任务的完成时间,硬件不同就不说了,应用的类型不同其中就比如page rank 或者data mining 里面一些计算,它的每条记录消耗的成本不太一

【原创】问题定位分享(16)spark写数据到hive外部表报错ClassCastException: org.apache.hadoop.hive.hbase.HiveHBaseTableOutputFormat cannot be cast to org.apache.hadoop.hive.ql.io.HiveOutputFormat

spark 2.1.1 spark在写数据到hive外部表(底层数据在hbase中)时会报错 Caused by: java.lang.ClassCastException: org.apache.hadoop.hive.hbase.HiveHBaseTableOutputFormat cannot be cast to org.apache.hadoop.hive.ql.io.HiveOutputFormat at org.apache.spark.sql.hive.SparkHiveWrit