oranie's blog

旧:iをgに変えると・・・なんだっけ・・・

色んな会社さんの新人エンジニア研修まとめ

ちょうど今のチームに新卒メンバーが一人配属になり、「何からやっていこうかー」「今年の研修何教わった?」「今までどんな事やった事ある?」とか聞いている段階だった所にドワンゴさんの新卒研修の記事が流れてきたので、せっかくなので公開されている色んな会社さんの新人研修をメモっておく。なお、見たことがあるやつとか、ちょろっと調べてあくまでも自分と同じ職種に近いやつだけセレクトしているので、気の向いた人は「◯◯エンジニア編」とか作ると良いかもですね!
他社さんの充実したメニュー見ているだけじゃなくて、うちのチームの配属になったメンバーが「このチームに配属されて良かった」と思えるような事を僕もやらないとですね。

@okb_mさんのまとめブログ

Web系会社の新卒研修の内容をまとめた(自分の調べた範囲)
既に去年の段階で似たようなまとめを作られている人が。以下かぶっているのも結構あるので、そこはまあお察し下さい。

ドワンゴさん

ドワンゴのエンジニア新人研修2014
これがTLに流れてきたので個人まとめ作るきっかけになった。

pixivさん

非エンジニアの新卒にプログラミング研修を行いました
非エンジニアでここまでするんですね。逆にエンジニアでも非エンジニア職の研修とかするのかな。

ペパボさん

ペパボ新卒エンジニア研修 前編
ペパボ新卒エンジニア研修 後編
受講した人の書いた内容ですが、だからどういう所で詰まったとか受ける側の見方が分かりやすいですね。

id:shinsukuさんのブログより「>& STDOUT」

技術の進歩は「螺旋」である。 @t_wada さん社内講演
大変良いお話。

ワザノバ さんの記事 「Quora: 新しい社員の迎え方について」

Quora: 新しい社員の迎え方について
新卒に限らず新しいメンバーを迎えるときのお話。

[追記] 弊社の@79yuukiがやっている研修内容を追記しました。

Node.js で仕事をするための研修を実践してみた

[追記]はてブコメントで指摘貰い、我らがはてなさんのも追加

はてな教科書

適当なまとめ

とりあえず覚えている範囲の奴を思い出しながらググったりその途中で見つけたのを適当に上げておきました。
ツールの使い方とか基礎的な技術研修とかも仕事をする上では大事なんだけど、マインドについて特にみなさん色々と考えられていますね。各社さんとても充実していてそこはやっぱり文化であったり、新しく入る人が戦力になってくれるのがどれだけ大事なのかという事がカリキュラムに出ていたりと恥ずかしながら見ている僕が勉強になります。出来ることなら僕もこの研修受けてみたい。それにしても初めに覚える事が多くて今の人は大変ですね!

Nagiosで監視プラグインにhostgroupで定義しているホスト群のIPアドレスを一気に引数に入れる方法

やりたいこと

例えば10台のサーバでHTTPチェックをして「hostgroupに定義しているホストのうち、n台までNGはアラートはWARN、n台を超えたらCRIT」みたいな事をやりたい時に、監視プラグイン側にチェックする為のIPアドレスを引数に渡したいけど、service定義する箇所でコマンドの引数に全部のIPを書くとかはイケていないのでチラッと本を読んだら書いてあった。

方法

簡単に言うと

$HOSTADDRESS:<hostgroup名>:<デリミタ>$

というオンデマンドグループマクロという物を使えば実現出来る。

check_command    check_nagios_value_test!$HOSTADDRESS:linux_servers: $

こんな感じで定義すると、仮にlinux_serversにhost1,host2が設定されていれば、監視プラグイン側には

host1のIPアドレス host2のIPアドレス

という形で引数に入る。

以上です。

Cassandraでバッチ処理用のクラスタを作る為にsstableloderを使ってみた

まんまです。今までブログにこれで作れるらしいと書いておきながら試していなかったのでやってみた。
経緯としては元のクラスタは台数が多いので、スナップショットをコピーしてそれからあーだこーだわーわーぎゃーぎゃーするにはちょっと辛かったけど、コピー対象のデータは小さいデータだったので丁度いい機会だったのでやってみた。

まず使い方

  1. 流し込み先のクラスタを作成する。
  2. 流し込むデータと同じkeyspace、columnfamilyのスキーマを設定する
  3. sstableloderを使って流し込む

という手順になる。

気をつける所

