We detected you are likely not from a Russian-speaking region. Would you like to switch to the international version of the site?

  Назад к списку статей

Создание распределённого вычислительного кластера на базе Termux: запуск Spark и Hadoop в контейнеризованной среде Android

Профессиональный гайд по созданию распределённого вычислительного кластера на Android с Termux: подготовка окружения, контейнеризация и запуск Hadoop и Spark в локальной сети для образовательных и тестовых сценариев.

Современные Android-устройства обладают достаточной вычислительной мощностью, чтобы использовать их как узлы небольшого учебного или экспериментального кластера. В этой статье мы разберём практический подход к созданию распределённого вычислительного кластера на базе Termux, с запуском Hadoop и Spark в контейнеризованной среде и объединением узлов в локальную сеть. Такой подход удобен для лабораторных задач, PoC-проектов и отладки архитектуры распределённых систем.

Материал ориентирован на безопасные и легальные сценарии: работа в рамках вашей локальной сети (без целей обхода ограничений), с применением стандартных инструментов и конфигураций.

Концепция архитектуры кластера

Распределённый кластер на базе Android обычно строится как набор «узлов» (например, 2–5 устройств), которые:

  • имеют общий доступ через локальную сеть (Wi‑Fi);
  • в каждом узле запускают вычислительные компоненты;
  • обмениваются данными по сети в соответствии с ролями Hadoop/Spark.

На практике для демонстраций и тестов можно ограничиться компактной топологией:

  • Hadoop: NameNode + DataNode (или mini-кластер), YARN (ResourceManager/NodeManager);
  • Spark: Spark master (в роли драйвера/координатора) + Spark workers.

Container-подход позволяет изолировать зависимости (Java, системные библиотеки, переменные окружения) и повторяемо разворачивать окружение на разных Android-устройствах.

Что потребуется

Перед началом подготовьте:

  • Устройства Android (минимум 2): одинаковая версия/ветка ОС упрощает совместимость;
  • Termux на каждом устройстве;
  • доступ в локальную сеть (одна Wi‑Fi сеть/роутер);
  • поддержку контейнеров: для Android чаще всего используют контейнеризацию в пользовательском пространстве (например, via proot/дистрибуции) или Docker-совместимые решения, где они доступны. В рамках статьи мы опираемся на подход «контейнероподобной среды», который реально применим через Termux.

Важно: производительность Android-узлов ниже серверной. Планируйте объём данных и размеры задач так, чтобы кластер работал стабильно (не «упирайтесь» в память и CPU).

Шаг 1. Подготовка Termux на каждом узле

Обновите пакеты и установите базовые утилиты. На каждом устройстве выполните:

pkg update -y
pkg upgrade -y
pkg install -y wget curl tar gzip unzip openjdk-17 procps coreutils

Далее проверьте Java:

java -version

Для Hadoop и Spark обычно требуется Java (часто рекомендуют 8/11, но для экспериментальных стендов допустим подход с подстройкой версий). Если ваша сборка Hadoop/Spark требует конкретной версии Java, меняйте JDK под требование.

Шаг 2. Организация локальной сети и адресации узлов

Чтобы узлы Hadoop/Spark видели друг друга, обеспечьте локальную сеть. Один Wi‑Fi роутер на всех устройствах — самый простой вариант. Убедитесь, что на узлах известны IP-адреса.

В Termux узнайте IP:

ip addr show

Примечание: используйте разрешение/открытие портов только в рамках вашей локальной сети, а не публично в интернет. VPN допускается только для создания локальной сети между устройствами в пределах вашего сценария (без обхода блокировок).

Шаг 3. Выбор контейнеризованной среды

Вместо полного Docker на Android (что зависит от модели/прав/реализации) целесообразно использовать контейнероподобную среду через «chroot-like» подходы и минимальную файловую систему дистрибутива. Суть: вы создаёте «контейнер» в виде отдельного корня файловой системы и запускаете внутри него нужные процессы.

