1 pyspark IDE 1

자바 → 하둡 → 스파크를 설치한 후에 pyspark를 통해 작업을 수행하는 방식이 스칼라 언어가 아닌 경우 많이 사용되고 있다. 이를 위해서 쥬피터 노트북 같은 IDE가 필요한데 스파크에 pyspark을 통해 쥬피터 노트북으로 작업하는 방식을 살펴보자.

스파크 쥬피터 노트북

스파크에 pyspark로 접속하여 분석과 개발작업을 수행하는 방법은 쥬피터 노트북을 사용할 경우 두가지 방식이 존재한다.

  • .bashrc 파일에 쥬피터 노트북 지정사항 반영
  • findspark 팩키지를 활용하여 쥬피터 노트북에서 pyspark 찾아 반영

1.1 PySpark 드라이버 활용

~/.bashrc 파일에 환경설정 정보 반영하여 pyspark 명령어를 실행시키면 웹브라우저에 쥬피터 노트북이 떠 바로 작업하는 방법이 있다.

1.2 findspark 팩키지 사용

pip install findspark 명령어로 findspark를 설치한다. jupyter notebook 명령어 혹은 Anaconda Navigator에서 쥬피터 노트북을 실행한 후에 import findspark 명령어로 팩키지를 활용하는 방식이다. 즉, 쥬피터 노트북을 실행시키고 import로 불러와서 처리하는 방법이다.

스파크 쥬피터 노트북

2 윈도우 환경 AWS CLI

2.1 윈도우 비트 확인 2

