Spark 클러스터 구축하기

GCP SSH 연결하기

  1. 로컬에서 SSH 키 생성
    ssh-keygen -t rsa -f ~/.ssh/gcp -C username
    gcp에서 유저이름을 못찾아 고생했던 적이 여러번 있어서 아예 옵션을 붙여 username을 명시적으로 설정해준다.

  2. GCP VM 인스턴스 > 메타데이터에 SSH 공개 키 등록

  3. SSH 연결
    ssh -i ~/.ssh/gcp username@<external_ip_here> ssh키 생성시 만든 username을 사용한다.

클러스터 만들기

  1. 방화벽 규칙 설정
    GCP Console에서 VPC 네트워크 > 방화벽 규칙으로 이동한 후, 필요한 포트를 열기 위한 규칙을 생성.
  • 트래픽: 인그레스
  • 대상: 클러스터의 모든 노드에 동일한 태그 할당 후 설정
  • 소스 IP 범위: 클러스터 내부 통신의 경우 10.0.0.0/8
  • 프로토콜 및 포트: TCP 22, 7077, 8080, 8081, 4040, 6066 등
  1. 내부 통신 설정
    • /etc/hosts 파일 설정
    • ~/.ssh/authorized_keys 파일 설정

주의
SSH 키 이름이 id_rsa가 아니면 SSH 접속 시 문제가 발생할 수 있음.
에러:

ssh spark01
The authenticity of host 'spark01 (10.178.0.8)' can't be established.
,,,@spark01: Permission denied (publickey).

키 이름이 다른 경우, ~/.ssh/config 파일을 설정해야 함.

spark 클러스터 구축하기

스파크 클러스터를 구축하는 방법 세가지!

1. 로컬로 설정하기

각 노드에 스파크를 직접 설치하고, 스탠드얼론 모드로 클러스터를 구성하는 방식

[노드 1]            [노드 2]            [노드 3]
+-----------+      +-----------+      +-----------+
| Spark     |      | Spark     |      | Spark     |
| Master    |----->| Worker    |----->| Worker    |
+-----------+      +-----------+      +-----------+
  • 설명:
    • 노드 1: 스파크 마스터 노드로 설정한다.
    • 노드 2, 3: 스파크 워커 노드로 설정하여 마스터 노드에 연결한다.
  • 특징:
    • 각 노드에 직접 스파크를 설치하므로 설정이 비교적 간단.
    • 개발 및 테스트 환경이나 작은 규모의 클러스터에 적합하다.

2. 도커 컨테이너 환경에서 실행하되, 수동으로 설정하기

각 노드에서 Docker를 사용하여 스파크를 컨테이너로 실행하고, 네트워킹과 설정을 수동으로 구성하는 방식.

[노드 1]            [노드 2]            [노드 3]
+-----------+      +-----------+      +-----------+
| Docker    |      | Docker    |      | Docker    |
| Container |      | Container |      | Container |
| Spark     |      | Spark     |      | Spark     |
| Master    |----->| Worker    |----->| Worker    |
+-----------+      +-----------+      +-----------+
  • 설명:
    • 노드 1: Docker를 사용하여 스파크 마스터 컨테이너를 실행한다.
    • 노드 2, 3: Docker를 사용하여 스파크 워커 컨테이너를 실행하고 마스터 컨테이너에 연결한다.
  • 특징:
    • 컨테이너를 사용하여 일관된 실행 환경을 제공한다.
    • 네트워크 설정과 컨테이너 관리를 수동으로 해야 하므로 복잡도가 증가할 수 있다.

3. 컨테이너 오케스트레이션 툴 사용하기

Docker Swarm이나 Kubernetes와 같은 오케스트레이션 도구를 사용하여 컨테이너 기반의 스파크 클러스터를 자동화하고 관리하는 방식.

                [오케스트레이션 도구]
                        |
        +---------------+---------------+
        |                               |
    [노드 1]                         [노드 2, 3]
    +-----------+                    +-----------+
    | Docker    |                    | Docker    |
    | Container |                    | Container |
    | Spark     |                    | Spark     |
    | Master    |                    | Workers   |
    +-----------+                    +-----------+
  • 설명:
    • 오케스트레이션 도구가 여러 노드에 걸쳐 컨테이너를 배포하고 관리한다.
    • 노드 1: 스파크 마스터 컨테이너를 실행한다.
    • 노드 2, 3: 스파크 워커 컨테이너를 실행하며, 오케스트레이션 도구가 자동으로 스케일링과 관리를 수행한다.
  • 특징:
    • 자동화된 배포, 스케일링, 로드 밸런싱, 장애 복구 등의 기능을 제공한다.
    • 대규모 클러스터나 프로덕션 환경에 적합.
    • 초기 설정이 복잡할 수 있지만, 관리 효율성과 확장성이 높다.

선택 가이드

  • 로컬 설정:
    • 추천 대상: 개발 및 테스트 환경, 작은 규모의 프로젝트.
    • 고려 사항: 빠른 구축이 가능하지만 수동 관리가 필요하다.
  • 도커 수동 설정:
    • 추천 대상: 컨테이너 환경이 필요하지만 오케스트레이션 도구를 사용하지 않는 경우.
    • 고려 사항: 컨테이너의 이점을 활용할 수 있지만, 네트워킹과 관리에 대한 추가 작업이 필요하다.
  • 오케스트레이션 도구 사용:
    • 추천 대상: 대규모 클러스터, 프로덕션 환경, 자동화된 관리가 필요한 경우.
    • 고려 사항: 초기 설정과 학습이 필요하지만, 장기적으로 관리 효율성과 안정성이 높다.

결론: 프로젝트의 규모가 작아 수동으로 설정할 수 있으므로 로컬에서 우선 분석 후 컨테이너 환경으로 마이그레이션 해보도록 하겠다.

Tags:

Categories:

Updated:

Leave a comment