Skip to content

ravieeeee/serverless-KBOleague-analysis

Repository files navigation

주제

하둡 기반의 야구 커뮤니티 자연어 처리를 통한 2018 프로야구 우승 팀 분석 및 예측 시스템

Architecture

Structure

Trouble Shooting

serverless

EMR

  • 웹 연결 활성화(Amazon EMR 클러스터에 설치되는 애플리케이션은 마스터 노드에 호스팅된 웹 사이트로 사용자 인터페이스를 게시)를 위해 마스터 노드(EC2 인스턴스)에 대한 SSH 터널 열기 & 프록시 관리 도구 구성이 필요
  • Zeppelin에서 코드 실행시, java.net.ConnectException: Connection refused (Connection refused) 발생
    • Interpreter 설정이 제대로 안되어있는 문제(EC2에 당연히 Interpreter가 깔려있다고 생각했다..)
      • anaconda 설치
        • EC2 인스턴스에 anaconda 설치
        • Spark Cluster 구축하기
        • 과정
          • ssh 접속
          // Anaconda installer archive(https://repo.continuum.io/archive/index.html)
          wget https://repo.continuum.io/archive/Anaconda2-5.3.0-Linux-x86_64.sh -O ~/anaconda.sh
          
          bash ~/anaconda.sh -b -p $HOME/anaconda
          
          echo -e '\nexport PATH=$HOME/anaconda/bin:$PATH' >> $HOME/.bashrc && source $HOME/.bashrc
          
          // 경로 확인
          which python
          
          • zeppelin 내 interpreter 설정에서 python의 zeppelin.pythonzeppelin.pyspark.python의 value를 /home/hadoop/anaconda/bin/python로 변경
        • python package 설치는 conda install package-name
          • anaconda가 지원하지 않는 패키지는 pip로 설치
        • EMR 클러스터를 다시 올릴 때마다, EC2 인스턴스 자체가 새로 올라가므로 매번 위의 과정을 해줘야하는데 귀찮으니 자동화하자
          • EMR 클러스터 생성시, bootstrap 옵션에 사용자 지정 옵션을 줄 수 있다.
          • s3내에 위의 명령어들이 있는 .sh 파일을 업로드한 후, 해당 파일로 지정하자.
          • 클러스터를 생성할 때 마다 bootstrap action을 수행하는 자동 구성 단계를 거쳐준다.
          • 참고
  • Zeppelin의 notebook이 cluster 재실행 시 날아감
    • S3에 json으로 저장
      • cluster 생성 시, 다음 configuration 입력
      [
        {
          "Classification": "zeppelin-env",
          "Properties": {},
          "Configurations": [
            {
              "Classification": "export",
              "Properties": {
                "ZEPPELIN_NOTEBOOK_STORAGE": "org.apache.zeppelin.notebook.repo.S3NotebookRepo",
                "ZEPPELIN_NOTEBOOK_S3_BUCKET": "s3-bucket-name",
                "ZEPPELIN_NOTEBOOK_S3_USER": "user-name"
              },
              "Configurations": []
            }
          ]
        }
      ]
      
      • 새 클러스터 생성시 기존 노트북을 S3에서 로드하게 된다.

Spark

  • SparkSession object 생성시 java.io.FileNotFoundException: /stderr (Permission denied) 발생
    • EMR 버전을 5.18.0 밑으로 낮추면 된다
    • 참고

Kinesis

  • 중간에 data transform시, return 형식이 있다.
  • 그 중 recordId는 publish 한 쪽에서 온 recordId와 transform 후 return할 해당 record의 recordId가 같아야한다.
    • 이 recordId가 내가 직접 준 id값이라는 생각에 잡혀가지고 엄청난 삽질을 했다..
    • 넘어온 event의 records를 찍어보면 내가 지정한 id가 아닌, record마다 recordId를 부여해서 넘어오는 것을 볼 수 있다.

Retrospect

  • 크롤링 raw data를 s3에 넣을껄!
    • dynamo는 Availability를 보장하는데, 이 프로젝트에는 그런 real-time을 보장받기 보다는 S3를 쓰는 것이 더 목적에 맞는 느낌..
    • 그래도 dynamodb를 처음 써본 것으로 만족
  • 크롤러들 serverless 배포시 virtualenv 설정을 안했다!
    • 간단한데 왜 안했지 바보
  • kinesis가 stream으로 들어오는 데이터를 nlp해서 그걸 가지고 하둡을 돌리는 그런 구조를 생각했는데, konlpy가 올라가지 않아서 transforming하는 middleware가 그냥 받은 데이터 뱉기밖에 못한게 아쉽다.
    • 프로젝트 주제 특성상, 이미 야구 시즌이 끝나서 더이상 크롤링하지 않기 때문에 짜놓은 구조(스케쥴 걸어놓은 람다 -> kinesis firehose에서 streaming으로 nlp -> s3에 쌓기 -> MR)대로 흘러갈 수는 없지만, 틀은 그렇게 만들어보면서 재미있었다 :D
  • Tokenization 이외에 좀 더 다양한 방식의 NLP를 해보면 좋았을 것 같다.
    • 여기서 한 스텝만 더 밟아도 바로 ML을 알아야해서 주어진 시간 안에 도전하기가 어려웠다ㅜㅜ 아쉽
  • 제일 잘한 일 : 가진 크레딧 이상으로 과금하지 않았다

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published