У меня есть образ докера, который называется ubuntu_mesos_spark.Я установил зоопарк на нем.Я изменяю файл «zoo.cfg» следующим образом: это «zoo.cfg» в node1 (150.20.11.157)
tickTime=2000
initLimit=10
syncLimit=5
clientPort=2187
dataDir=/var/lib/zookeeper
server.1=0.0.0.0:2888:3888
server.2=150.20.11.157:2888:3888
server.3=150.20.11.137:2888:3888
Это «zoo.cfg» в node1 (150.20.11.134)
tickTime=2000
initLimit=10
syncLimit=5
clientPort=2187
dataDir=/var/lib/zookeeper
server.1=150.20.11.157:2888:3888
server.2=0.0.0.0:2888:3888
server.3=150.20.11.137:2888:3888
Это «zoo.cfg» в node1 (150.20.11.137)
tickTime=2000
initLimit=10
syncLimit=5
clientPort=2187
dataDir=/var/lib/zookeeper
server.1=150.20.11.157:2888:3888
server.2=150.20.11.134:2888:3888
server.3=0.0.0.0:2888:3888
Также я создал файл «myid» в «/ var / lib / zookeeper» каждого узла,Например, для «150.20.11.157» его идентификатор равен «1» в файле myid.Я установил Mesos и Spark на докер тоже.У меня есть кластер Mesos этих трех узлов тоже.Я определил IP-адрес подчиненных узлов в этом файле: «spark / conf / slaves»
150.20.11.134
150.20.11.137
Я добавил эти строки в «spark / conf / spark-env.sh»:
export MESOS_NATIVE_JAVA_LIBRARY=/usr/local/lib/libmesos.so
export SPARK_EXECUTOR_URI=/home/spark/program_file/spark-2.3.2-bin-
hadoop2.7.tgz
Более того, я добавил эти строки в свой файл «~ / .bashrc»:
export SPARK_HOME="/home/spark"
PYTHONPATH=$SPARK_HOME/python:$SPARK_HOME/python/lib/py4j-0.10.7-
src.zip:$PYTHO$
export PYSPARK_HOME=/usr/bin/python3.6
export PYSPARK_DRIVER_PYTHON=python3.6
export ZOO_LOG_DIR=/var/log/zookeeper
Я хочу запустить мастер-код в «150.20.11.157». Мой docker-compose:
version: '3.7'
services:
zookeeper:
image: ubuntu_mesos_spark
command: /zookeeper-3.4.12/bin/zkServer.sh start
environment:
ZOOKEEPER_SERVER_ID: 1
ZOOKEEPER_CLIENT_PORT: 2187
ZOOKEEPER_TICK_TIME: 2000
ZOOKEEPER_INIT_LIMIT: 10
ZOOKEEPER_SYNC_LIMIT: 5
ZOOKEEPER_SERVERS:
0.0.0.0:2888:3888;150.20.11.134:2888:3888;150.20.11.137:2888:3888
network_mode: host
expose:
- 2187
- 2888
- 3888
ports:
- 2187:2187
- 2888:2888
- 3888:3888
master:
image: ubuntu_mesos_spark
command: bash -c "sleep 20; /home/mesos-1.7.0/build/bin/mesos-
master.sh --ip=150.20.11.157 --work_dir=/var/run/mesos"
restart: always
depends_on:
- zookeeper
environment:
- MESOS_HOSTNAME="150.20.11.157,150.20.11.134,150.20.11.137"
- MESOS_QUORUM=1
- MESOS_LOG_DIR=/var/log/mesos
expose:
- 5050
- 4040
- 7077
- 8080
ports:
- 5050:5050
- 4040:4040
- 7077:7077
- 8080:8080
Кроме того, я запускаю этот составной файл на подчиненных узлах: «150.20.11.134,150.20.11.137»:
version: '3.7'
services:
zookeeper:
image: ubuntu_mesos_spark
command: /zookeeper-3.4.12/bin/zkServer.sh start
environment:
ZOOKEEPER_SERVER_ID: 2
ZOOKEEPER_CLIENT_PORT: 2187
ZOOKEEPER_TICK_TIME: 2000
ZOOKEEPER_INIT_LIMIT: 10
ZOOKEEPER_SYNC_LIMIT: 5
ZOOKEEPER_SERVERS:
0.0.0.0:2888:3888;150.20.11.134:2888:3888;150.20.11.137:2888:3888
network_mode: host
expose:
- 2187
- 2888
- 3888
ports:
- 2187:2187
- 2888:2888
- 3888:3888
slave:
image: ubuntu_mesos_spark
command: bash -c "/home/mesos-1.7.0/build/bin/mesos-slave.sh --
master=150.20.11.157:5050 --work_dir=/var/run/mesos
--systemd_enable_support=false"
restart: always
privileged: true
network_mode: host
depends_on:
- zookeeper
environment:
- MESOS_HOSTNAME="150.20.11.157,150.20.11.134,150.20.11.137"
- MESOS_MASTER=150.20.11.157
- MESOS_EXECUTOR_REGISTRATION_TIMEOUT=5mins #also in Dockerfile
- MESOS_CONTAINERIZERS=docker,mesos
- MESOS_LOG_DIR=/var/log/mesos
- MESOS_LOGGING_LEVEL=INFO
expose:
- 5051
ports:
- 5051:5051
Сначала я запускаю «sudo docker-compose up» на главном узле.Затем я запускаю его на узлах рабов.Но я получаю эту ошибку:
На главном узле ошибка:
Запуск marzieh-compose_zookeeper_1 ... done
Воссоздание marzieh-compose_master_1 ...сделано
Присоединение к marzieh-compose_zookeeper_1, marzieh-compose_master_1
zookeeper_1 |ZooKeeper JMX включен по умолчанию
zookeeper_1 |Используя config: /zookeeper-3.4.12/bin/../conf/zoo.cfg
zookeeper_1 |Запуск zookeeper ... STARTED
marzieh-compose_zookeeper_1 завершен с кодом 0
master_1 |I0123 11: 46: 59.585522 7 logging.cpp: 201] Журнал уровня INFO запущен!
master_1 |I0123 11: 46: 59.586066 7 main.cpp: 242] Сборка: 2019-01-21 05:16:39 от master_1 |I0123 11: 46: 59.586097 7 main.cpp: 243] Версия: 1.7.0
master_1 |F0123 11: 46: 59.587368 7 process.cpp: 1115] Не удалось инициализировать: не удалось выполнить привязку 150.20.11.157:5050: невозможно назначить запрошенный адрес
master_1 |* Проверка трассировки стека сбоев: *
master_1 |@ 0x7f505ce54b9c google :: LogMessage :: Fail ()
master_1 |@ 0x7f505ce54ae0 google :: LogMessage :: SendToLog ()
master_1 |@ 0x7f505ce544b2 google :: LogMessage :: Flush ()
master_1 |@ 0x7f505ce57770
google :: LogMessageFatal :: ~ LogMessageFatal ()
master_1 |Процесс @ 0x7f505cd19ed1 :: initialize ()
master_1 |@ 0x55fb7b12981a main
master_1 |@ 0x7f504f0d0830 (неизвестно)
master_1 |@ 0x55fb7b1288b9 _start
master_1 |bash: строка 1: 7 прервана (ядро сброшено) /home/mesos-1.7.0/build/bin/mesos-master.sh --ip = 150.20.11.157 --work_dir = / var / run / mesos
Более того, когда я запускаю sudo docker-compose up на подчиненных узлах.Я получил эту ошибку:
slave_1 |F0123 11: 40: 06.878793 1 process.cpp: 1115] Не удалось инициализировать: не удалось выполнить привязку 0.0.0.0:5051: адрес уже используется
slave_1 |* Проверка трассировки стека сбоев: *
slave_1 |@ 0x7fee9d319b9c google :: LogMessage :: Fail ()
slave_1 |@ 0x7fee9d319ae0 google :: LogMessage :: SendToLog ()
slave_1 |@ 0x7fee9d3194b2 google :: LogMessage :: Flush ()
slave_1 |@ 0x7fee9d31c770
google :: LogMessageFatal :: ~ LogMessageFatal ()
slave_1 |Процесс @ 0x7fee9d1deed1 :: initialize ()
slave_1 |@ 0x55e99f661784 main
slave_1 |@ 0x7fee8f595830 (неизвестно)
slave_1 |@ 0x55e99f65f139 _stискусство
раб_1 | * Прервано в 1548243606 (время Unix), попробуйте "date -d @ 1548243606", если вы используете GNU date *
раб_1 | ПК: @ 0x7fee8f5ac196 (неизвестно)
раб_1 | * SIGSEGV (@ 0x0), полученный PID 1 (TID 0x7fee9f9f38c0) из PID 0; трассировка стека: *
раб_1 | @ 0x7fee8fee8390 (неизвестно)
раб_1 | @ 0x7fee8f5ac196 (неизвестно)
раб_1 | @ 0x7fee9d32055b google :: DumpStackTraceAndExit ()
раб_1 | @ 0x7fee9d319b9c google :: LogMessage :: Fail ()
раб_1 | @ 0x7fee9d319ae0 google :: LogMessage :: SendToLog ()
раб_1 | @ 0x7fee9d3194b2 google :: LogMessage :: Flush ()
раб_1 | @ 0x7fee9d31c770 google :: LogMessageFatal :: ~ LogMessageFatal ()
раб_1 | @ 0x7fee9d1deed1 process :: initialize ()
раб_1 | @ 0x55e99f661784 main
раб_1 | @ 0x7fee8f595830 (неизвестно)
раб_1 | @ 0x55e99f65f139 _start
раб_1 | I0123 11: 41: 07.818897 1 logging.cpp: 201] Регистрация уровня INFO началась!
раб_1 | I0123 11: 41: 07.819437 1 main.cpp: 349] Сборка: 2019-01-21 05:16:39 от
раб_1 | I0123 11: 41: 07.819470 1 main.cpp: 350] Версия: 1.7.0
раб_1 | I0123 11: 41: 07.823354 1 resolver.cpp: 69] Создание секретного распознавателя по умолчанию
раб_1 | E0123 11: 41: 07.927773 1 main.cpp: 483] EXIT со статусом 1: не удалось создать контейнерный контейнер: не удалось создать
DockerContainerizer: не удалось создать докер: не удалось получить версию докера: не удалось выполнить 'docker -H unix: ///var/run/docker.sock -
версия ': выход со статусом 127
Я много об этом искал и не мог этого понять. Не могли бы вы рассказать мне, как правильно написать docker compose для запуска Mesos и Spark cluster на докере?
Любая помощь будет принята с благодарностью.
Заранее спасибо.