반응형 사이드 프로젝트/음악추천 챗봇 서비스15 음악추천챗봇10. S3데이터 PySpark처리 및 시각화 (Zeppelin) 앞에서 구축한 EMR클러스터를 실행한다. 1. Zeppelin에서 s3에 있는 데이터가져오기 load이후에 들어갈 값은 s3의 URI이다. top_tracks 데이터 가져오기 %pyspark from datetime import datetime toptrack_raw = sqlContext.read.format("parquet").load("s3://musicdatalake/top-tracks/dt=2021-08-02/top_tracks.parquet") print(type(toptrack_raw)) toptrack_raw.printSchema() toptrack_df = toptrack_raw.toDF('track_id','artist_id','track_name','popularity','extern.. 2021. 8. 9. 음악추천챗봇9. AWS EMR 클러스터구축(Hadoop+Spark+Zeppelin) 1.EMR클러스터구성 1.소프트웨어 구성 : EMR 5.29.0 : Spark2.4.4 / Hadoop 2.8.5 / Zeppeline 0.8.2 2.하드웨어 : 네트워킹 구성 확인. 내 test-vpc의 public subnet을 사용하고 싶어서 하드웨어 구성탭에서 지정했다. - 인스턴스 유형 : c5.xlarge (메모리가 좀 많이 필요해서 인스턴스 타입이 좀 높다) - 인스턴스 개수 : 3 (클러스터구성-마스터노드1개, 데이터노드2개) 3.일반옵션 - 클러스터 이름 - S3로깅장소 4. 보안 - 보안key : 인스턴스 접속 key를 지정해준다. - EC2보안그룹 : 마스터와 데이터노드에 접속하기 위해 해당 보안그룹이 생기는데, ssh접속을 위한 22포트도 추가한다. 5.클러스터생성 대기 -> 생성완.. 2021. 8. 7. 음악추천챗봇8. 아티스트 유사도 테스트 수행 및 예외처리 테스트 수행 어느정도 유사도가 나오는지 궁금해서 몇가지 아티스트 데이터를 넣어봤다. (아티스트 총 22) 그리고 데이이터처리 및 분석결과 혹시 유사아티스트의 결과값이 바뀌는지도 확인해보았고, 실제로 어느정도 유사한지를 확인해보았다. 1. 유사도 정확성 정교한 값이 아니라 그냥 무작정 평균값으로 비교하기에 크게 기대는 하지 않았다. 그런데 걸그룹(예: 브레이브걸스)에 대한 유사아티스트들이 다 걸그룹으로 나오거나, 보이그룹(예:빅뱅)에 대한 유사아티스들이 다 보이그룹으로 나오는 경우는 꽤 신기했다. 2. realated_artist 테이블업데이트 신규아티스트들이 들어오고 s3,아테나 스크릡트를 돌리고 나서 유사아티스트가 결과가 바뀌는지도 확인해보았다. 처음 APINK의 유사한 아티스트들은 러블리즈,트와이스,.. 2021. 7. 2. 음악추천챗봇7. crontab 스케쥴링 및 최종 메세지 확인 이제 거의 다 했다! 고지가 눈앞에 보인다 이번에 해야할 일은 다음과 같다. 1. 카카오톡 챗봇에 데이터 뿌려주기 related_artists 테이블에 있는 아티스트들의 top_track정보를 가져오는 것이다. 그리고 그걸 카카오 챗봇에서 carousel(케로셀) 타입으로 뿌려주기만 하면 된다. 2. 기능테스트 여기까지 테스트를 해보고, 데이터를 더 많이 넣어서 유사도를 확인해볼까 한다. rds,dynamodb,athena,s3를 다 쓰니까 인프라 비용에 조금 부담되서 후딱 테스트하고 다 지웠다.. 3. crontab 자동화처리 그다음에 s3와 athena를 돌려야하는데 이걸 ec2에 넣어서 crontab처리로 자동화를 한다. carousel(케로셀)타입 이제 related_artists결과를 selec.. 2021. 6. 29. 음악추천챗봇6. Athena 쿼리수행 및 음악 유사도 저장 | 데이터마트 athena를 사용해서 s3에 있는 데이터를 가져온다. 2021.06.25 - [Athena] parquet형식 S3 데이터 가져오기 그런데 이렇게 콘솔로 쿼리를 수행 할 수 있지만, 우리는 그 쿼리의 결과를 가지고 유사도를 계산해야한다. 그래서 boto3를 사용해서 쿼리를 돌리고 그 결과를 가지고 유사도를 계산해볼 것이다. 1. Athena 쿼리수행 boto3로 아테나를 수행하기 위해 몇가지 함수를 쓴다. >> boto3에서 확인하기 start_query_execution : 쿼리를 수행하는 함수 -> if r['ResponseMetadata']['HTTPStatusCode'] == 200: 수행성공 -> r['QueryExecutionId'] : 쿼리id -> 매개변수로 get_query_execut.. 2021. 6. 26. 음악추천챗봇 5.S3에 parquet 형태로 데이터저장 | 데이터레이크 구성 지금까지 스포티파이API를 통해 수집한 데이터들을 RDB(AWS RDS) 와 NoSQL(AWS DynamoDB)에 저장했다. 이번엔 AWS의 Obejct스토리지인 S3에 저장해볼 것이다. 엄밀히 말하면 DataLake를 구현하는 것이다. 모든 정형,비정형데이터들을 그대로 저장하는 것이다. aws에서 S3를 이용해 DataLake를 구축하는 것은 aws공식블로그를 참고했다. 그리고 데이터레이크에 저장된 데이터들로 유사도를 계산해 음악을 추천하는 기능을 구현할 것이다. 유사도를 계산하는 방식은 이곳을 참고했다. 아티스트별 인기 트랙들(top_tracks)의 음원 정보(audio_features)를 이용하여 아티스트간 거리를 계산하고, 사용자가 입력한 아티스트와 유사도가 큰 (=거리가 가까운) 아티스트의 음악.. 2021. 6. 23. 음악추천챗봇 4.2 DynamoDB 데이터저장 및 1차 테스트 완료 spotify API로 얻는 결과들을 AWS 데이터베이스에 저장하는 단계이다. 이번엔 top track 정보를 dynamodb에 저장해둘 것이다. 아 그리고 잊을뻔했는데 이번 프로젝트의 목표는 데이터파이프라인 구축이다. 그리고 스포티파이 API로 필요한 데이터들을 수집하고, MYSQL, DynamoDB, S3까지 다양한 데이터저장소를 사용해서 저장하고, 사용해보는 것이다. DynamoDB에 데이터 insert 테이블명 : artist_toptracks 파티션키 : track_id 스포티파이API를 통해 읽어온 데이터를 그냥 그대로 통째로 넣어도 되긴 하지만, 나는 뭔가 필요한 데이터들만 뽑아서 쓰고 싶었다. 그러다보니 item이 될 데이터 json형식을 만들고, 그대로 put_item했다. 데이터 ins.. 2021. 6. 19. 음악추천챗봇4.1 RDS 데이터저장 및 lambda배포 후..뭔가 진행방식이 꼬인 기분이다.. 무튼 이전에 개발환경(나의 로컬환경)에서 spotify api 테스트해보았는데, 흠.. 이젠 이걸 aws의 lambda로 옮겨야한다. 아 이래서 CI/CD가 생긴건가 겁나 번거롭네... 우선 개발환경에서 다 테스트해보고, 나중에 람다로 넘길까한다. 그리고 동시에 spotify API로 얻는 결과들을 AWS 데이터베이스에 저장하려고 한다. 아 그리고 잊을뻔했는데 이번 프로젝트의 목표는 데이터파이프라인 구축이다. 그리고 스포티파이 API로 필요한 데이터들을 수집하고, MYSQL, DynamoDB, S3까지 다양한 데이터저장소를 사용해서 저장하고, 사용해보는 것이다. RDS(mysql)에 데이터저장 사실 RDS를 쓸지 말지 고민을 했다. 내가 알기론 dynamodb는 V.. 2021. 6. 8. 음악추천챗봇1. Serverless아키텍쳐 구성하기 이전에 왜 서버리스를 쓰는지 람다의 장단점까지 알아보았다. 이제 실제로 aws의 람다와 api gateway로 구성해보려고 한다. 목표는 사용자가 카카오톡 챗봇 메세지를 전달하면 api gateway의 endpoint URL로 보내고, 트리거가 동작해 람다가를 수행하는 것이다. 구성은 이런식이다. 그럼 AWS 서비스를 이용해서 구성해보자! - Lambda에서 lambda function 생성 나는 런타임으로 Python 3.8을 선택했따. - API Gateway에서 REST API 생성 API 생성 : API 유형은 REST API를 선택한다. 메소드생성 : 필요한 HTTP 메소드를 생성하고, 메소드를 통해 받은 request를 '람다'로 보내도록 설정한다. 일단 우리가 사용할 카카오 오픈빌더에서는 P.. 2021. 6. 7. 음악추천챗봇0. 왜 Serverless아키텍쳐인가? Lambda의 장단점-동시성 지금까지 한 작업은 이렇다. 1. Front - 카카오챗봇 기획작업 완료 2. Back - 스포티파이 API 파악 완료 이번엔 인프라를 구성해볼까 한다. 프론트와 백단을 이어줄 틀을 잡아준다라고 할까. 그전에 개념적인 공부부터 진행해보려고한다. 솔직히 진짜 정성들여서 썼다.. On-premise ->IaaS -> PaaS -> SaaS 우선, 서버리스 아키텍쳐의 개념을 알기 전에 서버리스 아키텍쳐가 나타나게 된 배경부터 보고자한다 전체적인 일반적인 온프레미스 구성방식부터을 생각해보자. 일반적인 '전산실'을 생각하면 된다. 네트워크-스토리지-서버-가상화-운영체제-미들웨어-런타임-데이터-앱까지 일일이 물리적으로 직접 다 관리한다. 하지만 물리적 장비를 모두 다 관리하고 구축한다는 점에서 비용이 많이 든다. .. 2021. 6. 5. 이전 1 2 다음 728x90