Практическая цель контейнеризации для нашей задачи:

  • внутри контейнера проще управлять версиями Java/библиотек;
  • проще воспроизвести конфигурацию на всех узлах;
  • проще изолировать порты и окружение.

Ниже приведён ориентир по созданию отдельного окружения (упрощённый лабораторный подход). При необходимости адаптируйте под вашу выбранную технологию контейнеров.

Шаг 4. Подготовка файловой системы для «контейнера»

Создайте папку окружения и распакуйте базовую среду. В качестве примера рассмотрим загрузку минимального rootfs (источник выбирайте самостоятельно и легально):

mkdir -p $HOME/cluster-container/rootfs
cd $HOME/cluster-container
# Пример: распакуйте подготовленный rootfs-архив, если у вас есть подходящий образ
# tar -xzf rootfs-android-min.tar.gz -C rootfs

Если вы используете готовую утилиту/скрипт для контейнера в Termux, замените этот шаг на ваш рабочий процесс. Главное — зафиксировать корневую структуру и используемую архитектуру.

Шаг 5. Установка Hadoop в контейнере

Скачайте исходный выпуск Hadoop и распакуйте в контейнер. В примере предполагаем, что вы выполняете команды внутри окружения или «как будто» внутри.

export HADOOP_VERSION="3.3.6"
export HADOOP_HOME="$HOME/hadoop"
mkdir -p $HADOOP_HOME
cd $HOME
wget https://downloads.apache.org/hadoop/common/hadoop-${HADOOP_VERSION}/hadoop-${HADOOP_VERSION}.tar.gz

tar -xzf hadoop-${HADOOP_VERSION}.tar.gz
mv hadoop-${HADOOP_VERSION} $HADOOP_HOME

export PATH="$HADOOP_HOME/bin:$PATH"

Проверьте:

$HADOOP_HOME/bin/hadoop version

Шаг 6. Конфигурация Hadoop для распределённого режима

Создайте конфигурационные файлы (внутри контейнера) и настройте адреса узлов. На учебных кластерах удобно хранить конфигурацию в одном месте и развернуть на всех узлах одинаково.

Типовые файлы:

  • core-site.xml — настройки файловой системы и адреса;
  • hdfs-site.xml — репликации и HDFS параметры;
  • yarn-site.xml — YARN настройки;
  • mapred-site.xml — если используете MR;
  • workers и masters (для старых сценариев) — для координации.

Примерно (псевдонастройки для мини-кластера):

mkdir -p $HADOOP_HOME/etc/hadoop
# core-site.xml
cat > $HADOOP_HOME/etc/hadoop/core-site.xml <<'EOF'
<configuration>
  <property>
    <name>fs.defaultFS</name>
    <value>hdfs://<IP_NAME_NODE>:9000</value>
  </property>
</configuration>
EOF

# hdfs-site.xml
cat > $HADOOP_HOME/etc/hadoop/hdfs-site.xml <<'EOF'
<configuration>
  <property>
    <name>dfs.replication</name>
    <value>1</value>
  </property>
</configuration>
EOF

# yarn-site.xml
cat > $HADOOP_HOME/etc/hadoop/yarn-site.xml <<'EOF'
<configuration>
  <property>
    <name>yarn.resourcemanager.hostname</name>
    <value><IP_RESOURCE_MANAGER></value>
  </property>
</configuration>
EOF

Обязательно замените <IP_NAME_NODE> и <IP_RESOURCE_MANAGER> на реальные IP-адреса узлов в вашей локальной сети.

Шаг 7. Запуск Hadoop: форматирование HDFS и поднятие процессов

На узле с NameNode выполните форматирование:

$HADOOP_HOME/bin/hdfs namenode -format

Далее запустите HDFS и YARN (в мини-стенде это можно сделать по месту на каждом узле либо через один управляющий скрипт, в зависимости от вашей схемы).

$HADOOP_HOME/sbin/start-dfs.sh
$HADOOP_HOME/sbin/start-yarn.sh

