Chinaunix首页 | 论坛 | 博客
  • 博客访问: 3056110
  • 博文数量: 535
  • 博客积分: 15788
  • 博客等级: 上将
  • 技术积分: 6507
  • 用 户 组: 普通用户
  • 注册时间: 2007-03-07 09:11
文章分类

全部博文(535)

文章存档

2016年(1)

2015年(1)

2014年(10)

2013年(26)

2012年(43)

2011年(86)

2010年(76)

2009年(136)

2008年(97)

2007年(59)

分类: 云计算

2011-10-27 13:06:32

首先 dfs.replication这个参数是个client参数,即node level参数。需要在每台datanode上设置。
其实默认为3个副本已经够用了,设置太多也没什么用。

一个文件,上传到hdfs上时指定的是几个副本就是几个。以后你修改了副本数,对已经上传了的文件也不会起作用。可以再上传文件的同时指定创建的副本数
  1. hadoop dfs -D dfs.replication=1 -put 70M logs/2

可以通过命令来更改已经上传的文件的副本数:
hadoop fs -setrep -R 3 /

查看当前hdfs的副本数
hadoop fsck -locations
  1. FSCK started by hadoop from /172.18.6.112 for path / at Thu Oct 27 13:24:25 CST 2011
  2. ....................Status: HEALTHY
  3. Total size: 4834251860 B
  4. Total dirs: 21
  5. Total files: 20
  6. Total blocks (validated): 82 (avg. block size 58954290 B)
  7. Minimally replicated blocks: 82 (100.0 %)
  8. Over-replicated blocks: 0 (0.0 %)
  9. Under-replicated blocks: 0 (0.0 %)
  10. Mis-replicated blocks: 0 (0.0 %)
  11. Default replication factor: 3
  12. Average block replication: 3.0
  13. Corrupt blocks: 0
  14. Missing replicas: 0 (0.0 %)
  15. Number of data-nodes: 3
  16. Number of racks: 1
  17. FSCK ended at Thu Oct 27 13:24:25 CST 2011 in 10 milliseconds
  18. The filesystem under path '/' is HEALTHY

某个文件的副本数,可以通过ls中的文件描述符看到
hadoop dfs -ls
-rw-r--r--   3 hadoop supergroup  153748148 2011-10-27 16:11 /user/hadoop/logs/201108/impression_witspixel2011080100.thin.log.gz


如果你只有3个datanode,但是你却指定副本数为4,是不会生效的,因为每个datanode上只能存放一个副本。
hadoop fsck -locations 可以看到相应的提示信息,可以看到副本丢失率为33.33%:
  1. /user/hadoop/logs/test.log: Under replicated blk_-45151128047308146_1147. Target Replicas is 4 but found 3 replica(s).
  2. Status: HEALTHY
  3.  Total size:    4834251860 B
  4.  Total dirs:    21
  5.  Total files:   20
  6.  Total blocks (validated):      82 (avg. block size 58954290 B)
  7.  Minimally replicated blocks:   82 (100.0 %)
  8.  Over-replicated blocks:        0 (0.0 %)
  9.  Under-replicated blocks:       82 (100.0 %)
  10.  Mis-replicated blocks:         0 (0.0 %)
  11.  Default replication factor:    3
  12.  Average block replication:     3.0
  13.  Corrupt blocks:                0
  14.  Missing replicas:              82 (33.333332 %)
  15.  Number of data-nodes:          3
  16.  Number of racks:               1
  17. FSCK ended at Thu Oct 27 13:22:14 CST 2011 in 12 milliseconds
参考:hdfs_design
当一个文件上传时,client并不立刻联系namenode,而是先在本地缓存数据,当 HDFS block size时,联系namenode,namenode将文件名插入到文件系统结构中,并为期分配一个数据块。namenode以datanode主机名和数据块的位置来相应client的请求。客户端从本地临时文件中将数据刷新到指定的datanode。当file关闭时,未刷新的临时文件将传输到datanode,client通知namenode 文件关闭。此时,namenode将文件创建操作提交到永久存储。如果namenode在file closes之前die,则文件丢失。

创建副本
当client写文件到hdfs时,像前面提到的,先写文件到本地临时文件,假设设定hdfs的副本系数为3.当缓存的文件达到hdfs block size时,client从namenode检索一个datanode的列表。该列表包含将host该副本的datanode列表。client刷新数据到列表中的第一个datanode。第一个datanode以4kb为单位接收数据,将数据写到本地并传输到列表中的第二个datanode,第二个datanode也做同样操作。一个datanode可以从上一个数据管道获取数据,并同时将数据发送到下一个数据管道。


关于namenode如何选择副本存放位置:


阅读(4850) | 评论(0) | 转发(2) |
给主人留下些什么吧!~~