Datanode节点会配置多块数据盘,当我们往 HDFS 上写入新的数据块,DataNode 将会使用 volume 选择策略来为数据块选择存储的磁盘目录。选择正确的策略可以避免单块磁盘数据过多.
HDFS在写入时有两种策略:
- 基于轮询策略(默认), 不考虑文件大小
- 基于可用空间的策略
轮询策略核心代码
x
1
// 遍历磁盘列表 2
while (true) { 3
final V volume = volumes.get(curVolume); 4
curVolume = (curVolume + 1) % volumes.size(); 5
long availableVolumeSize = volume.getAvailable(); 6
// 可用空间大于数据块,直接返回volume 7
if (availableVolumeSize > blockSize) { 8
return volume; 9
}