AWS AthenaでS3のログを集計してみた
業務でS3にあるログファイル(JSON行レコード)を集計するタスクをAWS Athenaでやってみたので備忘録。
実はこれ、すでにAWS EMR/Apache Pigで集計しているログファイルなのでPigスクリプトを修正してもよかったんですが実行環境やデプロイが面倒そうだったのと、 Athenaを今覚えたほうが今後の業務で役に立ちそうなのでチャレンジしてみることにしました。 (Pigスクリプトを書いたのは3年前くらいの自分なので頑張れば思い出せるのですが、古い技術を思い出すモチベーションはそんなにない・・・)
そもそもAthenaがSQLで簡単に集計できる、ってのも大きな判断要素ではありました。
というわけでどういう感じで学んでいったかをメモしておきます。
概要を把握
何事もまずは基礎基本から、というわけでまずはAthenaのドキュメントを読んで概要を把握します。
わかったこと
Athena使い方
- テーブル、データベース、を定義する
次にチュートリアルをやってみます。 日本語の解説を見ながら進めたかったのでこの記事を参考にしました。 blog.serverworks.co.jp
これでざっくりと機能と使い方を把握できました。
というわけで今回の対応を進めていきます。 以下、チュートリアルをやったことある人向け。
テーブルの作成
まずはテーブル作成からです。
S3上のログのパスはだいたいこんなかんじ。
s3://bucket_name/path/to/logs/2018/08/01/00/
Athenaにはパーティション機能があり、Hive形式で s3://bucket_name/path/to/logs/year=2018/month=08/date=01/hour=00/
のようになっていればSQLでパーティションを利用できて便利そうだったんですが、今回は単に年月日でディレクトリが切られているだけなので対応しておりません。
こういう場合でも手動でパーティションを作成すれば利用可能なのですが、8月1日のパーティション作成、8月2日のパーティション作成、、、 といった具合にひとつずつパーティションを作成しないといけないようです。
プログラムを作成してJDBCでパーティション作成コマンドを一気に発行・・・とかやればいいみたいですが、 今回はアドホックな集計なのでS3パスの指定を対象の年月日を直接指定しパーティションを利用しないようにしました。
今回は以下のように指定しました。こうすると /2018/08/
以下のすべてのログが集計対象になります。
s3://bucket_name/path/to/logs/2018/08/
ログの形式はJSONを指定します。 JSONだと次ステップのカラム定義の際にで正規表現でログをパースする必要がなくてかなり楽ちんでした。
カラム定義
JSONのプロパティ名をひとつずつカラムとして定義していきます。 JSONパースして一覧を出して選べたりすればかなり楽なのに手動入力なのでつらいです。 しかし、CSVなどの場合は正規表現でパース処理を書かなくてはいけないのでだいぶマシです。
というわけでこれはS3の実際のログを確認しつつ作業します。
ここで、必要ないカラムや値の型が不明なプロパティについては定義しないほうが楽です。 使わないうえによくわからないプロパティをわざわざ定義してパースに失敗するより、定義しないままにしておきましょう。 すべて定義しなくても無視されるだけなので問題ありません。
定義に問題なければプレビューを確認できるので確認しておきましょう。
SQL作成
ここは普通にSQLを書くだけなので特に書くことはありません。
予めS3のログサイズを調べておき実行時間やコストが想定外に膨らまないように注意しましょう。
最初はわざとすくないデーターでテーブルを作っておくといいかもしれません。 (こういう機能がAthenaにあれば簡単なのですが、無さそうです)
結果の確認
AthenaのHisotry、およびS3から確認&ダウンロード可能です。 極力Athena側でクエリに名前をつけて保存しておくと、あとあと再利用などしやすそうです。
所感など
S3のログを手軽にSQLで集計でき、かなり便利でした。 今回はWebコンソールから作業しましたがチュートリアルをやっておけば特に困ることがないぐらい簡単でした。 今後の業務で活用していきたいです。
イマイチなところとしては、SQLをSaveするときDescription入力時にEnterを押すと確定されてしまい、日本語が入力しづらい、というのがありました。。。 これはWebコンソールが日本語化されてないのでいろいろと対応してないところがあるのでしょう・・。まぁそんなに問題ないです。ちょっとつらいだけ。
以上!
Kalafinaブログを閉じました
「LINE Developers Meetup in Tokyo #44 -Agile2018 Conference 報告会-」に参加してきたメモ
「2018年08月28日(火) LINE Developers Meetup in Tokyo #44 -Agile2018 Conference 報告会-」に参加してきました。
当初ブログに書くつもりはなかったのでかなり雑なヌケモレだらけのメモですが、せっかくなので記録しておきます。
1) From Output to Outcome
伊藤 宏幸(LINE株式会社)
Agile 2018についての説明
今年、Metricsがカテゴリに昇格した DevOpsは減ったが、それは別でカンファレンスをやるようになったから
Topic
- Scaling Agile
- Business Agility
- 正直ハズレだった、とのこと。まだ具体的なはなしがあまりない
Outcome
- Tech for Trial & Errors
-> Summary Outcome
Business
Continuous Delivery
- Scale teams
- CD for DB
-> Outcome
Database DevOps
DBもDevOpsやっていく
Chaos Engineering
Metrics (Agile Data)
KeynoteでMetricsについて話していた。
Mob Programming
年がら年中コミュニケーションしてるから、、、 -> 見積もりやらない。 -> デイリーMTGがやらない。
Learning to Experiment
常に実験しながら改善していく。
週7時間、勉強会をやっている。チームのためなら内容は何でもいいし予算も確保している。
Tool
Portfolio Dashboard Poker
メトリクスを選ぶポーカー
Wisdom of Crowds
チームごとの考えをお互い見れるようにする
まとめ
Agile 2019 に応募しよう!
2) Data & Metrics in Agile2018
陶山 育男 様(株式会社サイバーエージェント)
Metricsについて
Modern Data (Modern Agileのモジり)
Data is Beautiful
Data を安全に使う
- 予測可能性の対価
- 依存があるとタスクが間に合わない確率的がかなり高くなる!
- 依存を減らしましょう
The impact of lean
- SDPI
- Software Development Performance Index
- 4つのメトリクスでバランスよく・・・
- スループット
- するーぷっと安定性 ・など
- これをつかってチームをはかる
- WIPを減らすと不具合が減り、デリバリー速度があがる。しかし生産性は落ちる。
3) Making work visible
高橋 陽太郎 様 (株式会社リクルートジョブズ 兼 株式会社リクルートテクノロジーズ)
メトリクスをあえて手で取ってる。
感動したメトリクスの話し
よさそう。あとで。
著者や登壇者と雑談の話し
Christopher Lucian Hunter Industriesのディレクター モブプロの創始者の一人
モブは案件ごとにやり始めて最後までそのメンバーでやり続ける 途中から参加する人のコスト高いから基本的にやらない
モブプロは見積もりしないけど、計画は立ててないの? ビジネスは計画を立ててるけど、開発に強いることはないよ
4) 当たり前を当たり前に
横道 稔(LINE株式会社)
横道さんは Training, Teaching, Coaching にフォーカスしてた
みんな読んでるらしい本 https://www.amazon.co.jp/dp/B0062O7L7S/ref=dp-kindle-redirect?_encoding=UTF8&btkr=1
アジャイルを教えるためのセッション
ゲームをするといいですよ、っと。 記憶にも残るし。 -> Communication Game
VARK 人間の学習特性4分類。Visual, AUidtory, Reading/Writing, Kinesthetic どれが強いか、を意識するといいかも
Cone of Learning てっぺんはDiscussion -> いますぐディスカッション隣の人とやりましょう!
Efficiency <-> Effectiveness
感想
運営スタッフ、登壇者、の皆様の発言やふるまいがものすごくオープンで話しやすく聞きやすかった。 これはなにげに、かなりすごいと思った。
メトリクスの話は面白いしやってみたいと思うが、スクラムマスター専任でないとそのための時間は取れなさそう。 現実的にスクラムマスターと開発者を兼任している現場も多そうだし。 ツールで解決できるといいのだが・・・。
自分のチームで依存を減らすのはやりたい。 フロントとサーバーサイドでペアを組んでみると依存は減るかも?(ジャストアイデア)
モブプロもやってみたい。 しかしPO不在の状況が多いため難しいかも。
有酸素運動メモ
脂肪燃焼のための目標心拍数
((220-33)-60)0.6+60=136.2 ((220-33)-60)0.7+60=148.9 ((220-33)-60)*0.8+60=161.6
136〜162ぐらいの心拍数をキープすると良さそう。 136〜149でもいいかも。
最大30〜40分ぐらい、最低でも1日5分くらいやる。
MacBook Pro 13" 2018を購入したのでセットアップメモ
メインマシンとして利用していた MacBook Pro 17" 2011 が故障したため新しいメインマシンとしてMacBook Pro 13" 2018 を購入しました。
せっかくなのでセットアップでやったことをメモしておきます。
やったこと
- トラックパッド設定に全てチェックを入れる
- トラックパッドカーソルスピードを最速に設定
- App Storeで最新にアップデート
- Chromeインストール
- ログインしてブックマークや拡張などの設定を同期
- ShiftItインストール
- Dockの表示/非表示を有効化
- Karabiner-Elementsインストール
- 日本語向けの設定をImportして左右のコマンドキーを英数かなボタンに変更した
- 左ControlキーとCaps Lockキーを入れ換え
- Clipyをインストール
- バッテリー表示の「割合を表示する」を有効化
- 日付と時刻表示の「秒を表示」「時刻内の":"を点滅する」「日付を表示」にチェックを入れる
- App StoreからLINEをインストール
- 3本指ドラッグの有効化
- キーリピートの速度を最速に設定、リピート入力認識までの時間を最短に設定
- iTerm2をインストール
- Xcodeをインストール。CLIも。
- Homebrewのインストールの必須条件
- Homebrewをインストール
- fish shellとかgitとかgoとか適当に入れとく。後でも良い。
- iStat Menusをインストール
- JetBrains Toolboxをインストールし、IntelliJ IDEA Ultimateをインストール
- キーボードショートカットを変更して、Ctrl+DをDeleteに割り当てる
- Visual Studio Codeをインストール
- Dropbox Appをインストール
- Adobe Creative Cloudをインストール
- Adobeアカウントでログインしてダウンロード&インストール
システム環境設定>共有>コンピューター名
を変更- Contextsをインストール
- Ctrl + spaceの検索を無効化(IDEの補完とかぶる)
- 環境設定>キーボード>ショートカット で「前の入力ソースを選択」に Ctrl + spaceが割り当てられているのでチェックをはずす
iTermを入れたりHomebrewを入れたり色々やることが残ってるけど一旦これで最低限かな。
ひとまずここまで。 何か設定したら追記するかも。
新しいMacBook Proの所感
まだ重い作業をしてないのですが、最新のキーボードは軽いタッチで入力できてかなり良いです。 トラックパッドも大きくなっていて使いやすいです。 Touch Barはまだ使い込んでないのでなんとも言えませんが、Touch IDは最高です。 あと、13インチというサイズは軽くて取り回しがしやすく非常に良いです。 USB Type-Cについてもこれから使ってみないとなんともいえません。 YouTubeで音楽を再生してみるとかなり音質が良いように感じました。低音もモリモリ出ます。 7年ぶりの新マシンなのでいろんなところがアップデートされていてかなり良さげです。
Week 3,4 振り返り
リーンゲインズっぽい感じで中途半端に朝飯を抜き始めた。良くないかもだが体重を見ながら様子見。
飲み会が相変わらず多い。飲むのはともかく、飲んだたら食べてしまうのを制御できるようにしたい。飲みつつ。
ジム再開した。
ジム行く習慣化をしていく。
- 胸、背中、足、で週3回。できるだけ平日に月火水で行く。木金は行けたら肩とか腹筋とかやる。
- 1日あけるとかやってるとすぐ目標達成できなくなりそうなので週頭に詰めてしまう。
- 3日いけたら木金はフリー、というのが報酬。もちろんジムに行っても良い。
Week 2 振り返り
飲み会が多く、かつ運動もしなかったので体重キープ〜微増ぐらい。
飲み会減らすか・・・ あと運動・・・
運動習慣が無くなりつつあるので、1回あたりのトレーニングをめちゃくちゃ減らして毎日ジムに行くようにしてみる。
そもそもWeek 2の振り返りが遅れまくってしまった。反省。