
Docker를 이용하여 Hadoop과 Spark 환경 구축
해당 포스팅과 이어지는 환경 구축입니다.
Hadoop과 Spark를 Docker 컨테이너를 이용하여 환경 구축을 하여 연동하였습니다.
이제 NoSQL과 Spark를 연동하여 보겠습니다.
도커는 이미 깔려있다는 전제로 진행
# 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
# 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 컨테이너 환경 구축 완료!
# 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 # 컨테이너 간 통신 잘 되는지 확인하기
# ※주의 : 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를 연동하는 과정에서 이미 수행된 작업들도 꽤나 있어서 더 그래보이는듯 하다.
하지만 본인은 위에서 언급한 네트워크 설정을 인지하지 못한채 거의 반나절, 아니 그 이상의 시간을 삽질하였다...
다들 환경구축을 진행하며 네트워크, 버전 문제 등 다양한 방면에서 아주 꼼꼼히 체크하며 진행하기를 바란다..