본문 바로가기

소프트웨어-이야기/인프라

[AWS]Athena 사용 팁

AWS Athena란?

AWS Athena는 S3에 저장된 파일에 쿼리를 날리면, 데이터를 가져올 수 있게 해주는 AWS 서비스이다.

구글의 빅쿼리랑 비슷한 서비스이다. 


AWS Athena를 왜 써야할까?

인프라를 관리하지 않아도 된다

대용량 로그파일을 분석하려면 이것저것 인프라 셋팅, 관리 등등이 필요하다.

예를 들면, 스파크에 S3 로그 파일을 땡겨와서, 스파크 SQL을 날려서 데이터를 추출한다거나...

이 경우, 데이터 분석을 위한 인프라를 셋팅해주고 관리해야한다.


그런데 아테나는 서버리스 서비스여서, 이러한 관리가 필요하지 않다.


비용 측면에서 이점이 있다

분석을 위해 셋팅해놓은 인프라를 하루종일 꾸준히 쓰는게 아니라 

특정한 시간대에만 사용한다거나,

갑자기 분석해야하는 데이터가 급증할 경우,

인프라가 펑펑 놀고 있거나, 혹은 데이터를 감당하지 못할 정도가 될 수 있다.


Athena를 사용하면 필요한 때에, 필요한 만큼 데이터를 분석하고 돈을 지불한다는 장점이 있다. ( 요금 링크 )


AWS Athena VS Google Big Query

아테나와 빅쿼리 둘 중 어떤걸 써야할까?


내가 알고 있는 아테나와 빅쿼리의 큰 차이점은 데이터 소스를 관리하는 방법이다.

만약 내가 AWS S3를 사용하고 있다면, 로그를 별도의 경로로 퍼올리지 않아도 된다. Athena에서 테이블 스키마를 만들 때, S3 경로를 추가해주기만 하면 된다.

그런데 구글 빅쿼리를 사용하는 경우에는 로그를 별도의 경로로 퍼올려줘야한다.


S3를 사용하고 있고, 기본적인 쿼리만을 사용한다면 아테나를 사용하는게 편할 것 같다.


그런데 빅쿼리는 가상의 테이블을 만들 수 있고, 아테나보다 성능이 좀더 좋고, UDF도 만들 수 있고 ... 이것저것 장점이 많다. ( bigquery-vs-athena )

데이터 소스가 여러군데에 흩어져있고, 복잡하게 가공해야하는 경우에는 구글 빅쿼리를 사용하는게 좋을 것 같다. 


어떻게 사용하면 효율적으로 쓸 수 있을까? 

로그가 남는 S3 폴더 경로를 잘 정의해놓으면, 파티셔닝을 하기 편하다

'파티셔닝에 사용할 컬럼명 = 값' 형태로 폴더명을 지어주면, 파티셔닝을 하기 편하다. 

예를 들면 /logs/impressions/year=2017/month=08/day=01/hour=19/impressions_log_2017-08-01-19.log 처럼 폴더 경로에 파티셔닝할 값들을 미리 추가해놓는거다. 


MSCK REPAIR TABLE impressions

이렇게 명령문을 쳐주면, 테이블에 정의해놓은 S3에 있는 폴더 경로가 다 파티셔닝에 추가된다. 


만약 위의 예시처럼 폴더명을 짓지 않은 경우, 폴더 갯수만큼 파티셔닝 명령문을 실행해줘야한다. 


잘못된 폴더 경로 예시 : /log/2017/08/01/19/impressions

ALTER TABLE impressions ADD PARTITION (year='2017',month='08',day='01',hour='19') location 's3://athena-examples/log/2017/08/01/19/impressions/'

ALTER TABLE impressions ADD PARTITION (year='2017',month='08',day='01',hour='20') location 's3://athena-examples/log/2017/08/01/19/impressions/'

ALTER TABLE impressions ADD PARTITION (year='2017',month='08',day='01',hour='21') location 's3://athena-examples/log/2017/08/01/19/impressions/'

아테나 파티셔닝 참고 문서 


로그를 파케이나 ORC 포맷으로 만들어두기

파케이 파일은 이미 한번 압축되어 있는 파일이고, 컬럼 기반의 데이터 포맷이다. 

그래서 파케이 파일을 사용하면, 일반 로우 데이터를 분석하는 것보다 90% 정도 비용절감을 할 수 있다. (참고 자료)


파일을 압축해놓기 

파일 용량이 작으면 S3 <-> 아테나 사이에서 발생하는 네트워크 비용을 줄일 수 있다. 그래서 파일 용량이 적으면 쿼리 속도가 더 향상된다. 

그리고 아테나는 스캔한 데이터 크기만큼 돈을 내기 때문에, 파일을 압축해놓으면 아테나를 좀더 저렴하게 사용할 수 있다.


Presto을 잘 알아두기 

아테나는 Presto을 사용하고 있다. 때문에, Presto의 원리를 기반으로 쿼리를 짜면, 좀 더 최적화할 요소들을 찾을 수 있을거다. 


AWS Athena 국내 사례  

뱅크샐러드 유저 클러스터 추출 사례 - Analyze Data in MongoDB with AWS

VCNC 사례 


Athena와 제플린을 연동한 사례에 대한 내용도 포함되어 있다 @_@


관련 자료

Amazon Athena - 10가지성능향상 팁

analyzing data in s3 using amazon athena

Build a Serverless Architecture to Analyze Amazon CloudFront Access Logs Using AWS Lambda, Amazon Athena, and Amazon Kinesis Analytics