::: IT인터넷 :::

Livy로 Spark Application 실행하기 (1) - 컨테이너 설정 변경

곰탱이푸우 2023. 10. 23. 08:20
Livy 서버에 Spark Application 실행을 요청하는 Livy 클라이언트를 구성한다.
 
Livy 클라이언트는 AirFlow를 구성할때 생성한 AirFlow Jupyter 컨테이너에 구성한다.
해당 컨테이너는 Ubuntu 20.04 환경에 conda 가상 환경의 Jupyter Notebook이 실행 중이다.
파이썬 기반의 Livy 클라이언트를 아래 목적으로 실행하는데 편리하다.
  • Livy 서버에 Spark Application을 제출
  • Livy 서버의 REST API를 호출하여 세션과 배치 작업 제어
 
굳이 AirFlow와 연동 된 Jupyter Notebook에 Livy Client를 구성한 이유는 다음과 같다.
  • Spark을 이용한 ETL 파이프라인은 AirFlow를 통해 워크플로우를 제어할 것이다.
  • Jupyter Notebook 컨테이너는 Conda 기반의 파이썬 환경이 구성되어 있다.
  • AirFlow Worker 컨테이너도 파이썬 환경이 구성되어 있다.
  • AirFlow의 Docker Network에 Jupyter Notebook 컨테이너도 포함되어 있다.
  • Jupyter Notebook 컨테이너에서 가능하면 AirFlow Worker에서도 가능할 것이다.
 
AirFlow Jupyter 컨테이너를 구성하는 방법은 아래 문서를 참고한다.
Livy 서버와 Spark의 설정을 변경하는 방법은 아래 문서를 참고한다.
하둡 클러스터에 Livy 서버를 설치하는 방법은 아래 문서를 참고한다.
Livy로 Spark Application을 실행하는 방법은 아래 순서로 진행한다.
 
 

컨테이너 설정 변경

Jupyter Notebook 컨테이너는 AirFlow의 DAGs 폴더의 파이썬 파일들을 테스트하는 것을 목적으로 생성했다.
 
AirFlow Jupyter 컨테이너를 구성하는 방법은 아래 문서를 참고한다.
따라서 하둡 클러스터의 Livy 서버와 연동이 가능하도록 해당 컨테이너의 내부 설정을 변경해야 한다.
 
아래 명령을 사용하여 root 권한으로 컨테이너 내부로 진입한다.
$ docker exec -it -u root airflow_jupyter_1 /bin/bash
 

운영체제 설정 변경

먼저 운영체제 설정을 변경하고 필요한 도구를 설치한다.
프록시 설정, 저장소 변경, vim 설치, hosts 변경 순으로 진행한다.
 
Jupyter Notebook 컨테이너는 우분투 20.04 운영체제로 구성되어 있다.
따라서 아래 명령어는 우분투 환경에서 테스트 되었음을 참고한다.
 

프록시 설정 (선택)

현재 서버가 구성된 환경이 별도의 서버망이므로, 먼저 외부 통신이 가능하도록 프록시를 설정한다.
 
아래와 같이 환경 변수로 등록한다.
# 아래 한글로 된 부분은 모두 수정해야 한다.
$ export https_proxy=http://프록시서버주소:포트
$ export http_proxy=http://프록시서버주소:포트
 
인터넷 연결이 가능하여 프록시 서버를 필요로 하지 않는 경우는 생략한다.
 

apt 저장소 변경 (선택)

apt 저장소의 주소를 사설 저장소로 변경한다.
 
아직 문서 편집기가 설치 되지 않았으므로,  아래와 같이 sed 명령어로 sources.list 파일을 수정한다.
# 아래 한글로 된 부분은 모두 수정해야 한다.
# 화면 표시로 인한 줄바꿈으로 명령어는 한줄로 작성해야 한다.
$ sed -i 's/http://archive.ubuntu.com/ubuntu/
          /http://저장소FQDN/artifactory/ubuntu저장소이름/ubuntu/g' /etc/apt/sources.list
$ sed -i 's/http://security.ubuntu.com/ubuntu/
          /http://저장소FQDN/artifactory/ubuntu저장소이름/ubuntu/g' /etc/apt/sources.list
 
인터넷 연결이 가능하여 공식 저장소를 사용하는 경우는 생략한다.
 
 

vim 설치

Docker 컨테이너는 경량화를 목적으로, 필수적인 패키지 외에는 모두 제거하여 배포한다.
따라서 대부분의 경우 컨테이너가 실행하는 서비스를 제외한 거의 모든 패키지가 없다.
 
프록시 설정과 저장소 변경이 완료되었으며, 아래와 같이 패키지 목록을 업데이트하고 vim을 설치한다.
$ apt update
$ apt install vim
 
