새소식

반응형
GCP/Dataproc

Dataproc 사용하기

  • -
반응형

안녕하세요.

이번에 회사에서 Google Cloud Platform에 있는 dataproc을 사용 하였습니다.

이런 저런 글을 보고 pyspark를 이용하여 실행하였지만 여러가지 문제가 많았으며 혼자서 많은 시행착오를 겪고 이러한 것을 조금이나마 줄이고자 글을 올립니다.

 

기준은 pyspark 입니다. 제가 개발자가 아니라서 코딩에 익숙하지 않고 python 또한 잘 하는 편이 아니므로, 코드는 매우 단순합니다. 우선 처음에 만드는 과정부터 순서데로 진행 하겠습니다.

 

1. Dataproc 생성 

 

Google Cloud Platform( 이하 GCP)에서 Dataproc 메뉴를 선택 합니다. 처음에 동의 또는 시작하기 같은 안내 말이 나옵니다. (가장 초기에) 동의 또는 시작하기를 눌러서 시작한 뒤에 클러스터 부분을 들어 갑니다.

 

 

클러스터 이름의 경우 자동으로 임의로 되어 있는데 자신이 원하는 이름으로 변경 하시면 됩니다.

 

이후의 내용은 크게 중요한게 없고 원하시는 인스턴스 타입 및 용량,네트워크,리전등을 선택 합니다. 그런데 여기서 이상한게 자동 확장 정책 옵션이 비활성화 되어 있습니다. (제일 중요할 것 같은데...)

 

 

일단 노드 개수 및 여러가지를 세팅하고 한가지 중요한 것을 해줘야 합니다. 아래에 보시면 작게 고급옵션이 있습니다.

 

내용을 눌러서 확장하면 여러가지 내용이 나옵니다. 네트워크, 초기 설정 스크립트 설정 및 이미지(운영체제) 선택등등 여기서 유심히 보실 것이 선택적 구성요소 입니다.

저기 버튼을 누르면 Jypyter notebook, Druid , Zeppelin Notebook 등 다양한 내용의 Tool을 설치 할 수 있습니다. 

 

2. 코드 세팅 

 

저 같은 경우 pyspark로 했기 때문에 python코드를 준비 하였습니다. 여기서 중요 한 것은 분산처리 하는 코드를 만들어야지 분산처리를 한다는 것 입니다. 저 같은 경우 spark를 처음 접해봤기 때문에 단순히 python 코드를 짜면 알아서 분산 처리 한다고 생각하고 처음에 돌렸다가 master 노드만 열심히 일 하는 것을 보고 몇일을 삽질 했습니다. 

그리고 인터넷을 찾아보면서 SparkContext를 알았고 여기서 옵션을 설정 할때 SparkContext("local")을 이용하여 많은 오류를... 그리고 많은 삽질을 거듭하였습니다. (참고 : https://burning-dba.tistory.com/104)

결론적으로 다음과 같은 코드를 삽입하여 정상적으로 분산 처리를 하는 코드를 만들었습니다.

 

1
2
3
4
5
6
7
8
9
from pyspark import SparkContext,SparkConf
 
logFile = "GCS경로"
 
sc = SparkContext()
logData = sc.textFile(logFile).cache()
 
numAs = logData.filter(lambda s: 'A' in s).count()
print(numAs)
cs

 

위와 같이 만들었으며, GCS의 경로의 경우 Folder도 먹습니다. 예를 들어서 내가 어느 폴더의 전체를 읽고 싶은 경우 2020/01/13/* 이렇게 해주셔도 먹습니다. 저기 안의 모든 파일을 읽어서 데이터프레임으로 만들고 집계 합니다.

이제 이 코드를 GCS 폴더에 넣어줍니다.

 

3. 작업 만들기 

 

메뉴에서 클러스터 바로 아래쪽에 "작업" 메뉴가 있습니다.

 

메뉴를 클릭하고 보면 다음과 같은 화면이 나옵니다.

 

1. 리전 : 아까 만든 클러스터의 리전을 선택

2. 클러스터 : 아까 만든 클러스터 선택

3. 작업 유형 : 저는 pyspark를 사용 했으므로 선택

4. 기본 python파일 : 아까 저장한 코드의 위치를 설정 합니다. 저 같은 경우 GCS에 넣어놨습니다. hdfs에 넣어도 되는 듯 한데, GCS가 편해서 GCS에 넣었습니다.

 

나머지 옵션의 경우 저는 사용하지 않았습니다.

코드에서 단순히 count 작업만 하기 때문에 딱히 불필요 하였는데, 더욱 세부적으로 쓰실 분은 공식 홈페이지에서 확인 후 사용하시면 될 듯 합니다.

 

 

이렇게 생성하면 자동으로 자신이 실행을 합니다.

 

 

실행 내용을 보면 위와 같은 메시지가 나오면서 실행 된 것이 나옵니다. 위의 파일의 경우 96개의 파일이 있으며 각각 60~100mb의 파일 입니다. 이를 읽고 데이터 프레임으로 만들어서 특정 type만 count 하였습니다. 

 

그리고 추가적으로 말씀드리면 클러스터의 경우 GCE에 들어가면 Instance가 떠 있는 것을 볼 수 있는데요. 이를 Stackdriver에서 확인해서 모니터링을 할 수 있습니다.

 

 

위의 그래프를 보면 제가 처음에 잘못 세팅하여 테스트 하였을때 Master 노드만 엄청 튀는 것을 볼 수 있습니다. 하지만 이후에 마지막 그래프에서는 정상적으로 분산처리 하였음을 알 수 있습니다. 

 

감사합니다.

반응형

'GCP > Dataproc' 카테고리의 다른 글

GCP - dataproc 메모리 이슈  (0) 2020.01.13
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.