読者です 読者をやめる 読者になる 読者になる

woshidan's loose leaf

ぼんやり勉強しています。

最近の知見 20150629

勉強してないわけじゃなくて、先月より大分自分のペースで過ごせてます。

ただ、Mementoパターンがfluxっぽくない?って思って記事書こうとして、 風呂敷広がりすぎて書けなくなってるだけです。

まだなじみのあるディスパッチャくらいにしとけや。

ディスパッチャはfacadeかもしれないけど...。

今日はloose leafっぽく書きます。

内容

  • 経験的知見
  • あとで読みたいbircolage
  • Hadoopとは

経験的知見

他のサービスのエンジニアの人と話していた時の知見。

外部APIのレスポンスが後から通知の形で来るのをローカルで試したいとき、その外部から来る通知のリクエストを模倣したHTTPリクエストを投げるrakeタスク書いちゃえば、テストがお手軽で良い

APIの仕様をちゃんと理解してないと大こけするけれど知見。

内部のサービス間でAPIを叩くクライアントを修正していた時の知見

開発環境で立ち上げた時は、つながらないHTTPリクエスト出すより、dryrunみたいな形で、レスポンスの見本値返して欲しい

ていうか、毎回理由無しに開発環境でHTTPリクエスト飛ぶのはひよる。

バリデーションが無いとナナメ上の形のセキュリティリスクが起こる事が...

外部からやってくる値は信じない!

たとえ、ユーザの端末からであってもだ!

この辺、iOSとかモバイルの知見がなさすぎて調査すらままならぬでござるよ...。

クエリの最適化の前にページネーションの導入の方が気持ちが楽だし、それで十分な事がある

工数かけなくてもいいことにかけない選択肢を取れるのも大事。

本質的に絡まっている部分にがっつり取り組むためのmaxの選択肢を広げる方が、個人的な能力のバランスとしては優先していきたい気持ちがあるが。

あとで読みたいbircolage

aamine/bricolage · GitHub

巨大なバッチを分割して構成する 〜SQLバッチフレームワークBricolage〜 - クックパッド開発者ブログ

エラー処理弱いので、処理の種類事の発生しているエラーや、エラーハンドリングについてまとめたい。

とりあえず、

そこでBricolageでは「ジョブクラス」という仕組みを使ってこれらを生成します。ジョブクラスは、ジョブで実行されるSQL文のテンプレートです。 ...

の辺り、

ジョブクラスにはjobclassというパラメータやメソッド名、job名に関するバリデーションやエラーハンドリングを行うjobClassというクラスと、jobClass群としてjobclassディレクトリ以下におさめられた、各jobに対応するSQLを生成するための定数をクラス定数として保有しているクラス群がある

の方がしっくり来て、割と綺麗なテンプレートメソッドパターンな気がしたけれど、どうなんだろ、これ。

Hadoopって、大きなデータを扱う用のDBMSだと思ってるけど違うのか?

Hadoopとは

まず、アーキテクチャについて、Wikipediaから雑に引用

Hadoopは、以下の4つのモジュールによって構成されている。

HDFS

巨大なファイルを、ブロック単位に分割して保存・管理する。

そのとき、複数のノードにまたがる形になるようにする。ブロック毎に複数のノードに複製を補完しているので、データ管理サーバの構成にRAIDがあるが、それをソフトでやっているようなイメージ。

メタデータを管理するNameNodeと実データを管理するDataNodeがある。

DataNodeはスケールアウトやデータの複製が容易であったが、NameNodeは前は単一障害点だったらしい。

YARN

Hadoopクラスタのリソース管理、ジョブスケジューリング。

ジョブスケジューリング周り疎いからよく分からないんだけど、リソース管理、ジョブスケジューリングを担当するのが、ResourceManagerで割り当てられたタスクの実行がNodeManagerらしい。

ResourceManagerがよしなにタスクをNode単位に分ける => Node単位で処理を上手くやる(NodeManager) => Nodeごとにいい感じにデータ割り振ってあるから、並列処理で速い?(HDFSエライ)

という流れなんだろうか?

MapResource

ネットワーク負荷を抑えるため、可能な限り入力データを保持するDataNodeと同一ノードでタスクが実行されるようにマッピングする...

まず前提として、ノードにはデータ保持領域とタスク実行領域があるんかい?

ってのと、

これがないとDataNodeのサーバからのデータ転送多発ってこと?

思ってたより、ネットワークに分散した巨大なファイル(CSV, TSV)を管理するイメージが近くて、学校の先生が言ってた

ビッグデータとはエクセルで扱えないくらい大きいデータの事を言います

感出てきた。。