Ответ
Apache Hadoop — это open-source фреймворк для распределенной обработки и хранения очень больших наборов данных (Big Data) на кластерах из стандартного оборудования. Его основная сила — в способности масштабироваться от одного сервера до тысяч машин, каждая из которых предоставляет свои вычислительные ресурсы и дисковое пространство.
Hadoop состоит из четырех ключевых модулей:
- Hadoop Common (Общие утилиты): Набор библиотек и утилит, необходимых другим модулям.
- Hadoop Distributed File System (HDFS): Распределенная файловая система, предназначенная для хранения данных на множестве машин с высокой отказоустойчивостью.
- NameNode: Управляет метаданными файловой системы (иерархия файлов, блоки данных).
- DataNode: Хранит фактические блоки данных на локальных дисках.
- Hadoop YARN (Yet Another Resource Negotiator): Фреймворк для управления ресурсами кластера и планирования задач. Он отвечает за выделение вычислительных ресурсов (CPU, память) различным приложениям, работающим на кластере (например, MapReduce, Spark).
- 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, лежат в основе современных облачных сервисов данных.