취향에 따라 nano 와 같은 다른 편집기를 설치해도 무방하다.
 

컨테이너의 Hosts 설정

하둡 클러스터의 Ambari, Spark, HDFS, Livy 등의 서비스에 접근할 때 IP 주소 대신 FQDN을 사용한다.
숫자로 구성 된 IP 숫자보다는 FQDN의 단어를 통해 대상 서버를 쉽게 유추할 수 있기 때문이다.
 
하둡 클러스터의 각 노드에 부여 된 FQDN은 내부에서 사용하기 때문에 DNS 서버에 정보가 없어 인식할 수 없다.
이러한 이유로 IP와 FQDN의 연결 정보를 hosts에 등록해줘야 한다.
 
아래와 같이 hosts 파일에 하둡 클러스터의 각 노드들과 에지 노드의 주소를 설정한다.
$ vi /etc/hosts
# 아래 내용 추가하고 :wq로 저장
192.168.56.201 bdp01.bearpooh.com
192.168.56.202 bdp02.bearpooh.com
192.168.56.203 bdp03.bearpooh.com
호스트IP주소 bdp-edge.bearpooh.com

# 다른 클러스터에도 연결하려는 경우
다른클러스터물리IP hdp01.bearpooh.com
다른클러스터물리IP hdp02.bearpooh.com
다른클러스터물리IP hdp-edge.bearpooh.com
 

내부 계정 권한 변경

AirFlow의 Jupyter Notebook의 기본 사용자 계정은 jovyan이다.
이후 과정들은 jovyan으로 진행할 것이므로 해당 계정의 비밀번호 변경과 sudo 권한 부여 등을 진행한다.
# 비밀번호 변경
$ passwd jovyan

# sudo 권한 부여
$ usermod -aG sudo jovyan

# 계정 전환
$ su jovyan

 

python 설정 변경

AirFlow의 Jupyter Notebook의 Anaconda 기반의 파이썬 환경이 구성되어 있다.
Livy 클라이언트 환경을 위한 별도의 가상 환경을 생성하려면 Anaconda와 pip 설정 파일을 수정해야 한다.
 

conda 설정 변경

Anaconda의 설정은 아래 사항에 해당하는 경우 설정을 변경한다.
  • 사설 저장소 주소
  • 자체 인증서 검증 옵션 해제
  • 프록시 서버 주소
 
만약 인터넷이 가능하고 공식 저장소를 사용하는 경우 생략해도 된다.
 
먼저 jovyan의 홈 경로에 .condarc 파일을 생성하고 아래와 같이 입력한다.
$ vi ~/.condarc
# 아래 내용을 추가하고 :wq로 저장
# 사설 저장소 지정
channel_alias: http://저장소주소/repository/conda-repos  # 사용하는 저장소 주소로 변경
channels:
  - http://저장소주소/repository/conda-repos  # 사용하는 저장소 주소로 변경
default_channels:
  - http://저장소주소/repository/conda-repos  # 사용하는 저장소 주소로 변경
# 자체 서명 인증서 검증 해제
ssl_verify: false
# 프록시 서버 주소
proxy_servers:
  http: http://프록시서버주소:포트
  https: http://프록시서버주소:포트
 
그리고 공통적으로 적용되는 condarc 파일의 conda-forge 저장소 설정을 해제한다.
$ sudo vi /opt/conda/.condarc
# - conda-forgeg 항목에 주석 처리하고 :wq로 저장
# ... 생략 ...
channels:
#  - conda-forge
 
Anaconda 저장소 구성과 클라이언트 설정은 아래 문서를 참고한다.

pip 설정 변경

pip의 설정은 아래 사항에 해당하는 경우 설정을 변경한다.
  • 사설 저장소 주소
  • 자체 인증서 검증 옵션 해제
 
만약 인터넷이 가능하고 공식 저장소를 사용하는 경우 생략해도 된다.
프록시 정보는 환경 변수의 정보를 활용하기 때문에 별도로 설정하지 않아도 된다.
 
/etc/pip.conf 파일을 생성하고 아래 내용을 입력한다.
$ sudo vi /etc/pip.conf
# 아래 내용을 추가하고 :wq로 저장
[global]
index-url=https://저장소주소:포트/repository/pypi-repos/simple
trusted-host=저장소주소    # 사설 인증서를 사용하는 경우
 
파이썬 저장소 구성과 클라이언트 설정은 아래 문서를 참고한다.

Spark Application 실행하기

기존에 작성했던 Spark Applicaion을 Jar로 빌드하고, Livy를 통해 Spark에 제출하여 정상 실행되는지 확인한다.
 
자세한 방법은 아래 문서를 참고한다.