Какая стандартная репликация в HDFS и на что она влияет?

«Какая стандартная репликация в HDFS и на что она влияет?» — вопрос из категории Hadoop и HDFS, который задают на 33% собеседований Data Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Стандартный и рекомендуемый коэффициент репликации в HDFS — 3. Это означает, что каждый блок данных (обычно размером 128 МБ или 256 МБ) хранится в трех идентичных копиях на разных DataNode кластера.

Влияние на ключевые аспекты системы:

  1. Отказоустойчивость: Система может пережить одновременный отказ двух узлов из трех, хранящих копии одного блока, без потери данных. NameNode отслеживает состояние реплик и инициирует создание новой копии, если их количество падает ниже заданного порога.
  2. Доступность данных: Чтение данных может быть перенаправлено на любую из доступных реплик. Если один узел недоступен или перегружен, клиент автоматически читает с другого.
  3. Локализация данных и производительность: HDFS старается размещать реплики с учетом топологии сети:
    • Первая реплика: на том же узле, где запущен клиент (если это DataNode), или на случайном узле в той же стойке.
    • Вторая реплика: на другом узле в той же стойке (rack).
    • Третья реплика: на узле в другой стойке. Такая стратегия балансирует между быстрым чтением в пределах стойки (меньшая сетевая задержка) и устойчивостью к отказу всей стойки.
  4. Накладные расходы: Коэффициент репликации 3 увеличивает требования к дисковому пространству в 3 раза. Это классический компромисс между надежностью и стоимостью хранения.

Пример настройки в hdfs-site.xml:

<configuration>
  <property>
    <name>dfs.replication</name>
    <value>3</value>
    <description>Default block replication factor.</description>
  </property>
</configuration>

Это значение можно переопределить для конкретного файла при его создании через API или командную строку: hdfs dfs -D dfs.replication=2 -put data.txt /user/input/.