hdfs写入数据和读取数据

1.客户端通过shell命令的方式传输文件到HDFS上(申请上传)
2.namenode检查文件夹是否存在,检查文件是否存在,如果文件夹不存在是肯定不能上传的,如果文件存在就要看有没有覆盖写入了
3.返回允许上传通知
4.判断文件的大小,然后切割文件,默认按照128m去切割(hadoop2.x)按照64m去切割(hadoop1.x)
5.通知namenode上传第一个block块
6.namenode通过副本机制得到block块应该放在哪些datanode节点上的地址列表
7.返回这些地址给client端
8.client端和一个datanode建立连接,我们设为A,然后A又和另外一个datanode建立连接,我们设为B,然后B又和另外一个datanode建立连接,我们设为C,这里其实是建立的一个远程RPC调用
9.将块再次分成packet(64kb)发送给A节点,每个节点会将packet重组成block块
10.A节点会发送给B节点,B节点会发送给C节点
11.C节点会返回给B节点一个ack确认码,B节点会返回A节点一个ack确认码,A节点会返回client端一个确认码

思考: 为什么是128m呢?
最小化寻址开销,如果太小,namenode的压力就会比较大,如果太大,datanode在计算的时候压力就会比较大,一般我们都会手动设置这个大小.
思考: 副本机制应该返回哪些datanode节点呢?
假设3个副本,如果文件在datanode的节点上,第一个副本应该在客户端所在的datanode节点上,也就是本地,这样可以避免网络传输,如果文件不是在datanode的节点上,应该是随机发送到一个datanode上的.
第二个副本应该是放在第一个副本的不同机架上,设计思想:容灾
第三个副本应该是放在和第二个相同的机架上,设计思想:避免网络传输造成不要开销

思考:为什么采用RPC调用呢?
简单:RPC 概念的语义十分清晰和简单,这样建立分

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值