Quantcast
Channel: /var/log/laughingman7743.log
Browsing latest articles
Browse All 35 View Live

Playframework2.4 + Slick3.0で複数のデータベースに接続する

@NamedDatabaseアノテーションをつければ対応するDB名のDatabaseConfigProviderをDIしてくれます*1が、...

View Article



Elasticsearchに空間データを突っ込む

例のごとく国土交通省のデータをダウンロードしてきてElasticsearchに突っ込んで検索してみます。国土数値情報ダウンロードサービスGDALのドキュメント*1を参照するとogr2ogrコマンドでシェープファイルを直接Elasticsearchに投入できそうですが、...

View Article

Boto3でEMR

最近HiveでETL処理とかするためにEMRをよくさわっています。Boto3からクラスタ起動したりステップ追加したりしています。 Boto2だとクラスタ作成時にセキュリティグループの設定等をapi_paramsに追加する形になり非常にわかりにくいです。...

View Article

Redshift便利スクリプト

AWSLabsのGithubリポジトリにいろいろと便利なスクリプトがあります。日次でVacuum処理やAnalyze処理を夜間に走らせたいということで、 Analyze & Vacuum Schema Utility*1をAirflow*2で使いたいなと思いましたが、...

View Article

Kinesis + Lambdaの組み合わせが便利

fluentd*1で出力先をいろいろと追加するよりは、一旦Kinesisに突っ込んでLambdaで処理した方がいろいろと捗る感じがします。特に部署やチーム毎に欲しいログの形式、バケット、パスの切り方(時間単位 or 日単位 or サーバ単位 etc...)、出力先(S3、Kibana etc..)等が違ったりして、...

View Article


PythonでRequestsを使ったSlackのAttachments通知でハマった

以下のようにattachmentsの中身をjosn.dumpsしてやればOK。POST(application/x-www-form-urlencoded)で送っているので、ネストしたオブジェクトはJSON形式の文字列にする必要があります。 POSTでもContentTypeをapplication/jsonで、BodyをJSON形式で送るような形だと楽ですけどね。Enjoy!

View Article

AmazonECSデプロイスクリプトをPythonで再実装してみた

シェルスクリプト*1つらいってことでPythonで再実装してみました。基本的な使い方は変わらないです。(古いタスクが終了するまで待つとかなり時間がかかる場合があるので、forceフラグで新しいタスクのlastStatusがRUNNINGになったら古いタスクを強制的に止めるような処理もできるようにしてみました。この辺はサービススケジューラにまかせてしまったほうが無難な気が。。。)click*2を使うと...

View Article

AlpineLinuxでNorikraのDockerイメージ作ってみた

Norikra*1を手軽に使いたいってことでAlpineLinux*2でイメージ作ってみました。https://hub.docker.com/r/laughingman7743/docker-alpine-norikra/AlpineLinuxを使うとかなりイメージを小さくできて良いですね。それでも200MBぐらいありますが。。。Enjoy!*1:http://norikra.github.io/*...

View Article


EMR 4.4.0でJSON SerDe

HiveでJSON SerDeであれば rcongiu/Hive-JSON-Serde*1を使うのが一般的かと思われますが、 EMR 4.4.0からHCatalogが使えるようになっているので*2、 HCatalogのJSON SerDe*3を使うこともできます。 /usr/lib/hive-hcatalog/share/hcatalog/...

View Article


Docker環境でのre:dashのDBマイグレーション

re:dash*1のDBマイグレーションはfabricスクリプト*2が提供されていますが、fabricだとSSHする形になるのでDocker環境では都合が悪いです。 なんとかならないかなと適当にシェルスク書いてみました。envfile、現在のバージョン、マイグレーション先のバージョンを渡す形です。...

View Article

Docker-in-DockerできるJNLP用Jenkinsスレーブ

Docker内でSSHのデーモンは上げたくないし、Supervisorもインストールしたくないなということで、dindできるJNLP用Jenkinsスレーブのイメージつくてみました。 JenkinsオフィシャルのJNLP用スレーブ*1とdind*2を組み合わせただけですが。。。Alpine版Ubuntu版使い方は --privileged...

View Article

ELBのログをLambda、Norikra、Mackerelを使っていい感じに処理する

ELBが結構504を返したりしていたりするので、Lambda、Norikra、Mackerelを使ってモニタリングできるように処理してみました。S3 -> NorikraELBは適当に5分ぐらいの間隔でS3にログを出力するようにしておき、 S3のオブジェクト作成イベントをトリガに起動、Norikraに突っ込むLambdaを作成します。ELBのログフォーマット*1は...

View Article

Hive便利UDF

元ネタがJSONだったりするとリストやマップの処理でいろいろとつらいってことで、かゆいところに手が届くUDF詰め合わせ。かなり便利です。ありがたい。今日もETLバッチ処理でHive大活躍ですわ!Enjoy!

View Article


HiveでネストしたJSONデータのテーブルマッピング

HiveでJSONデータを処理する場合には、json_tuple*1や...

View Article

EMRでADD JARしたくない場合の対処法

HiveブートストラップアクションでJARを適当なディレクトリに配置し、hive-envの設定をしてやればADD JARしなくて良くなります。 (以下は /usr/lib/hive/plugin ディレクトリにJARを配置しています)PrestoPrestoにはそもそもADD...

