Hadoop - это свободно распространяемый набор утилит, библиотек и фреймворк для разработки и выполнения распределённых программ, работающих на кластерах. Кластер представляет собой множество связанных узлов (нод).
Основные компоненты Hadoop:
Экосистема Hadoop также включает в себя различные СУБД, инструменты для реализации алгоритмов ML и многое другое.

На рисунке ниже приведена общая схема HDFS:

Как и в любой файловой системе HDFS представляет собой набор папок и файлов
Файлы в HDFS хранятся в виде блоков размером по умолчанию 128 мб. Каждый блок может реплицироваться (копироваться и храниться в виде нескольких реплик)
Основными составляющими HDFS являются:
Основная задача HDFS - распределенное хранение файлов большого объема, обеспечивающее высокую скорость чтения/записи.
Основной недостаток HDFS: Namenode является единой точкой отказа системы (в реальных системах применяется Secondary Namenode - реплика Namenode, однако это не спасает ситуацию).
В этой лабораторной работой мы организуем кластер и запустим HDFS на двух виртуальных машинах (одна будет Namenode, другая - Datanode). Очевидно, что нам придется выполнять команды по SSH на каждой машине. И вам может показаться, что мы будем делать это вручную. Но мы не будем. Потому что в этой работе мы знакомимся не только с HDFS, но и с такой полезной вещью как Ansible.
Infrastructure as Code (IaC) — это современный подход к управлению инфраструктурой, который позволяет:
Ansible — это один из популярных инструментов для реализации подхода Infrastructure as Code, который предполагает, что все описание процессов настройки инфраструктуры и запуска приложений осуществляется не с помощью выполнения команд, а посредством применения конфигурационных файлов.
Ansible является системой управления конфигурациями. Написан на Python, поддерживает использование пользовательских модулей. Конфигурации пишутся с использованием декларативных языков разметки (YAML, INI). Ansible устанавливается из PyPI. Одной из основных особенностей является обеспечение идемпотентности.
Идемпотентность заключается в том, что применение кода инфраструктуры несколько раз приводит к одному и тому же результату
Основные составляющие Ansible:
Научиться организовывать кластер с использованием подхода Infrastructure as Code на примере Hadoop HDFS
Перед выполнением этой и следующих лабораторных работ убедитесь, что на каждую виртуальную машину выделено минимум 30 GB физической памяти; инструкция по изменению размера логического тома
Саму машину из ЛР 1 рекомендуется использовать в качестве управляющий машины — поставить на нее Ansible, подключиться через VS Code по SSH, писать и запускать плейбуки
ping с вашего компьютера; эти IP не должны совпадать с IP управляющей машины;в Ubuntu уже установлен Python, однако чтобы сделать venv надо будет установить python_venv —
sudo apt install python3.<версия>-venv
scp; при необходимости и желании — создавайте папки (команда mkdir), копируйте (команда cp) или переносите (mv) файлы внутри управляющей виртуальной машиныПредстоит сделать следующее:
Java Development Kit 11используйте пакет
default-jdkс осторожностью, поскольку он устанавливает не конкретную версию JDK, а версию по умолчанию для вашей системы: 11 для Ubuntu 22.04, 21 для Ubuntu 24.04; рекомендуется устанавливать конкретную версию JDK:
Рекомендуется установить пакет
openjdk-11-jdkи сделать JDK 11 версией по умолчанию с помощьюupdate-alternatives
tar и разархивировать его (можно скачать заранее и передать через scp)HADOOP_HOME (значение: /home/mikhail/hadoop-3.3.6) и JAVA_HOME (значение: /usr/lib/jvm/default-java, если у вас Ubuntu 22.04, или /usr/lib/jvm/java-11-openjdk-amd64, если вы устанавливали пакет openjdk-11-jdk) в файл ~/.bashrc, обновить переменную PATH (значение: $PATH:/home/mikhail/hadoop-3.3.6/bin/), выполнить команду source ~/.bashrc<hadoop>/etc/hadoop/hadoop-env.sh и ближе к концу в нем раскоментировать строку с установкой переменной JAVA_HOME (значение переменной JAVA_HOME: /usr/lib/jvm/default-java)sudo ufw disablesudo hadoop hdfs namenode -formatЕсли команда не работает, то выполнить
hdfs namenode -format -force
./hadoop-daemon.sh start namenode./hadoop-daemon.sh start datanodeansible-playbook hdfs.yaml -e "ansible_become_pass=пароль для remote_user"ansible.cfg0.0.0.0 (если будет 127.0.0.1, то не получится подключиться с хостовой машины); порт можно оставлять по умолчанию — 9000jpsjps после запуска "демона" вы не видите NameNode или DataNode - проверьте логи; там могут быть ошибки, которые рекомендуется гуглить; логи в папке <hadoop>/logs, ищите файл с раширением .logДве виртуальные машины развернуты и настроены. Дашборд HDFS (Namenode UI) открывается в браузере. Представлены артефакты Ansible (инвентарный файл, роли, плейбуки и другие вспомогательные файлы конфигурации).
Как у вас должно выглядеть:

<hadoop>/etc/hadoop/hadoop-env.sh переменная JAVA_HOME