탱크/회고

[회고록] 빅데이터 분석 환경 세팅 회고

sseozytank 2024. 4. 25.

2024-05-09 즈음 

 

이번 새 프로젝트에서 대용량 데이터를 핸들링하게 되면서, 본격적으로 빅데이터 분석 환경 세팅을 시작했다. 

다행히 시간이 넉넉해서, 팀장님께서 기초부터 할 수 있도록 업무와 과제를 잘 분배해주셨다. 서비스의 처음을 같이 경험할 수 있는 회사에서만 누릴 수 있는 특권. 아직 갈길이 멀긴 하지만, 다 깨달았다! 라고 느낄 때 까지는 시간이 많이 걸릴 것 같아, 지금 수준에서 무엇을 배웠고 어떤게 부족했는지 정리해보고 더 나은 내일을 위한 초석을 다져보자. 


무엇을 하였는가?

  • 생활코딩 강의를 바탕으로 리눅스의 기초 및 운영 체제에 대한 이해를 했다. 
  • Server와 Port에 대해 기본을 이해하고, 내가 만든 분석 환경을 원격에서 (보안을 제외하고) 접속할 수 있도록 설정해보았다. 
  • VI의 기본 원리와 단축키를 익히는 등 리눅스 텍스트에디터에 대해 숙지하였다. 
  • Hadoop과 Hadoop Ecosystem에 대한 개념을 이해하고 실제 Hadoop을 설치하고 설정하였다. 
  • Spark에 대한 개념을 이해하고 실제 Spark 설치 후, 다양한 Pyspark 문법을 실습하였다. 
  • Spark 위에 Yarn을 올려 가용 리소스를 가장 효과적으로 사용할 수 있는 케이스에 대한 실험을 진행하였다. 
  • 실제 HDFS를 통해 파일을 읽고 쓰는 것과 Spark 언어로 데이터 전처리를 완료하였다. 
  • HDFS를 윈도우에 mount 하여 디렉토리 확인을 손쉽게 할 수 있도록 셋팅하였다. 
  • Spark의 각종 config에 대해 이해하고 여러가지 설정을 직접 변경해보았다. 
  • PySpark로 이탈 유저 예측에 대한 간단한 모델링을 진행하였다. 
  • Zeppelin을 설치, 구현해보고, 내가 만든 분석 환경을 Zeppelin에서도 연결해주었다. 
  • Zeppelin의 Dynamic Form + Pyspark로 타 부서에서 데이터 추출을 쉽게 할 수 있는 방법에 대해 제안하였다. 

 

어떤걸 배웠는가? 

  • pandas에서 5Gb 테이블 조인 작업이 뻑나는걸 보며 왜 빅데이터 분석환경이 필요한지 직접 느낄 수 있었다. 
  • 내 스스로 Ubuntu에서는 Hadoop과 Spark를 설치하고, 각종 환경변수들을 설정하여 로컬에서의 분석환경을 구축할 수 있게 되었다. (협업을 위한 환경을 만들기에는 각종 서버와 보안 이슈)   
  • 이 전 빅쿼리 최적화 업무를 진행하면서도 느꼈지만, 다시금 짧은 쿼리를 쓰는게 아닌, 비용이 덜 드는 쿼리를 쓰려고 노력하게 되었다. (불필요한 조인은 없애고, SELECT 절에서 필요한 column만 선택하고, 파티션 및 인덱스가 설정되어있는 테이블은 이를 활용해서 BI 쿼리를 만들어 효율적으로 조회할 수 있도록) 데이터가 커질 수록 쿼리 한줄의 리소스 양이 달라지기 때문에, 결과만 뽑아내야지가 아니라, 이 결과를 좀 더 효율적으로 뽑아내야지가 되었다. 
  • 코테할 때 왜 시간복잡도와 공간복잡도를 따지는지 몰랐다. 내가 잘못 쓴 for문 한줄... 몇시간을 잡아먹을 수 있게 한다는걸 뼈저리게 느꼈다. 
  • 데이터 분석가는 분석 내용을 공유해야한다. Zeppelin을 쓰면서 특히 다른 팀과의 협업에 대해 고민할 수 있는 시간이 되었다. 내가 쓰기 편한 것과, 사용자가 쓰기 편한 것은 분명이 있기 마련이다. 새로운 툴을 접할 때면 이 툴은 어떻게 활용하면 나에게 좋을지, 나와 협업을 하는 다른 부서에는 어떤게 좋을지에 대해 고민하게 되는 계기가 되었다. 

 

무엇이 부족하였는지? 

  • 데이터 분석의 세계는 굉장히 넓었다. 
  • 빅쿼리를 할 때, 쿼리에 따라 비용이 나가니 그 때 잠깐 쿼리 최적화를 공부했던 것 말고는 리소스에 대한 고민을 해본적이 많이 없었다는게 너무 부끄러웠다. 
  • 부분 부분 알다보니, 이렇게 하면 좋지않을까요? 라고 했을 때 막히는 것들이 정말 많았다. 이건 이래서 안되고 저건 저래서 안되는. (특히 보안) 내가 되고 안되고가 판단이 안되는게 좀 답답했다. 

 

잘한 것도 있었다! 

  • 중간 중간 내용을 티스토리에 정리한 것. 남이 본다고 생각하고 쓰진 않고 늘 내가 본다고 생각하고 쓰는데, 실제로 몇십번을 다시 본 포스팅도 있었다.  
  • 모르는 부분에 대해 주도적으로 해결하자. 신입 때부터도 신경쓰려고 노력한 부분인데, 모르는걸 으악 몰라요! 하는 사람이 되고 싶진 않았다. 직접 스택 오버플로우, 심지어 중국 사이트까지 뒤져보며 해결책을 찾으려고 노력했고 이 과정에서 실력이 정말 많이 늘었다! 

 

앞으로 뭘 할 거냐면 

  • 서론에 적어둔 것 처럼, 아직 이것저것 끝나지 않은게 많다. 대용량 데이터 처리에 많은 시간이 소요되다 보니, 노트북으로 한줄한줄 치다간 끝이 안난다... 따라서 submit을 통해 batch 작업을 돌려볼려고 한다. 
  • 빅데이터 BI 구축에 대해 알아보려고 한다. 
  • submit을 끝내면, Spark Streaming에 대해 공부하려고 한다. 물론 틈새틈새 Pyspark 문법도 체화해야한다! 
  • 이 모든걸 끝내면 Spark로 Rule 기반 이상유저모델링을 진행해 batch로 돌려서 실제 서비스에 적용하려고 한다. 
  • 또한, Hbase와 Hive 구축이 완료되면 SparkQL까지 진행하도록 한다. 

 

주저리주저리 

  • 도와주는 사람이 정말 많음에 감사했다. 특히 전 회사 SE분께서 내가 리눅스 걸음마 떼는 데 정말 많은 도움을 주셨다 감사합니다 :) 

댓글