View Article


Feedlyではてなブックマーク数が表示されなくなったので雑に直した

オリジナルは以下です。Feedly 移行記念、Feedly をはてブ対応させるユーザースクリプト – OTCHY.NETEnjoy!

View Article

Hiveでカレンダーテーブルを簡単に作る

集計処理でカレンダーテーブルがあると何かと便利なのでカレンダーテーブルを作りたいなと思ったのですが、HiveにはPostgreSQLのgenerate_seriesのような関数がない。。。...

View Article


PythonでAmazon Athenaにつなぐ

Amazon Athena*1への接続は現状JDBCしかサポートされていない。。。やっぱりPythonからつなぎたいですよね!PythonからJDBCでつなぐには、Py4J*2やJPype*3あたりを使うと良さそうですが、Py4JはJavaでGatewayServerを作成し、別プロセスで起動しなければならないので少しめんどくさいです。Jythonはちょっと。。。...

View Article

PythonからAmazon AthenaにJDBC接続するラッパー

暇を持て余していたので作ってみました。バージョン番号は諸事情により1.0.1となってしまいました。(心温かみのある手作業でのリリースはまずい。。。)既知の問題点Decimal型をフェッチすると落るドライバのバグのようです。フォーラムにも上がってました*1。クエリのキャンセルができないクラスファイルを見る限り、現在の実装だとクエリのキャンセルはできないっぽい。AthenaのJDBCドライバのライセンス...

View Article

S3DistCpをリモート実行したい

S3DistCp*1をよく使うのですが、 複数のS3DistCpを実行する場合、クラスタにステップを追加する形だと1ステップづつシーケンシャルに実行され、かなり待たされることになります。...

View Article

PyAthenaJDBCでRedashのクエリランナー書いてみた

redash-athena-proxy*1を使ってRedashからAthenaにクエリを投げれる環境を作っていたのですが、どうもtimestamp型やdate型の戻り値が日付として上手く認識しない。。。おそらくproxy側のGSONの日付型のシリアライズ設定の問題かと思われるのですが、調べるのだるい、proxyのような外部プログラムを別に立てるのやめたい、かつ自分で作ったライブラリ*2でクエリランナ...

View Article


Amazon AthenaのPythonクライアント書いた

AthenaがAPI/CLIに対応した*1ので boto3*2で少し使ってみたのですが、クエリ実行結果のパースが非常にめんどくさい。もっとカジュアルにクエリを投げたいなってことで、PEP249*3に準拠したクライアント書きました。使い方はJDBC版*4と変わらないです。コードもほとんど流用する形です。ポーリング中のリトライ処理は実装した方が良かったかも。。。...

View Article


AWS請求レポートをPyArrowでParquet+Snappyに変換する

AWSコストの可視化として、請求レポート*1をAthena*2でクエリを投げられる形式に変換して、Redash*3でダッシュボードを作成していたりします。...

View Article

PyAthenaでRedashのクエリランナー書いた

プルリクマージされました。ありがとうございます。これでカジュアルにAthenaにクエリ投げまくりですね。Enjoy!

View Article

BigQueryのデータセット管理ツール作った

BigQuery のデータセットも Terraform で管理*1ができるのですが、権限の管理に対応していない。。。ぶっちゃけ Terraform じゃなくて、もっとシンプルな形 (ステートファイルを持たず、設定ファイルのみ管理する形) で管理したいなと思い作ってみました。使い方は README 参照してください。Terraform 的なコマンドとなっています。YAMLファイルは GIT...

View Article


Amazon ECRのCLIツール作った

Dockerログインめんどくさいかつ、レジストリのURL長杉ってことでCLIツール作りました。便利!使い方は README参照してください。TODOプログレスバーの表示がおかしくなる。tqdm*1の使い方の問題かなと。Vacuumコマンドとして、CLIからオレオレライフサイクルポリシーでイメージを削除できるような実装。テスト😭Enjoy!*1:https://github.com/tqdm/tqdm

View Article

オレオレTerraform構成

もともとは同僚がシェルで書いていたラッパーです。シェルつらいかつ、CIが回せなかったのでPythonで書き直したものです。こういったのもこそGoで書くのが良さそうですね。Terraformつらいって感じが伝われば😩ラッパースクリプト自体はTerraformのコマンドとオプションを指定できるようにして、サブプロセスでTerraformを実行しているだけです。 ロールは...

View Article

CloudwatchLogsのデータをKinesisを経由して、LambdaでDatadogLogsに送る

DatadogLogsを使い始めていて、ECSのログをCloudwatchLogsにログを集約して経路を作ったりしています。 ログをいろいろな出力先に出し分けしたいのですが、CloudwatchLogsのサブスクリプションフィルタはなんと1つのロググループに1つしか付けれないです😇 *1出し分けをしたい場合は一旦Kinesisを経由して、KinesisからLambdaで出し分けすると良いです。...

View Article

Scalaで作るデータパイプライン

speakerdeck.com

View Article



Dataflow with Scala

speakerdeck.com

View Article
Browsing latest articles
Browse All 35 View Live




Latest Images