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
}