Aws athenaを使ってみた

23
Sunggyu Rhie([email protected]) Retty Inc. AWS Athenaを使ってみた

Transcript of Aws athenaを使ってみた

Sunggyu Rhie([email protected])Retty Inc.

AWS Athenaを使ってみた

自己紹介

RettyでWeb, InfraのEngineerやってます

AWS、Elasticsearchが好き最近Apache Drill触り始めました

李 晟圭(イ・ソンギュ)35歳

韓国出身、日本9年目[email protected]

前置き

今回の発表内容は

ログ解析レベルで止まっており、

DMとしてS3を利用して分析を行うなどの

使い方はやってない段階での内容になります。

ご容赦ください。

Before Athena

ELB S3 TreasureData

CloudFront S3 Elasticsearch

Before Athena

ELB S3 TreasureData

CloudFront S3 Elasticsearch

こう見ると簡単ですが

Before Athena -リアルな話

ELB S3 TreasureData

CloudFront S3

Elasticsearch

Fluentd

Lambda

Kinesis

Logstash

API Gatewayものは増え

Before Athena -リアルな話

▸ 権限どうなってんの?

▸ 自前?マネージド?

▸ コスト見積れるの?

▸ 監視は?

▸ いつまで保持するの?

▸ 誰が面倒見るの?

▸ Elasticsearchのクエリはエンジニアでも一部しか投げれないよ?

▸ TreasureDataのプランってどんなんだっけ?まだ入れていいの?

▸ アクセスログたまーにしかみないんだけどここまでやる?

▸ もう面倒だからAPIGatewayでキックしたら見れるようにしたから使って?

▹ 誰にも使ってもらえなかった(悲しい)

▸ これやる?!

After Athena

ELB S3

CloudFront S3

Athena

After Athena -リアルな話

▸ 権限?IAMってのがありまして。

▸ マネージドって楽だよね。

▸ 見積もり?コスト予測は明確ではないけど安心感はある。

▸ 監視?要らない。

▸ 保持?安いし気にしない。

▸ 面倒?S3面倒みたことある?

▸ クエリ?パーティションだけ気をつければ非エンジニアでも投げれる。

▸ あんまり使わない?Adhocでの確認がめっちゃ簡単。

▸ redashからjdbc使って見れるようにしたからAPIなんか作らなくていい。

▹ みんな見てくれる(ビジュアライズ・慣れ大事)

▸ これいいね!

簡単な使い方の説明

本当に簡単なので説明は省きます

一応下記のような記事公開してるのでよろしければ。。。

Athenaを早速試してみた

S3にあるログ分析が非常に簡単に

▸ ELB, Cloudfront, その他溜め込んでるログなど

▸ 分析するデータソースの準備は非常に簡単

▸ AWSのサービスからのデータならなおさら簡単

▸ gzでも見れる

▸ 4テラのログを141個のパーティション付けが13分で完了

▸ カラム設定には骨が折れる

▸ パーティション設定はもっと骨が折れる

▹ パーティションの付け方

▸ 予想スキャンサイズがわからない

▸ クエリタイムアウトがある?

▸ ユーザ・アカウントごとのスキャン上限などは?

その他のデータ分析まで使うか?

CREATE EXTERNAL TABLE table_name (...)PARTITIONED BY (year string, month string, day string)...

でテーブル作成後にパーティション付けを行うのですが

パーティションの付け方

ALTER TABLE database_name.table_name ADD PARTITION (year='2016',month='08',day='28') location 's3://elb-access-log/AWSLogs/00000000000000/elasticloadbalancing/ap-northeast-1/2016/08/28/';

これで1日分。数年分やりたい場合は?

パーティションの付け方

ALTER TABLE database_name.table_name ADD PARTITION (year='2016',month='08',day='28') location 's3://elb-access-log/AWSLogs/00000000000000/elasticloadbalancing/ap-northeast-1/2016/08/28/'PARTITION (year='2016',month='08',day='29') location 's3://elb-access-log/AWSLogs/00000000000000/elasticloadbalancing/ap-northeast-1/2016/08/29/'PARTITION (year='2016',month='08',day='30') location 's3://elb-access-log/AWSLogs/00000000000000/elasticloadbalancing/ap-northeast-1/2016/08/30/'…

パーティションの付け方(期待)

ALTER TABLE database_name.table_name ADD PARTITION (year='2016',month='08',day='28') location 's3://elb-access-log/AWSLogs/00000000000000/elasticloadbalancing/ap-northeast-1/2016/08/28/';ALTER TABLE database_name.table_name ADDPARTITION (year='2016',month='08',day='29') location 's3://elb-access-log/AWSLogs/00000000000000/elasticloadbalancing/ap-northeast-1/2016/08/29/';ALTER TABLE database_name.table_name ADDPARTITION (year='2016',month='08',day='30') location 's3://elb-access-log/AWSLogs/00000000000000/elasticloadbalancing/ap-northeast-1/2016/08/30/';…

パーティションの付け方(現実)

ALTER文は1個ずつしか実行できない(多分Hive0.7互換)

パーティションの付け方(酷な現実)

なので、公式JDBCを入手してJavaで久しぶりに

Class.forName("com.amazonaws.athena.jdbc.AthenaDriver");

とか書いたり(規則あるならこっちをおすすめ)

パーティションの付け方(残酷な現実)

SQLWorkbench(公式推奨)とか入れでJDBC設定後

パーティションの付け方(残酷な現実)

大量に流すとか(4TB/141partition/13min)

パーティションの付け方(残酷な現実)

Rettyでは

S3に貯めたログをアドホックで確認するときのみ

今の所、その他の分析はTD、BigQuery派が多い

だけど、やっぱデータの移管なしで分析できるのは

強烈な魅力なので、社内での熱も上昇中

今後に期待

▸ AWSを使ってる以上、S3にログは溜まる

▸ もっと効率よく・簡単にS3と連携できるたら

▸ クエリのスキャンサイズ・タイムリミット制限周り

▸ パーティショニングなんとかしてもらいたい

▸ もっと安く。。。

Athenaの話がもっとしたい

まだまだ知らないのが多い・本格運用してないので

みなさんからも話が聞きたいのでぜひ色々話しましょう!

懇親会でも個別に連絡でも!

美味いもん食べに行こうぜ的なノリでも!