/home/by-natures/dev*

ソフトウェア開発者としての技術的なメモと、たまに普通の日記。

2019/06/24 PlantUML によるロバストネス図

ユースケース駆動開発の手法を実践しているのですが、ロバストネス図・シーケンス図・ドメインモデルと、とにかく「図」を作ることが多いです。これを簡易にしないと作業効率がとても悪いということで、調べたところ PlantUML というツールがありました。 同…

2019/06/19 Elastic Beanstalk の ALB の scaling trigger では RequestCount がうまく機能しない

Elastic Beanstalk では ALB を簡単に定義することができます。今構築しているアプリケーションでは、リクエストがシンプルかつ大量であるため、リクエスト数に応じてスケーリングさせようと思い、スケーリングトリガーのメトリクスで RequestCount を設定し…

2019/06/18 AWS ELB 配下の tomcat が X-Forwarded-For を取得できない? -> 解決しました

ロードバランサー配下のWebサーバは、ロードバランサーがもともとのクライアントのリクエスト情報を保持するために X-Forwarded- というHTTPヘッダを追加します。このリクエスト元の情報を保存するヘッダはただのデファクトスタンダードでしたが、今は RFC …

2019/06/12 Hive CLI のアーキテクチャ

hive CLI コマンドは非推奨で、今後は beeline 推奨(JDBC/Thrift で HiveServer2 へ接続)とのことですが、どうにも HiveServer2 は運用していて良い思い出がないので(私が利用している環境だと定期的に再起動しないと応答がなくなる。。)、最近あまり状…

2019/05/07

curl コマンドだけでレスポンスタイムの計測を色々行えるの知りませんでした。意外に多機能。 dev.to www.wagavulin.jp

2019/04/09 Java でのメモリチューニング

メモリチューニングを久々に。前回は OOM でアプリケーションが落ちる問題に対して調査したのですが、今回はマイナーGCが多発していました。 簡単な処理を大量にさばくアプリケーションなので基本的には Eden からすぐにメモリ解放されるオブジェクトばかり…

2019/04/05 ITP 2.1 対応, ElasticBeanstalk での tomcat 設定値書き換え

4月からオフィスが新しくなって、また一緒に働いていた人が退職したこともあり、労働環境が大きく変わりました。やることは増えましたが、やれることも増えそうなので案外楽しめています。開発リソースが足らず、一緒に働く方を増やしたいので色々と整備して…

2019/04/01 CORS

他サーバからアクセスしてもらうエンドポイントを追加したのですが、その際に CORS が必要だったので設定した際の記録です。 説明 medium.com dev.classmethod.jp Tomcat での対策 Tomcat なら web.xml のフィルタ機能で CORS 対策ができます。7系の途中から…

2019/03/28 Tomcat リリース備忘録

古いシステムのメンテナンスをする場面があり、Tomcat へ WAR ファイルをデプロイすることになりました。概念はなんとなく理解していたのですが Tomcat への実作業は初めてだったのでメモ。小さいシステムだったのでよかったですが、大きなシステムでドキュ…

2019/03/25 Avro と Protocol Buffers

オフィスが4月から移転するので、今週はバタバタしそうです。移転先では多くの部署が集約されるのですが、そのせいで人が多く、エレベータが長蛇の列・・・という噂もちらほら。駅からも遠いし少し憂鬱ですが、ランチする場所は増えそうなのでお昼は楽しみで…

2019/03/20 Glue の SparkSQL が直接 DataCatalog にアクセスできるようになりました

先日のアナウンスで、Glue Job から DataCatalog に直接アクセスできるようになりました。 「AWS Glue によって Apache Spark SQL クエリの実行が可能に」というリリースタイトルがやや誤解を招きそうですが、Spark SQL はもともと利用できたのですが、今ま…

2019/03/12 DynamicFrame の書き出し

Glue の書き出しは結局 "from_options" で Glue Job による DynamicFrame のデータ書き出し方法には書き出し方法がいくつかあって、 from_options を使っていたのですが、ふとドキュメントを見ていると from_catalog というメソッドが。 Glue Job を使う以上…

2019/03/06 AWS での ETL 方法 (Glue Job / Athena)、Glue での ETL 基盤構築事例

AWS などのクラウドサービスは多くのサービスが提供されているので、それを組み合わせるだけで目的のシステムが構築できるかというと、似たようなサービスがあってどちらを使うべきか判断に迷う場面も多く、調査に時間を要すると感じます。今は ETL 処理に何…

2019/02/27 Athena の結果を Parquet 形式で出力したい

今日は Athena でのクエリ結果の出力方法についてです。 ユースケースがハマるなら CTAS で、データサイズが小さいなら Python 側で処理して、そうでなければ現状は Athena を使うのは難しそうです。データの加工に Glue Job を使えば、SparkSQL を発行して …

2019/02/26 StepFunctions + Athena 動作の読み解き

昨日も少し触れましたが、StepFunctions から Athena を呼んで ETL 処理をさせたいと思っています。AWS の方に、以下のリポジトリが参考になると紹介していただきました: github.com 以下の図が動作概要図です: この図、一見分かったような気になりますが…

