Я новичок в области больших данных и впервые использую Docker. Я только что нашел этот замечательный проект: https://kiwenlau.com/2016/06/26/hadoop-cluster-docker-update-english/, которые создают кластер hadoop, состоящий из одного главного и двух подчиненных устройств, использующих Docker.
После выполнения всей установки я просто запускаю контейнеры, и они работают нормально. Есть файл start-containers.sh, который помогает мне запустить кластер. Я решил установить некоторые инструменты, такие как sqoop, чтобы импортировать мою локальную реляционную базу данных в Hbase, и это работает нормально. После этого я останавливаю все контейнеры Docker на своем компьютере, нажав
docker stop $(docker ps -a -q)
На второй день, когда я попытался перезапустить контейнеры, запустив тот же скрипт ./start-container.sh, я обнаружил эту ошибку:
запустить контейнер hadoop-master...
запустить контейнер hadoop-slave1...
запустить контейнер hadoop-slave2...
Ответ об ошибке от демона: Контейнер
e942e424a3b166452c9d2ea1925197d660014322416c869dc4a982fdae1fb0ad не запущен
даже обедаю этим демоном; контейнеры моего кластера не могут соединиться друг с другом, и я не могу получить доступ к данным, которые хранятся на Hbase.
Во-первых, кто-нибудь может сказать мне, почему этот демон не работает.
PS: в файле start-container.sh есть строка, которая удаляет контейнеры, если они существуют до их создания, я удаляю эту строку, т.к. если я их не удаляю, то каждый раз делаю все дела с начала.
После поиска я обнаружил, что предпочтительнее использовать docker compose, который дает мне возможность пообедать всем контейнером вместе.
Но я не могу найти как перевести мой файл start-container.sh в файл docker-compose.yml. Это лучший способ пообедать все мои контейнеры в то же время? Это содержимое файла start-containers.sh:
#!/bin/bash
sudo docker network create --driver=bridge hadoop
# the default node number is 3
N=${1:-3}
# start hadoop master container
#sudo docker rm -f hadoop-master &> /dev/null
echo "start hadoop-master container..."
sudo docker run -itd \
--net=hadoop \
-p 50070:50070 \
-p 8088:8088 \
-p 7077:7077 \
-p 16010:16010 \
--name hadoop-master \
--hostname hadoop-master \
spark-hadoop:latest &> /dev/null
# sudo docker run -itd \
# --net=hadoop \
# -p 5432:5432 \
# --name postgres \
# --hostname hadoop-master \
# -e POSTGRES_PASSWORD=0000
# --volume /media/mobelite/0e5603b2-b1ad-4662-9869-8d0873b65f80/postgresDB/postgresql/10/main:/var/lib/postgresql/data \
# sameersbn/postgresql:10-2 &> /dev/null
# start hadoop slave container
i=1
while [ $i -lt $N ]
do
# sudo docker rm -f hadoop-slave$i &> /dev/null
echo "start hadoop-slave$i container..."
port=$(( 8040 + $i ))
sudo docker run -itd \
-p $port:8042 \
--net=hadoop \
--name hadoop-slave$i \
--hostname hadoop-slave$i \
spark-hadoop:latest &> /dev/null
i=$(( $i + 1 ))
done
# get into hadoop master container
sudo docker exec -it hadoop-master bash