Ответ 1
Лучший способ узнать - попробовать, посмотрите мои результаты ниже.
Но прежде чем пытаться, я предполагаю, что даже если вы можете выделить только 80 полных блоков в своей конфигурации, вы можете выделить более 80 непустых файлов. Это связано с тем, что я считаю, что HDFS не использует полный блок каждый раз, когда вы выделяете непустой файл. С другой стороны, блоки HDFS не являются блоком распределения памяти, а являются блоком репликации. Я думаю, что блок распределения памяти HDFS является единицей базовой файловой системы (если вы используете ext4 с размером блока 4 КБ и создаете файл размером 1 КБ в кластере с коэффициентом репликации 3, вы потребляете 3 раза 4 КБ = 12 КБ свободного места на жестком диске).
Достаточно угадать и подумать, попробуй. Конфигурация моей лаборатории следующая:
- версия hadoop 1.0.4
- 4 узла данных, каждый из которых имеет чуть меньше 5,0 Гб свободного пространства, размер блока ext4 4K
- размер блока 64 МБ, репликация по умолчанию 1
После запуска HDFS у меня есть следующая сводка NameNode:
- 1 файл и каталоги, 0 блоков = 1 всего
- Используемый DFS: 112 КБ
- Осталось DFS: 19.82 GB
Затем я выполняю следующие команды:
-
hadoop fs -mkdir /test
-
for f in $(seq 1 10); do hadoop fs -copyFromLocal ./1K_file /test/$f; done
С этими результатами:
- 12 файлов и каталогов, 10 блоков = 22 всего
- Используемый DFS: 122.15 KB
- Осталось DFS: 19.82 GB
Таким образом, 10 файлов не потребляли 10 раз 64 МБ (без изменения "оставшегося DFS" ).