Представь, что тебе нужно развернуть распределенную систему для обработки больших данных, но документация кажется запутанной, а примеры не работают. Давай разберем установку Hadoop на Ubuntu шаг за шагом — как настоящий DevOps инженер. Я покажу не только базовую установку, но и тонкости конфигурации, которые обычно умалчивают в туториалах.
Подготовка системы перед установкой Hadoop
Перед тем как начать установку Hadoop на Ubuntu, нужно подготовить окружение. Работаем с Ubuntu 20.04/22.04 LTS — это наиболее стабильные версии для production-сред.
1. Обновление системы и установка Java
Hadoop требует Java 8 или 11. Я рекомендую OpenJDK 11 — она стабильнее и лучше поддерживается.
# Обновляем пакеты
sudo apt update && sudo apt upgrade -y
# Устанавливаем OpenJDK 11
sudo apt install openjdk-11-jdk -y
# Проверяем установку
java -version
# Должно быть что-то вроде: openjdk version "11.0.22" 2024-01-16
2. Настройка SSH для беспарольного доступа
Hadoop использует SSH для управления узлами кластера. Нам нужно настроить доступ без пароля на localhost (для standalone и pseudo-distributed режимов).
# Устанавливаем SSH сервер и клиент
sudo apt install openssh-server openssh-client -y
# Генерируем SSH ключи (если еще нет)
ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
# Копируем публичный ключ в authorized_keys
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
# Меняем права доступа для безопасности
chmod 0600 ~/.ssh/authorized_keys
# Проверяем подключение к localhost без пароля
ssh localhost
# Если запрашивает пароль — что-то пошло не так
Установка и настройка Hadoop на Ubuntu
Теперь перейдем к основной части — установке Hadoop. Мы будем использовать Apache Hadoop 3.3.6 (последняя стабильная версия на момент написания).
3. Загрузка и распаковка Hadoop
# Создаем директорию для Hadoop
sudo mkdir -p /opt/hadoop
sudo chown $USER:$USER /opt/hadoop
# Скачиваем Hadoop (или загрузи заранее если медленный интернет)
cd /opt/hadoop
wget https://archive.apache.org/dist/hadoop/common/hadoop-3.3.6/hadoop-3.3.6.tar.gz
# Распаковываем
tar -xzf hadoop-3.3.6.tar.gz
# Создаем симлинк для удобства
ln -s hadoop-3.3.6 current
# Добавляем в PATH
echo 'export HADOOP_HOME=/opt/hadoop/current' >> ~/.bashrc
echo 'export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin' >> ~/.bashrc
source ~/.bashrc
4. Конфигурация Hadoop: основные файлы
Это самая важная часть. Неправильная конфигурация — основная причина проблем при установке Hadoop на Ubuntu.
4.1. hadoop-env.sh — настройка окружения
cd $HADOOP_HOME/etc/hadoop
# Редактируем файл
nano hadoop-env.sh
# Находим и раскомментируем/добавляем:
export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64
export HADOOP_HOME=/opt/hadoop/current
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
export HADOOP_LOG_DIR=$HADOOP_HOME/logs
export HADOOP_PID_DIR=$HADOOP_HOME/pids
4.2. core-site.xml — основные настройки
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://localhost:9000</value>
<description>URI файловой системы по умолчанию</description>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/hadoop/tmp</value>
<description>Временная директория для Hadoop</description>
</property>
</configuration>
4.3. hdfs-site.xml — конфигурация HDFS
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
<description>Фактор репликации (для standalone режима = 1)</description>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:///opt/hadoop/hdfs/namenode</value>
<description>Директория метаданных NameNode</description>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:///opt/hadoop/hdfs/datanode</value>
<description>Директория данных DataNode</description>
</property>
</configuration>
4.4. mapred-site.xml и yarn-site.xml — для YARN
<!-- mapred-site.xml -->
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
<!-- yarn-site.xml -->
<configuration>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
<value>org.apache.hadoop.mapred.ShuffleHandler</value>
</property>
<property>
<name>yarn.resourcemanager.hostname</name>
<value>localhost</value>
</property>
</configuration>
5. Создание необходимых директорий
# Создаем все необходимые директории
mkdir -p /opt/hadoop/tmp
mkdir -p /opt/hadoop/hdfs/namenode
mkdir -p /opt/hadoop/hdfs/datanode
mkdir -p /opt/hadoop/logs
mkdir -p /opt/hadoop/pids
# Меняем владельца (на всякий случай)
sudo chown -R $USER:$USER /opt/hadoop
# Форматируем HDFS (ВАЖНО: только при первой установке!)
hdfs namenode -format
Запуск и проверка Hadoop кластера
6. Запуск демонов Hadoop
Есть два способа запуска: через отдельные скрипты или через start-all.sh (устаревший, но простой для тестирования).
# Способ 1: Запуск всех компонентов (для тестирования)
start-all.sh
# Способ 2: Запуск по отдельности (рекомендуется для production)
# Запускаем HDFS
start-dfs.sh
# Запускаем YARN
start-yarn.sh
# Проверяем запущенные процессы
jps
# Должны увидеть:
# - NameNode
# - DataNode
# - ResourceManager
# - NodeManager
# - SecondaryNameNode (опционально)
7. Проверка работоспособности
# Проверяем HDFS через браузер
# Открой: http://localhost:9870
# Проверяем YARN ResourceManager
# Открой: http://localhost:8088
# Проверяем через командную строку
hdfs dfsadmin -report
# Должен показать информацию о DataNode
# Создаем тестовую директорию в HDFS
hdfs dfs -mkdir /test
hdfs dfs -ls /
# Должна появиться директория /test
# Копируем локальный файл в HDFS
echo "Hello Hadoop on Ubuntu" > test.txt
hdfs dfs -put test.txt /test/
hdfs dfs -cat /test/test.txt
# Должно показать "Hello Hadoop on Ubuntu"
8. Запуск тестового MapReduce задания
Давай убедимся, что не только HDFS, но и вычислительный слой работает корректно.
# Создаем входные данные
hdfs dfs -mkdir /input
echo "Hadoop Ubuntu test" > file1.txt
echo "Ubuntu Hadoop installation" > file2.txt
hdfs dfs -put file1.txt file2.txt /input/
# Запускаем пример WordCount
hadoop jar $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.6.jar \
wordcount /input /output
# Смотрим результат
hdfs dfs -cat /output/part-r-00000
# Должны получить подсчет слов:
# Hadoop 2
# Ubuntu 2
# test 1
# installation 1
Типичные проблемы и их решение
Таблица распространенных ошибок при установке Hadoop
| Проблема | Причина | Решение |
|---|---|---|
| SSH запрашивает пароль | Неправильные права на .ssh директории | chmod 700 ~/.ssh && chmod 600 ~/.ssh/authorized_keys |
| NameNode не запускается | Порт 9000 занят или неправильные пути | Проверь netstat -tulpn | grep :9000 и пути в core-site.xml |
| DataNode не подключается к NameNode | Разные clusterID в VERSION файлах | Удали /opt/hadoop/hdfs и переформатируй HDFS |
| YARN не запускает задачи | Нет доступа к временным директориям | Проверь права на /tmp/hadoop-$USER и в yarn-site.xml |
Настройка multi-node кластера (опционально)
Если тебе нужен полноценный кластер, вот основные отличия от standalone установки:
- На всех узлах должны быть одинаковые версии Hadoop и Java
- Настрой SSH без пароля между всеми узлами (master → slaves и slaves → master)
- В файле workers укажи hostnames всех DataNode/NodeManager
- В core-site.xml укажи hostname мастера вместо localhost
- dfs.replication установи в 3 (для отказоустойчивости)
# Пример конфигурации для multi-node
# Файл: $HADOOP_HOME/etc/hadoop/workers
datanode1
datanode2
datanode3
# В core-site.xml на всех узлах
<property>
<name>fs.defaultFS</name>
<value>hdfs://master-node:9000</value>
</property>
Автозапуск Hadoop как systemd сервис
Для production-среды лучше настроить автозапуск через systemd.
# Создаем сервисный файл для HDFS
sudo nano /etc/systemd/system/hdfs.service
# Добавляем конфигурацию:
[Unit]
Description=Hadoop HDFS
After=network.target
[Service]
Type=forking
User=hadoop
Group=hadoop
ExecStart=/opt/hadoop/current/sbin/start-dfs.sh
ExecStop=/opt/hadoop/current/sbin/stop-dfs.sh
Restart=on-failure
[Install]
WantedBy=multi-user.target
# Аналогично создаем yarn.service
# Активируем и запускаем
sudo systemctl daemon-reload
sudo systemctl enable hdfs yarn
sudo systemctl start hdfs
Часто задаваемые вопросы (FAQ)
Какая версия Ubuntu лучше для Hadoop?
Ubuntu 20.04 LTS или 22.04 LTS. LTS-версии имеют длительную поддержку и стабильные пакеты. Избегай не-LTS релизов для production.
Можно ли установить Hadoop через apt?
Теоретически да (пакет hadoop), но версии в репозиториях часто устаревшие. Ручная установка дает полный контроль над версией и конфигурацией.
Сколько RAM нужно для Hadoop на Ubuntu?
Минимум 4GB для standalone режима. Для pseudo-distributed — 8GB. Production кластеры начинаются от 16GB на узел.
Как обновить Hadoop без потери данных?
1. Останови кластер. 2. Сделай бэкап HDFS метаданных. 3. Установи новую версию. 4. Перенеси конфиги. 5. Запусти с опцией -upgrade.
Hadoop vs Spark — что установить?
Hadoop — это основа (HDFS + YARN). Spark работает поверх Hadoop. Сначала установи Hadoop, потом Spark для ускоренной обработки.
Теперь у тебя работает полноценный Hadoop кластер на Ubuntu. Помни: основная магия происходит в конфигурационных файлах. Не бойся экспериментировать с настройками под свою нагрузку, но всегда делай бэкап конфигов перед изменениями.
Следующие шаги после установки: настройка безопасности (Kerberos), оптимизация производительности под твои задачи, и возможно — переход на Kubernetes (Hadoop 3.3+ поддерживает запуск в контейнерах).