speakerdeck.com
speakerdeck.com
DatadogLogsを使い始めていて、ECSのログをCloudwatchLogsにログを集約して経路を作ったりしています。 ログをいろいろな出力先に出し分けしたいのですが、CloudwatchLogsのサブスクリプションフィルタはなんと1つのロググループに1つしか付けれないです *1 …
もともとは同僚がシェルで書いていたラッパーです。シェルつらいかつ、CIが回せなかったのでPythonで書き直したものです。 こういったのもこそGoで書くのが良さそうですね。Terraformつらいって感じが伝われば ラッパースクリプト自体はTerraformのコマンド…
Dockerログインめんどくさいかつ、レジストリのURL長杉ってことでCLIツール作りました。便利! 使い方は README 参照してください。 TODO プログレスバーの表示がおかしくなる。tqdm*1 の使い方の問題かなと。 Vacuumコマンドとして、CLIからオレオレライフ…
BigQuery のデータセットも Terraform で管理*1ができるのですが、権限の管理に対応していない。。。 ぶっちゃけ Terraform じゃなくて、もっとシンプルな形 (ステートファイルを持たず、設定ファイルのみ管理する形) で管理したいなと思い作ってみました。 …
プルリクマージされました。ありがとうございます。 これでカジュアルにAthenaにクエリ投げまくりですね。 Enjoy!
AWSコストの可視化として、請求レポート*1をAthena*2でクエリを投げられる形式に変換して、Redash*3でダッシュボードを作成していたりします。 元データがCSV+ZIPと非常に扱いにくい形式なのでCSV+GZIPに変換していたのですが、カラムナー形式に変換すると良…
AthenaがAPI/CLIに対応した*1ので boto3*2で少し使ってみたのですが、クエリ実行結果のパースが非常にめんどくさい。 もっとカジュアルにクエリを投げたいなってことで、PEP249*3に準拠したクライアント書きました。 使い方はJDBC版*4と変わらないです。コー…
redash-athena-proxy*1を使ってRedashからAthenaにクエリを投げれる環境を作っていたのですが、どうもtimestamp型やdate型の戻り値が日付として上手く認識しない。。。 おそらくproxy側のGSONの日付型のシリアライズ設定の問題かと思われるのですが、調べる…
S3DistCp*1をよく使うのですが、 複数のS3DistCpを実行する場合、クラスタにステップを追加する形だと1ステップづつシーケンシャルに実行され、かなり待たされることになります。 ステップを追加する形ではなく、SSHでリモート実行できると任意のタイミング…
暇を持て余していたので作ってみました。 バージョン番号は諸事情により1.0.1となってしまいました。(心温かみのある手作業でのリリースはまずい。。。) 既知の問題点 Decimal型をフェッチすると落る ドライバのバグのようです。フォーラムにも上がってまし…
Amazon Athena*1への接続は現状JDBCしかサポートされていない。。。やっぱりPythonからつなぎたいですよね! PythonからJDBCでつなぐには、Py4J*2やJPype*3あたりを使うと良さそうですが、Py4JはJavaでGatewayServerを作成し、別プロセスで起動しなければな…
集計処理でカレンダーテーブルがあると何かと便利なのでカレンダーテーブルを作りたいなと思ったのですが、HiveにはPostgreSQLのgenerate_seriesのような関数がない。。。 UDFなら作っている人がいそうな気がしたので調べてみると、Hivemall*1のUDFにgenerat…
オリジナルは以下です。 Feedly 移行記念、Feedly をはてブ対応させるユーザースクリプト – OTCHY.NET Enjoy!
Hive ブートストラップアクションでJARを適当なディレクトリに配置し、hive-envの設定をしてやればADD JARしなくて良くなります。 (以下は /usr/lib/hive/plugin ディレクトリにJARを配置しています) Presto PrestoにはそもそもADD JARはないので、JSONデー…
HiveでJSONデータを処理する場合には、json_tuple*1や get_json_object*2を使えば処理できますが、複雑なJSONだとクエリがカオスに。。。json_tupleやget_json_objectでがんばるよりも、struct型やarray型*3を使ったテーブル定義を作ってマッピングしてやる…
元ネタがJSONだったりするとリストやマップの処理でいろいろとつらいってことで、かゆいところに手が届くUDF詰め合わせ。かなり便利です。ありがたい。 今日もETLバッチ処理でHive大活躍ですわ! Enjoy!
ELBが結構504を返したりしていたりするので、Lambda、Norikra、Mackerelを使ってモニタリングできるように処理してみました。 S3 -> Norikra ELBは適当に5分ぐらいの間隔でS3にログを出力するようにしておき、 S3のオブジェクト作成イベントをトリガに起動、…
Docker内でSSHのデーモンは上げたくないし、Supervisorもインストールしたくないなということで、dindできるJNLP用Jenkinsスレーブのイメージつくてみました。 JenkinsオフィシャルのJNLP用スレーブ*1とdind*2を組み合わせただけですが。。。 Alpine版 Ubunt…
re:dash*1のDBマイグレーションはfabricスクリプト*2が提供されていますが、fabricだとSSHする形になるのでDocker環境では都合が悪いです。 なんとかならないかなと適当にシェルスク書いてみました。 envfile、現在のバージョン、マイグレーション先のバージ…
HiveでJSON SerDeであれば rcongiu/Hive-JSON-Serde*1 を使うのが一般的かと思われますが、 EMR 4.4.0からHCatalogが使えるようになっているので*2、 HCatalogのJSON SerDe*3を使うこともできます。 /usr/lib/hive-hcatalog/share/hcatalog/ 以下にJarがある…
Norikra*1を手軽に使いたいってことでAlpineLinux*2でイメージ作ってみました。 https://hub.docker.com/r/laughingman7743/docker-alpine-norikra/ AlpineLinuxを使うとかなりイメージを小さくできて良いですね。それでも200MBぐらいありますが。。。 Enjoy…
シェルスクリプト*1つらいってことでPythonで再実装してみました。基本的な使い方は変わらないです。(古いタスクが終了するまで待つとかなり時間がかかる場合があるので、forceフラグで新しいタスクのlastStatusがRUNNINGになったら古いタスクを強制的に止め…
以下のようにattachmentsの中身をjosn.dumpsしてやればOK。 POST(application/x-www-form-urlencoded)で送っているので、ネストしたオブジェクトはJSON形式の文字列にする必要があります。 POSTでもContentTypeをapplication/jsonで、BodyをJSON形式で送るよ…
fluentd*1で出力先をいろいろと追加するよりは、一旦Kinesisに突っ込んでLambdaで処理した方がいろいろと捗る感じがします。 特に部署やチーム毎に欲しいログの形式、バケット、パスの切り方(時間単位 or 日単位 or サーバ単位 etc...)、出力先(S3、Kibana e…
AWSLabsのGithubリポジトリにいろいろと便利なスクリプトがあります。 日次でVacuum処理やAnalyze処理を夜間に走らせたいということで、 Analyze & Vacuum Schema Utility*1をAirflow*2で使いたいなと思いましたが、 クラス化されていなかったり、ログがファ…
最近HiveでETL処理とかするためにEMRをよくさわっています。Boto3からクラスタ起動したりステップ追加したりしています。 Boto2だとクラスタ作成時にセキュリティグループの設定等をapi_paramsに追加する形になり非常にわかりにくいです。 Boto3だとJSONライ…
例のごとく国土交通省のデータをダウンロードしてきてElasticsearchに突っ込んで検索してみます。 国土数値情報ダウンロードサービス GDALのドキュメント*1を参照するとogr2ogrコマンドでシェープファイルを直接Elasticsearchに投入できそうですが、 マッピ…
@NamedDatabaseアノテーションをつければ対応するDB名のDatabaseConfigProviderをDIしてくれます*1が、 なんとなくDatabaseConfigProviderをDIしたくないなってことで、別の方法で実装してみた。 どちらにしてもPlay.currentに依存してるのであまり意味ない…