Проверьте доступность web-интерфейсов (в локальной сети):

  • HDFS NameNode: обычно http://<IP>:9870 (или аналог);
  • YARN ResourceManager: обычно http://<IP>:8088.

Шаг 8. Подключение Spark к кластеру Hadoop/YARN

Чтобы Spark работал как распределённая система поверх Hadoop/YARN, установите Spark и настройте его на использование YARN.

Скачайте и распакуйте Spark (в контейнере/окружении):

export SPARK_VERSION="3.5.1"
export SPARK_HOME="$HOME/spark"
cd $HOME
wget https://downloads.apache.org/spark/spark-${SPARK_VERSION}/spark-${SPARK_VERSION}-bin-hadoop3.tgz

tar -xzf spark-${SPARK_VERSION}-bin-hadoop3.tgz
mv spark-${SPARK_VERSION}-bin-hadoop3 $SPARK_HOME

Установите переменные окружения:

export PATH="$SPARK_HOME/bin:$PATH"

Настройте конфигурацию Spark. На практике нужно указать master и способ запуска — для YARN обычно используют соответствующие параметры запуска (а в конфиге можно закрепить базовые параметры).

Проверьте версию:

$SPARK_HOME/bin/spark-submit --version

Шаг 9. Тестовый запуск Spark в распределённом режиме

Для проверки подойдёт примерный тест с минимальной нагрузкой. Например, запустите приложение, которое создаёт RDD/DataFrame и выполняет небольшой job.

Пример команды с использованием YARN:

$SPARK_HOME/bin/spark-submit \
  --master yarn \
  --deploy-mode cluster \
  --class org.apache.spark.examples.SparkPi \
  $SPARK_HOME/examples/jars/spark-examples_2.12-3.5.1.jar \
  10

Параметры --deploy-mode и версию jar подберите под вашу сборку Spark. В локальной сети следите за логами и доступностью ResourceManager.

Шаг 10. Практические рекомендации для Android-кластера

  • Ограничьте репликации: на двух устройствах ставьте dfs.replication=1.
  • Сразу учитывайте лимиты памяти: Android может убивать фоновые процессы. Настройте энерго-ограничения, держите устройства в режиме «заряд/без сна».
  • Смотрите логи: храните логи на узле и периодически проверяйте logs каталог Hadoop/YARN и Spark.
  • Фиксируйте IP: используйте DHCP reservation на роутере или скрипт проверки адресации.
  • Не перегружайте сеть: большие shuffle-операции на слабых каналах дадут нестабильность.

Безопасность и легальность

В рамках данного проекта рекомендуется:

  • использовать кластер только в вашей локальной сети;
  • не выставлять сервисы наружу;
  • по возможности ограничивать доступ к web-интерфейсам и портам внутри сети;
  • не применять инструменты для обхода ограничений и блокировок. В VPN следует использовать только сценарий создания локальной сети между устройствами.

Технически вы управляете узлами и сервисами в пределах собственных устройств; это соответствует типовым лабораторным и обучающим сценариям.

Заключение

Создание распределённого кластера на базе Termux на Android — реалистичная задача для лабораторных исследований и PoC: вы поднимаете Hadoop и Spark в контейнеризованной/изолированной среде, объединяете узлы через локальную сеть и выполняете тестовые распределённые вычисления. Ключ к успеху — корректная адресация, продуманная конфигурация Hadoop/YARN, аккуратные ресурсы под Android и регулярная проверка логов.

Нужна помощь в настройке под ваши устройства, подборе версий Hadoop/Spark под конкретные требования или сопровождение лабораторного стенда? Обратитесь в РыбинскЛАБ — поможем спроектировать и реализовать инфраструктуру под вашу задачу.

* Текст статьи подготовлен и структурирован с использованием технологий искусственного интеллекта. Проверен и доработан перед публикацией.

Нужна помощь с настройкой Termux, Linux и серверов?

Я оказываю ИТ-услуги: настройка серверов, автоматизация, безопасность, помощь с Linux и инфраструктурой. Материалы сайта — только в ознакомительных и образовательных целях.

Связаться со мной
Поддержать проект