Что такое Hadoop?

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

Ответ

Apache Hadoop — это open-source фреймворк для распределенной обработки и хранения очень больших наборов данных (Big Data) на кластерах из стандартного оборудования. Его основная сила — в способности масштабироваться от одного сервера до тысяч машин, каждая из которых предоставляет свои вычислительные ресурсы и дисковое пространство.

Hadoop состоит из четырех ключевых модулей:

  1. Hadoop Common (Общие утилиты): Набор библиотек и утилит, необходимых другим модулям.
  2. Hadoop Distributed File System (HDFS): Распределенная файловая система, предназначенная для хранения данных на множестве машин с высокой отказоустойчивостью.
    • NameNode: Управляет метаданными файловой системы (иерархия файлов, блоки данных).
    • DataNode: Хранит фактические блоки данных на локальных дисках.
  3. Hadoop YARN (Yet Another Resource Negotiator): Фреймворк для управления ресурсами кластера и планирования задач. Он отвечает за выделение вычислительных ресурсов (CPU, память) различным приложениям, работающим на кластере (например, MapReduce, Spark).
  4. Hadoop MapReduce: Программная модель для параллельной обработки больших данных. Задача разбивается на этапы Map (фильтрация и сортировка) и Reduce (агрегация результатов).

Пример классической задачи WordCount на MapReduce (Java):

// Mapper
public class WordCountMapper extends Mapper<LongWritable, Text, Text, IntWritable> {
    private final static IntWritable one = new IntWritable(1);
    private Text word = new Text();

    public void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {
        String line = value.toString();
        StringTokenizer tokenizer = new StringTokenizer(line);
        while (tokenizer.hasMoreTokens()) {
            word.set(tokenizer.nextToken());
            context.write(word, one); // Вывод: (слово, 1)
        }
    }
}

// Reducer
public class WordCountReducer extends Reducer<Text, IntWritable, Text, IntWritable> {
    public void reduce(Text key, Iterable<IntWritable> values, Context context) throws IOException, InterruptedException {
        int sum = 0;
        for (IntWritable val : values) {
            sum += val.get(); // Суммируем все единицы для каждого слова
        }
        context.write(key, new IntWritable(sum)); // Вывод: (слово, общее_количество)
    }
}

Экосистема Hadoop: Со временем вокруг ядра Hadoop выросла огромная экосистема инструментов для различных задач:

  • Хранение: HBase (NoSQL база данных), Hive (SQL-интерфейс).
  • Обработка: Apache Spark (быстрая in-memory обработка), Apache Flink (потоковая обработка).
  • Ингestion: Apache Kafka, Apache Sqoop.
  • Оркестрация: Apache Oozie, Apache Airflow.

Современный контекст: Хотя "чистый" MapReduce сейчас используется реже из-за более быстрых фреймворков вроде Spark, HDFS и YARN остаются фундаментальными компонентами многих Big Data-платформ, а принципы, заложенные в Hadoop, лежат в основе современных облачных сервисов данных.