Docker를 이용하여 NoSQL(MongoDB) 컨테이너 구축 및 Spark 연동

BAEJUN SON·2024년 9월 15일
post-thumbnail

Docker를 이용하여 Hadoop과 Spark 환경 구축

해당 포스팅과 이어지는 환경 구축입니다.

Hadoop과 Spark를 Docker 컨테이너를 이용하여 환경 구축을 하여 연동하였습니다.

이제 NoSQL과 Spark를 연동하여 보겠습니다.


NoSQL(MongoDB) 컨테이너 위에 올리기

도커는 이미 깔려있다는 전제로 진행

1. 기본세팅

# 1. mongo image pull
$ docker pull mongo

# 2. 잘 가져왔는지 확인
$ docker imgaes
REPOSITORY   TAG       IMAGE ID       CREATED       SIZE
mongo        latest    545fe6e3d65b   4 weeks ago   721MB

# 3. 컨테이너 실행
# 필자는 로컬에 따로 27017사용중이라 27018으로 매핑
$ docker run --name mongo-container -d -p 27018:27017 mongo

# 4. 접속
$ docker exec -it mongo-container bash

# 5. mongo shell에 접속
$ mongosh

2. 테스트

# 1. pip, python3 설치(mongo shell 환경이 아닌 컨테이너 내부 환경)
$ apt update
$ apt install python3 python3-pip -y
$ pip3 install pymongo

# 2. 만약 python3 설치 안되어있으면 진행
$ python3 --version  # Python 설치 여부 확인

$ apt update
$ apt install python3

# 3. vi 설치
$ apt update
$ apt install vim -y

# 4. 테스트
$ vi mongodb_test.py # test py 생성

# 5. 테스트 코드 삽입
from pymongo import MongoClient

# MongoDB에 연결
client = MongoClient('localhost', 27018)  # 호스트의 localhost:27018로 연결
db = client['test_db']  # 데이터베이스 이름 설정
collection = db['test_collection']  # 컬렉션 이름 설정

# 데이터 삽입
data = {"name": "John", "age": 30, "city": "Seoul"}
result = collection.insert_one(data)
print(f"Inserted document ID: {result.inserted_id}")

# 데이터 조회
retrieved_data = collection.find_one({"name": "John"})
print("Retrieved Data:", retrieved_data)

# 데이터베이스 연결 종료
client.close()

# 7. 실행
$ python3 mongodb_test.py

mongo 컨테이너 환경 구축 완료!


NoSQL(MongoDB)와 Spark 연동

1. 네트워크 연동

  • 필자같은 경우는, 이 과정을 빼먹고 진행을 해서 계속 안됐다..
  • 이 이유라곤 생각도 못하고, mongo와 spark의 문제에 포커스만 맞춰서.. 거의 반나절을 날려먹었다.
# 1. spark가 속해있는 network 환경에 mongocontainer 추가
# 필자의 경우엔 hadoop network에, nameNode(HDFS), dataNode(spark)가 구동중이다.
$ docker network connect hadoop mongo-container

# 2. 연결확인
$ docker network inspect hadoop # 1. mongo-container 잘 들어왔는지 확인

$ sudo apt-get install iputils-ping
$ ping mongo-container # 컨테이너 간 통신 잘 되는지 확인하기

2. pyspark 실행

# ※주의 : spark버전이 3.4라서 mongo-spark-connector 버전이 10:3:0 이상이어야 함
pyspark --conf "spark.mongodb.read.connection.uri=mongodb://mongo-container/test.myCollection?readPreference=primaryPreferred" \
        --conf "spark.mongodb.write.connection.uri=mongodb://mongo-container/test.myCollection" \
        --packages org.mongodb.spark:mongo-spark-connector_2.12:10.3.0

# MongoDB에서 데이터 읽기
df = spark.read.format("mongodb").load()

# 데이터 출력
df.show()

사실 Hadoop과 Spark의 연동과정에 비하면 괴애애애애앵장히 간단하게 보인다.
앞에 Hadoop과 Spark를 연동하는 과정에서 이미 수행된 작업들도 꽤나 있어서 더 그래보이는듯 하다.

하지만 본인은 위에서 언급한 네트워크 설정을 인지하지 못한채 거의 반나절, 아니 그 이상의 시간을 삽질하였다...

다들 환경구축을 진행하며 네트워크, 버전 문제 등 다양한 방면에서 아주 꼼꼼히 체크하며 진행하기를 바란다..

0개의 댓글