sstableloderと流し込み先のVerは一致させる必要がある。これはsstableloderが流し込み先のクラスタに接続する際、nodetool ringに相当する処理を実行してクラスタのノード情報(token情報)を取得するが、sstableloderが1.2系、クラスタが1.1系だとnodetool ring自体の処理(この辺はまだ調べていない)が変更されている為にエラーになってしまった。

使い方としてはdatastaxのドキュメント(http://www.datastax.com/dev/blog/bulk-loading)にも載っているが

/usr/local/cassandra/bin/sstableloader -d 192.168.0.1(初回接続先ノード。このノードに接続してringを実行して実際に流し込むnode情報を取得する。「,」区切りで複数指定可能) keyspace/column_family

となるようにしなければいけない。その為、ディレクトリ構造もこれが実行出来るように

/data/keyspace/column_family/sstableファイル群

というような構造にしておき、一度cd /dataをして上記のkeyspace/column_familyという文字列でディレクトリ構造を指定出来るようにしなければいけない。

実際に流し込んだ所、3台のクラスタ(レプリカファクター3)に流し込んだ時で大体20MB/secという速度だった。で、いくつか並列にsstableloderを実行しても合算したスループットは変わらなかった。これは流し込み先クラスタの書き込み限界に達してしまったと思う。(細かいプロファイリングしていないから憶測)

また使った時にbashでfor文でぐるぐる回していると、たまにconnection redusedなどのexeptionが発生した。理由はさっぱり分かっていない。ログから失敗したデータを手動で流し込むと全く問題が無いのでなんでなんや。

こちらからは以上です。

JVM Operation Casual Talksで喋ってきました。

タイトルまんま。主催のtagomorisさん、同じく登壇者の皆様、話を聞いて頂いた皆様、会場運営のLINEの皆様ありがとうございました。
僕はCassandra Casualの時にもチョロチョロ話をした物をベースに「Cassandra運用で実施しているJVM監視について」という内容でスピーカーをさせて頂きました。発表する際はGrowlを有効にすると面白くないスライドでもみんなが面白い感じにしてくれるので、スピーカーをする人は必ずGrowlを有効にしましょう。スライドの後半は若干Cassandraに寄りすぎている所とかがあって、JVMの話からはちょっと脱線している所がありイベントの趣旨から若干アレな感じになっていたので反省です。資料はこちら。

他の方の発表を聞いてGC周りをみんなわかりやすく解説してくれてもっと早く聞きたかったり、G1GCの特徴とかが知れてよかったです。CassandraにG1GCが有効かは試してみないと分からないのでそのうちやってみようと思います。
僕は完全に「JVM上で動作するデータストアを運用する人」というポジションなので、アプリ開発の人とは若干考え方が違ったり
するのが色んな人の発表やパネルディスカッションを聞いて整理されてスッキリ出来て良かったです。

あと、とりあえず何かを説明する時に喩え話でみんな「CassandraやHBaseでは・・・」って言っていたので、多分IT企業の1/3くらいはCassandraユーザーの可能性がありますね。是非今度はCassandraユーザーで集まってCassandra Casualやりたいです。そして僕に色々教えて欲しいです。

最後に懇親会でJVMの辛い事や難しい所をみんなで言いまくっていた時に@kamipoさんが「なんでこいつらそんな辛い思いをしてまで使うんだろう?MySQLとか使えばええやん。」って生温かい目でぼくらを見守ってくれていた事を報告致します。

Cassandraの情報集める時に良く見るものメモ

最近「ついに実運用段階に入った」と言われてTwitter上でも一部で騒がしいCassandraですが、日本語の情報があまり無いのでググったりしても「※この情報はVer0.8の時です」とか書かれていて、今2.1系ベータが出る時代なので全く参考にならないとかお困りの方も多いのでは無いでしょうか。

以下のリンク集はググったら5分位ですぐ見つかる様なサイトばかりですがメモです。

The Apache Cassandra Project

http://cassandra.apache.org/
プロジェクト自体のオフィシャルサイト。まずはここを読みましょう。とりあえず触る人は「GettingStarted」くらいは読んでおくと良いんじゃないでしょうか。

DataStax

http://www.datastax.com/
Cassandraと言えばDataStax社と言っても過言じゃないレベルなので、情報量とかたっぷりです。どっちかというとオフィシャルのサイトよりこっちを見る。運用している場合は該当Verのドキュメントをブクマしましょう。確実に死ぬほど読みます。
運用ツールとして大事なopscenterとかもここからdownload出来ます。Cassandra自体は有料のEnterprise Editionもですが、無料版のComunity Editionの配布もしている。

DataStax Tech Blog

http://www.datastax.com/dev/blog
開発者向けとかリリース情報とか載っているのでRSS登録して読みましょう。

Planet Cassandra

http://planetcassandra.org/
事例ドキュメントとか色々載っています。ドキュメントはDataStax社へのリンクだけだったりしますが。僕が若干ここのサイトの立ち位置がユーザー会的ななのかどうかが分かっていない。ちなみにCassandraを「C*」って略すのはもちろんみんな知っているよね?僕は初めCassandraの事を調べてこのサイト読んだ時に「なにこの記号?」ってずっと思っていた。

CassadraのGithub

https://github.com/apache/cassandra
ソース自体は落として読まないとファイル多すぎて無理ゲーですが、リリースに関連する
https://github.com/apache/cassandra/blob/trunk/CHANGES.txt
https://github.com/apache/cassandra/blob/trunk/NEWS.txt
は逆に毎回ソース落として読むのはアレなので、こっちで見ています。どのVerでどのBugFixされたかとかは重要ですね。

Cassandra - ASF JIRA

https://issues.apache.org/jira/browse/CASSANDRA/?selectedTab=com.atlassian.jira.jira-projects-plugin:summary-panel
上記のGithubでCHANGES.txtなどでBug情報が分かったら詳細見るときに。

The Netflix Tech Blog

http://techblog.netflix.com/
エンジニアはみんなだいすきNetflix先生のブログ。Cassandraだけじゃなくて色々勉強になる情報が。

有名ドコロのサイトだとこんな物でしょうか。英語ばかりで生きているのが辛くなりますね!!

Twitterアカウントとか

Twitterアカウントで言うと色んな開発者の方がいらっしゃるのでこの人!みたいなのは僕レベルではレコメンドできませんが(英語全然分からないし)自分がフォローをしている中で一部あげさせて貰うと(以下敬称略)
@
Cassandra Projectのオフィシャルアカウント(のはず)
@
PlanetCassandraのアカウント
‏@
DataStaxさんの公式アカウント
@
DataStaxのCTOさん。つまりそういう事だ。

@
Cassandra開発者の一人でこの間日本にも来ていた。大変特徴的なヒゲで、一緒に写真撮ってもらって嬉しかった。
http://thelastpickle.com/index.html
Cassandraを利用したシステムのコンサルティングとかされている様子。

@
DataStaxの方でデータモデリング系の講演に良く出ている。slideshareにも資料一杯上がっている。

@
Datastaxの方でCassadraで唯一の日本人コミッター。いつもお世話になっております・・・。

この方たちをフォローして情報見ておくと良いことがあるんじゃないでしょうか。

こちらからは以上です。

CassandraのVer upを検討する際に手順確認で見るもの

今1.2.13を検証していたが、このタイミングでDataStax Enterprise 4.0がリリースされました。
http://www.datastax.com/2014/02/welcome-to-datastax-enterprise-4-0-and-opscenter-4-1
で、このVerからCassandraが1.2系から2.0系に変わるという結構ダイナミックな変更が入っていたので、今検証している1.2.13が2.0系へupgradeするのに1.1系から1.2系にupgradeするようにupgradesstable等の手順が必要か確認していた時に、またも@yukimさんに教えて貰いました。本当にいつもありがとうございます・・・。

結論としては通常のローリングアップデートを繰り返せばOK。

今後upgradeする際の手順を確認するのに頂いた内容をそのまま引用させて戴くと
「Upgradeの際は NEWS.txt
https://github.com/apache/cassandra/blob/cassandra-1.2/NEWS.txt
を確認していただくとよいと思います。
Upgradeに必要な特別な手順があれば記載されるようになっています。

SSTableのバージョン毎の違いは、今のところこちらのソースを見ていただくと一覧で載っていたりします。
https://github.com/apache/cassandra/blob/cassandra-1.2/src/java/org/apache/cassandra/io/sstable/Descriptor.java#L69
との事で、確認すると1.2.13 -> 1.2.15はローリングアップデートで問題無しでした。で、1.2系から2.0系に行くには
http://www.datastax.com/documentation/upgrade/doc/upgrade/cassandra/upgradeC_c.html
辺りを見ると記述されている様に

Upgrade to Cassandra 1.2.15 or later before upgrading to Cassandra 2.0.5. 
Cassandra 2.0.5 is not network- or SSTable-compatible with versions older than 1.2.15.
 If you want to perform a rolling restart, first upgrade the entire cluster to 1.2.15, and then to 2.0

との事でした。

なので、1.2.13を使う場合で後で2.0系にupgradeしたくなった場合は、1.2.13 -> 1.2.15 -> 2.0.5のような形でupgradeをする必要があるというメモ。