AWS에 접근하는 로컬 컴퓨터 운영체제가 윈도우의 경우 Microsoft Windows에 AWS Command Line Interface 설치](https://docs.aws.amazon.com/ko_kr/cli/latest/userguide/install-windows.html)에 따라서 AWS CLI를 설치할 경우 가장 먼저 “Windows용 AWS CLI MSI 설치 관리자”를 다운로드 받아야 하는데 64비트와 32비트가 있다.

  1. 윈도우 탐색기를 연다.
  2. 좌측 메뉴 컴퓨터에 마우스 포인터를 위치시키고 우클릭한다.
  3. 메뉴에서 “속성”을 클릭한다.
  4. 컴퓨터에 대한 기본 정보 보기시스템시스템 종류: 64비트 운영 체제

혹은 윈도우 탐색기 상단 주소창에 “제어판제어판 항목”을 복사하여 붙여넣으면 제어판 홈에서 확인이 가능하다.

2.2 AWS CLI 설치

운영체제에 맞춰 64비트 혹은 32비트 Windows용 AWS CLI MSI 설치 관리자를 다운로드 받는다. Windows용 AWS CLI MSI 설치 관리자(64비트) 다운로드받아 설치작업을 한다.

CLI는 기본적으로 C:\Program Files\Amazon\AWSCLI(64비트 버전) 또는 C:\Program Files (x86)\Amazon\AWSCLI (32비트 버전) 디렉토리에 설치됩니다.

2.3 AWS CLI 설치 환경변수 추가

AWS CLI를 설치하게 되면 C:\Program Files\Amazon\AWSCLI(64비트 버전) 또는 C:\Program Files (x86)\Amazon\AWSCLI (32비트 버전) 디렉토리에 실행파일이 위치하게 된다. 쉘에서 AWS CLI를 바로 불러 사용할 수 있도록 등록을 해줘야 한다. 이를 환경변수 설정 작업이라고 한다.

  • MSI 설치 관리자(64비트) – C:Files
  • MSI 설치 관리자(32비트) – C:Files (x86)

AWS CLI가 설치된 디렉토리가 확인되면 다음으로 환경변수 등록작업을 한다.

  1. 윈도우 키(⊞) 를 누르고 “environment variables”을 타이핑한다.
  2. 환경변수 창이 뜨는 것을 확인한다.
  3. <유저명>에 대한 사용자 변수(U)를 확인한다.
  4. 변수에서 Path를 선택하고 편집(E)...을 클릭한다.
  5. 세미콜론으로 구분된 맨 마지막에 “세미콜론”으로 구분되게 64비트의 경우 C:\Program Files\Amazon\AWSCLI 경로명을 추가한다.
  6. 확인을 누루고 빠져나온다.

2.4 AWS CLI 설치 확인

AWS CLI 설치 작업과 cmd 쉘에서 불러 사용할 수 있도록 환경설정 작업이 완료되면 제대로 설치되어 활용이 가능한지 cmd 쉘에서 확인 과정을 거친다.

키보드 윈도우 키(⊞) + R 누르면 실행창이 뜨고 cmd 를 타이핑하면 윈도우 쉘 터미널이 실행된다.

현재 컴퓨터 사용자명이 tidyverse로 가정하고 where aws 명령어로 AWS CLI 가 위치한 곳을 확인하고 aws --version 명령어를 통해 정상 설치되었는지 확인한다.

3 윈도우 환경 aws-shell 3

[aws-shell][https://github.com/awslabs/aws-shell]을 설치하여 AWS CLI를 쉽고 편하게 사용할 수 있도록 작업한다.

pip install aws-shell 명령어를 통해서 aws-shell을 설치한다.

4 AWS 키관리

AWS CLI를 설치하고 나서 처음 해야 할 일은 Access KeySecret Access Key 그리고 기본 리전출력 결과를 설정하는 것입니다. 이유는 Access KeySecret Access Key 정보만 있으면 누구나 AWS 클라우드 자원을 마음먹은대로 사용할 수 있기 때문이다.

  • AWS Access Key ID [****************BDKA]:
  • AWS Secret Access Key [****************zn8W]:
  • Default region name [ap-northeast-2]:
  • Default output format [None]:

cmd 윈도우 쉘에서 aws configure 명령어로 AWS IAM을 발급한 AWS Access Key ID, AWS Secret Access Key를 설정하여 반영시킨다. configure list 명령어를 통해 설정내용을 확인한다.

Error: File association not found for extension .py
확장명 .py에 대한 파일 연결이 없습니다. 4

  1. cmd 윈도우 터미널에서 where python 명령어로 파이썬 실행경로를 확인한다.
    • 단, cmd 윈도우 터미널을 관리자 권한으로 연다.
  2. 다음 명령어를 순서대로 타이핑한다.

5 AWS CLI 헬로 월드

AWS S3 버킷에 담긴 데이터를 AWS CLI를 통해 확인하여 처음으로 헬로월드를 찍어본다. aws-shell을 타이핑하여 aws>로 프롬프트를 바꾼 후에 s3 ls 명령어로 AWS S3 버킷 tidyverse-seoul에 포함된 디렉토리를 파악한다.

Ctrl + D”를 입력하면 aws> CLI를 빠져나올 수 있다. 자주 쓰는 AWS CLI 5 명령어가 다음에 정리되어 있다.

AWS CIL로 자주 사용하는 명령어는 다음과 같다.

CLI 명령어 AWS S3 명령어
폴더 검색 aws s3 ls s3://dorothypaper/theswice/
파일 검색 aws s3 ls s3://dorothypaper/theswice/file1.tar
파일 다운로드(복사) aws s3 cp s3://dorothypaper/theswice/file1.tar /data/theswice/
파일 업로드(복사) aws s3 cp /data/theswice/file1.tar s3://dorothypaper/theswice/
파일 다운로드(이동) aws s3 mv s3://dorothypaper/theswice/file1.tar /data/theswice/
파일 업로드(이동) aws s3 cp /data/theswice/file1.tar s3://dorothypaper/theswice/
버킷 내 파일 복사 aws s3 cp s3://dorothypaper/theswice/file1.tar s3://dorothypaper/kimgn/file1.tar
버킷 내 파일 이동 aws s3 mv s3://dorothypaper/theswice/file1.tar s3://dorothypaper/kimgn/file1.tar
다수 파일 복사 aws s3 cp /data/theswice/folder s3://dorothypaper/theswice/ –recursive
폴더 복사 aws s3 cp /data/theswice/folder s3://dorothypaper/theswice/folder –recursive
특정 파일명 삭제 aws s3 rm s3://dorothypaper/theswice/ –recursive –exclude "dorothypaper/*.sql"
폴더 삭제 aws s3 rm s3://dorothypaper/theswice/folder –recursive
파일 삭제 aws s3 rm s3://dorothypaper/theswice/file1.tar

6 AWS S3 파일 업로드

AWS에서 스파크 데이터 분석을 위해서 먼저 S3에 데이터를 준비해야 한다. 로컬 컴퓨터에서 AWS S3로 데이터를 전송하는 방식은 AWS CLI (aws-shell)을 이용한 방법과 GUI로 S3 브라우져 프로그램을 사용하는 방식이 존재한다.

6.1 GUI - S3 브라우져 프로그램

로컬 컴퓨터에서 FTP 프로그램 중 AWS S3 데이터 송수신을 위해 개발된 S3 브라우져 프로그램을 사용해서 데이터를 올리는 방식은 다음과 같다. S3 버킷에 파일을 올리기 위해서 다음 두가지 단계를 거쳐 작업을 진행한다.

  1. AccountsStorage AccountsEdit Account 로 이동한다.
  2. Access Key ID, Secret Access Key 를 설정한다.
  3. 로컬 PC YearPredictionMSD.txt 파일을 S3 버킷으로 올린다.

백만송 S3 업로드

7 로컬 컴퓨터 쥬피터 노트북

쥬피터 노트북으로 작업하는 경우 두가지가 마음에 걸린다. 첫번째는 작업 디렉토리 설정이고 그 다음으로 한글폰트 설정이다.

7.1 작업 디렉토리 설정 6

스파크 클러스터에 접근라는데 개발환경을 쥬피터 노트북으로 설정하고 작업 디렉토리를 설정한다. 이를 위해서 cmd (또는 Anaconda Prompt )를 열고 jupyter notebook --generate-config 실행하여 jupyter_notebook_config.py 파일을 생성하고 디렉토리 환경설정부분을 다음과 같이 텍스트 편집기를 열어 변경시킨다.

7.2 한글 폰트 설정 7

쥬피터 노트북을 설치하면 C:\Users\<사용자ID>\.jupyter가 생성된다. 여기에 custom.css 파일을 생성시키고 적용하고자하는 폰트를 설정하면 된다.

  1. 윈도우 탐색기를 연다.
  2. C:\Users\<사용자ID>\.jupyter 디렉토리로 이동한다.
  3. custom 디렉토리를 생성한다.
  4. custom.css 파일을 생성한다.
  5. 다음 내용을 custom.css 파일에 적어 저장시킨다.

D2Coding 폰트를 사전에 다운로드 받아 설치하고 나서 윈도우 시스템에 설치된 D2Coding 폰트를 쥬피터 노트북에 적용시키는 개념이다.

쥬피터 노트북 폰트 설정

8 AWS EC2 쥬피터 노트북 8 9

AWS EC2 인스턴스를 생성시키고 스파크를 하둡과 함께 설치한 후에 S3 혹은 기타 저장된 데이터를 분석하고 모형을 만들려면 개발환경이 필요한데 쥬피터 노트북을 활용하여 스파크 클러스터 위에서 작업하는 방향을 잡는다. 로컬 컴퓨터에서 쥬피터 노트북 환경설정하는 것과 달리 외부 클라우드 누구나 접속할 수 있는 상황이라 보안관련 상황을 설정하여 본인만 안전하게 사용할 수 있도록 쥬피터 노트북에 설정을 추가시킨다.

8.1 쥬피터 노트북 설치 - 아나콘다3

가장 먼저 쥬피터 노트북을 설치하는데 즉접 pip install jupyter 명령어로 쥬피터 노트북만 설치해도 되고, 어챠피 기계학습을 비롯한 다양한 분석을 수행할 것이니 아나콘다 3을 설치하여 한방에 해결한다. Download Anaconda Distribution에 가서 Anaconda 2018.12 For Linux Installer를 선택하여 링크 주소를 받아낸다. wget으로 아나콘다3를 가져와서 bash로 설치한다.

.bashrc 파일에 아나콘다3 환경을 자동 저장시키면 되지만, 혹시 건너뛴 경우 export PATH="/home/ec2-user/anaconda3/bin:$PATH"을 추가시킨다. source .bashrc 명령어로 환경설정 사항을 적용시키게 되면 파이썬 엔진이 바뀐 것이 확인된다.

8.2 쥬피터 노트북 비밀번호 설정

쉘에서 ipython 명령어를 치면 인터랙티브 파이썬 모드로 들어가게 된다. from IPython.lib import passwd 에서 passwd() 명령어를 통해 SHA 해쉬값을 생성시켜 둔다. 나중에 EC2 인스턴스 쥬피터 노트북에 들어가기 위한 비밀번호로 사용한다. SHA 해쉬값은 .jupyter/jupyter_notebook_config.py 환경설정 내용을 정리할 때 다시 활용한다.

8.3 웹브라우저를 통해 로컬 컴퓨터에서 EC2 쥬피터 서버 접속

웹브라우저를 통해 로컬 컴퓨터로부터 쥬피터 노트북이 설치되어 있는 EC2 서버에 접속하기 위한 작업을 수행한다. 이를 위해서 인증서를 생성한다.

jupyter notebook --generate-config 명령어를 통해서 환경설정 파일을 생성시킨다. .jupyter/jupyter_notebook_config.py 파일이 생성되고 나중에 다수 환경설정 내용을 담아낸다.

certs 디렉토리를 생성하고 나서 인증서를 생성한다. 인증서명은 임의로 작성한다. newcert.pem도 좋고 mycert.pem도 좋다. 공백으로 관련 내용을 채우려면 .을 입력한다.

8.5 쥬피터 노트북 실행

jupyter notebook 명령어를 실행시키면 접속 퍼블릭 IP 주소를 통해 포트번호 8888을 통해 쥬피터 노트북이 설치된 EC2서버에 웹브라우저를 통해 접속이 가능하다. 개인정보 보호 오류와 같은 메시지가 뜨는 경우 하단의 파란색 박스 링크를 과감히 클릭하고 이동한다. 그러면 SHA 해쉬로 설정한 비밀번호를 입력시키도록 하는 인증화면이 뜨고 비번을 넣어 인증과정을 마치게 되면 드디어 쥬피터 노트북을 사용할 수 있게 된다.

AWS EC2 인스턴스에 인터넷 웹브라우저를 통해 접속할 때 인증서를 사용해서 접근하도록 안내하는 화면이 출력된다.

인증서

SHA 해쉬로 설정한 비밀번호를 입력하여 쥬피터 노트북에 접속하여 작업을 열어준다.

인증서

드디어 작업할 환경이 설정되어 데이터 분석 및 모형개발 작업을 수행할 수 있게 되었다.

인증서

9 AWS EC2 pyspark 쥬피터 노트북 10

EC2 인스턴스에 쥬피터 노트북을 웹브라우저를 통해 연결하는 것을 살펴봤다. 이번에는 EC2 인스턴스에 스파크 클러스터를 설치하고 이를 쥬피터 노트북으로 연결하는 방법을 살펴보자.

9.2 인터랙티브 쉘 테스트

먼저 리눅스 쉘 유틸리티 wc 단어갯수 세는 프로그램을 통해 $SPARK_HOME이 제대로 설정되었는지 확인한다.

다음으로 파이썬 쉘을 실행시켜 인터랙티브 방식으로 단어갯수를 세어서 리눅스 쉘 유틸리티를 통해 계산한 것과 동일한지 검증한다. $SPARK_HOME 디렉토리로 이동한 후에 pyspark을 실행시킨다. 그리고 나서 리눅스 쉘 유틸리티 대신에 spark.sparkContext.textFile() 명령어로 “README.md” 파일을 불러와서 단어갯수를 센다.

9.3 쥬피터 노트북

쥬피터 노트북을 실행시켜 pyspark를 실행시킬 경우 사전 작업으로 다음 팩키지를 추가로 설치한다: py4j, pyspark, findspark

그리고 나서 pyspark 헬로월드 원주율 계산하는 모의실험 코드를 실생시켜 클러스터 생성과 모의실험 계산결과를 출력시키고 클러스터를 정지시키는 것까지 테스트한다.

10 기타 - 노트북 운영문제 11

jupyter notebook을 실행한 후에 ...NotebookApp] Error loading server extension jupyterlab 문제가 발생될 경우 다음 명령어를 실행하면 오류를 잡을 수 있다.

쥬피터 노트북에 (재)연결관련하여 문제가 발생할 경우 cmd 터미널에서 다음 명령어를 실행할 경우 도움이 될 수 있다.

conda update jupyterlab

쥬피터 노트북에 (재)연결관련하여 문제가 발생할 경우(Jupyter notebook keeps reconnecting to kernel) 12

포트(port)가 충돌나서 생기는 문제이기 때문에 이를 해결하는 방식은 다음과 같다.

  1. C:\Users\<사용자명>\.jupyter 디렉토리로 이동한다.
  2. jupyter_notebook_config.py 파일을 연다.
  3. c.NotebookApp.port 행을 찾아 적당한 포트번호로 바꾼다.
    • 예를 들어: 88889875

NativeCodeLoader:62 - Unable to load native-hadoop library for your platform… using builtin-java classes where applicable … 13

HADOOP_OPTS 환경변수 설정을 다음과 같이 수행하면 된다.

export HADOOP_OPTS="$HADOOP_OPTS -Djava.library.path=$HADOOP_HOME/lib/native"