2019/02/25 AWS サーバレスアーキテクチャ諸々

先週から調べていたことの簡単なまとめです。 AWS SAM サーバレスアーキテクチャに適した形で CloudFormation を使えるようにする拡張です。SAM = Serverless Application Model。サンプルを動かしていたのですが、IAM の設定がどうしてもうまくいかずにひと…

2019/02/19 コンウェイの法則

AWS

2月頭に箱根に行って、「ガラスの森美術館」に行こうとしたら閉館しており、隣に建っている「星の王子さまミュージアム」に行きました。そこで買ってきた星の王子様を週末読み終えたのですが、意外なバッドエンド?に驚きました。王子様が自殺する経緯につい…

2019/02/15 Glue Job の同時実行数について

Glue Job から Spark ジョブを呼ぶことで、大規模データに対する ETL 処理をしたいなと思っているのですが、Glue Job に同時実行数の制限があることに気がつきました: docs.aws.amazon.com Glue Job にはテンプレート部分を記述して、実際に動かす SparkSQL…

2019/02/12 CloudFormation

先週末、都内でキャンプをしまして、インドアな自分としてはとてもアクティブな体験でした。たき火を見ながらぼーっと話をするのもよいものです。翌朝起きたら、キャンプ場一体が雪で真っ白だったことにも驚きました。新鮮な体験でした。 AWS での運用につい…

2019/02/06 DynamicFrame の出力スキーマを parquet-tools で確認

AWS Glue で書いた Parquet ファイルが Glue のデータカタログのスキーマと異なることが度々発生しているので、直接 Parquet ファイルのスキーマを確認できないか調べたところ、parquet-tools コマンドで確認できることがわかりました。 github.com mvn inst…

2019/02/05 AWS サービスにインストールされている boto3 のバージョン

AWS CodeCommit を利用して、Glue Job から CodeCommit からファイルを取得して集計処理をしたいなと思ったのですが、 get_file というメソッドが存在しないとエラーが起きてしまいました。 boto3.amazonaws.com GitHub の boto3 リポジトリを見ると get_fil…

2019/02/01 Parquet ファイルと Glue DataCatalog のスキーマ差異の問題など

AWS Glue と戯れる日々なのですが、SparkSQL の扱い方がわかったところでまたいくつか問題が。 Parquet とテーブルスキーマのフォーマット差異 S3 に書き出したファイルを Glue の DataCatalog を経由して Athena や Redshift から読み込もうとすると、Athen…

2019/01/22-23 AWS Glue Crawler が struct をカラムに持つテーブルに使いづらい

AWS

AWS Glue を色々と触っているのですが、どうにも正しい使い方がよく分からなくなってきました。 Glue Job で Parquet フォーマットで書き出して Athena から読み込みたいのですが、パーティションによってキー数が大きく異なる JSON 形式のカラムがあるため…

2019/01/15 Glue における SQL 中心アーキテクチャ ETL、他

昨日居酒屋で飲んでいたら(かぶら屋 美味しいです、おすすめ)、隣の席の人が UberEATS の使いすぎで他の方から怒られていました。僕の友人でも UberEATS や LINE デリマを良く使う人はいるので、別にいいんじゃないかなと思ったら、どうやら人はタクシーや…

2019/01/11

ご挨拶が遅れました、あけましておめでとうございます。 年の始まりはいつも不思議な出来事があって、今年はこういう感じなのか、と思うことがあります。今年は変わったことがちらほら周りで起きていて、変化の年になるのかもしれません。よい方向に変化する…

2019/01/11

ご挨拶が遅れました、あけましておめでとうございます。 年の始まりはいつも不思議な出来事があって、今年はこういう感じなのか、と思うことがあります。今年は変わったことがちらほら周りで起きていて、変化の年になるのかもしれません。よい方向に変化する…

2018/12/14 AWS Glue と Lambda Architecture

クリスマスの雰囲気が好きなのですがいかんせん寒くなってきて、出かけるのが億劫になってきました。インフルエンザも流行りだしたようなので、そろそろマスクをしなければいけない季節でしょうか。 今日は分散処理周りで調べ物をしていたので、読んだ記事を…

2018/12/13 (公式ブログより)AWS Kinesis を利用したリアルタイム+バッチ集計

Amazon Kinesis および Amazon Athena を使用して VPC ネットワークのトラフィックを分析および視覚化する AWS の公式ブログにて、以下の Kinesis と Athena を利用した分析基盤の例が紹介されていました: aws.amazon.com Athena のところは本質的ではない…

2018/12/11

Big Data Analytics Architectural Patterns and Best Practices re:Invent でのこの資料が、包括的で分かりやすかったのでメモ。(先日見かけて、今日見直そうとしたら見つけるのに時間がかかったので。。)データの温度などの概念も交えながら綺麗に図にま…

2018/12/07 Netflix のデータ分析基盤事例

来週土曜日、12月15日に JJUG CCC 2018 Fall が開催されます。 JJUG CCCは毎年2回、春と秋に開催する日本最大のJavaコミュニティイベントです。Java関連の技術や事例に関する良質なセッションが行われ、また異なる分野で活躍するJava技術者が一堂に会する場…