HDFS写数据详解

110 篇文章 0 订阅
95 篇文章 0 订阅

HDFS写数据详解

hadoop模块每一部分都是分布式的,所以他们之间的通信都是建立在RPC基础上的,这点要明白

HDFS写数据(上传数据时,DataNode的选择策略:1.第一个副本先考虑跟client最近的(同机架)2.第二个副本在考虑跨机架选择一个DataNode,3.第三个副本就在第一个副本同机架例外挑选一个DataNode存放)

怎样知道呢个机器在呢个机架上呢?可以配置机架感知

  1. client向namenode请求上传文件(想要上传到呢个路径下)
  2. namenode慎重考虑后(主要是查看是否具有请求中的合理路径存在),哎呀妈路径合理,那么就向client响应你可以上传了
  3. hadoop2x一个block默认为128M,文件超过后就需要分割文件。client通过RPC请求上传第一个block(0~128M),请求返回DataNode信息,意思是我现在想要上传一部分,我总该知道我要上传到呢个子节点下吧,这是合理请求;
  4. namonode查看元数据给出client合理的回应,所谓合理起始namenode内部是有相应的处理机制的,主要是考虑DataNode空间问题,和路由间的距离问题
  5. client收到回应之后,请求与呢个DataNode下的呢个block建立连接,同时建立起传输管道channel,为什么要建立管道呢,以为我们这是分布式系统,考虑的主要问题是当机器宕机时,我们还想要完成任务,所以我们就将数据进行多个副本的存储,即使当前机器宕机,我们也能给用户响应完整的数据。为什么我们不这样做呢,当第一个block上传完毕后,其他的副本block我们复制粘贴过去呢,因为我们的大数据文件一般都最少是以G为单位的,正常都是以T为单位的,这样操作的话,很容易存在IO阻塞现象,所以避免出现IO阻塞,我们采用通过管道,里面主要的是PIPE LINE,分配的数据节点放在pipeline里。datastream将数据块写入pipeline中的第一个数据节点,第一个数据节点将数据第二个数据节点,第二个数据节点将数据发送给第三个数据节点。根据路由距离远近建立理想的通道传输。
  6. client开始传输数据,理论上是管道内的block都可以通过管道进行读取数据,但是我们建立管道是根据路由距离建立的,所以势必存在读取时间长短的问题,block其中一个只要有一个上传成功,默认就是当前请求的block(0~128M)传输完毕。需要注意的是在这里传输数据是以packet为单位进行传输的,以packet里的chunk为单位进行校验的。
  7. 第一个block上传完毕之后,client开始请求上传第二个block...(每上传一个block都会向namenode请求)。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值