自分の手を動かし自分の頭で考えるということ

仕事の関係で自分が今までやったことがないことをやることになってしかもそれが新しめのことだったりすると新鮮で面白いわけですね。
で、自分なりにその技術をいろいろ調べたりしているうちにその界隈で著名な人が誰だかわかってきてTwitterでフォローしたりブログをウオッチしたりするようになります。
活発なコミュニティがあるのであれば勉強会にも顔をだして発表を聞いたり場合によっては著名な人と会話する機会もあるかもしれません。

こうしていろいろな情報を得るようになってきます。これはこれで楽しいのですが、ちょっと危うさもあるなあと最近思うようになってきました。

どういうことかというと、著名な人と会話しただけでオレつえー感を味わってしまう可能性があるからです。というか僕がそうでした。
当人はたいしたこと無いのにその著名な人がすごいからその知り合い?であるオレもすげえんだみたいに思ってしまうことです。
言うまでもないですが著名な人には何の罪も無いです。
あと話を聞いただけで自分のなかで咀嚼できてないものにたいしても分かった気になる危険性があります。

例えば著名な人が「HDFSをファイルサーバーにする?そりゃないわー」とか言ったとして、僕がよくわかってないのに「そりゃたしかにないですよねー。ハハハー」とか言うのは簡単です。
どうして「ないわー」なのか理解できてないのに上辺だけ合わせて、著名人と技術的なディスカッション?してるオレかっこいいみたいになって他の人に対して上から目線になってしまうのは滑稽ですよね。


せっかくなのでHDFSをファイルサーバーにする件について僕が調べて理解した範囲を書いておきます。Hadooperじゃ無い人は無視してください。
HDFSはもともとMapReduceを実行するために最適化された特殊なファイルシステムです。汎用的なものじゃないです。デフォルトだとレプリカ数が3なので3つのレプリカを持ちます。
ただこのレプリカはMapReduceを実行するためにデータをばらまいているという意味なのでバックアップかというとちょっと違います。
レプリカがあるなら障害に強いと思うかもしれませんが、HDFS上のデータに対するメタデータを保持するNameNodeはSPOFなのでNameNodeが障害を起こしてメタデータがロストした場合はデータもロストします。
なのでNameNodeの冗長化対策を取るのが一般的です。DRDBでミラーリングするとかNFSに書くとかですね。そういう対策をしたとしてもNameNodeの信頼性はそんなに高くないというのが今のところの共通認識だと思います。
まあNameNodeがしょっちゅう障害起こすわけではないですが、そんなに信頼性も高くないのでファイルサーバーにするのはどうなのーって感じですね。

なのでAmazonのS3のような信頼性のあるストレージに元データをおいてそれを加工したものをHDFSに置いてMapReduceでごりごり処理をするっているのが一つの解のようです。HDFSはどちらかというとキャッシュですね。
ちなみに僕自身はS3使ったことないですw
こうすればHDFS上のデータがロストした場合でも元データから復旧できます。バックアップがS3で正ファイルがHDFSという状況ですね。バックアップというからには正ファイルよりも信頼性が高い場所に保存されている必要があります。バックアップのほうが先にロストする可能性があるのだと何のために取ってるんだって話です。別の例でいうとテープにデータをバックアップするのはシステムに置いてあるデータよりも信頼性が高いからですよね。誤削除対策という側面もありますが。ちなみにHDFSの誤削除対策はゴミ箱機能(fs.trash.interval)を使うことですね。

ただ復旧できるといっても復旧時間が膨大(例:1か月かかるとか)だとまた難しくなります。1TBぐらいまでならなんとかいけるかもですが、20TB,30TBの世界になってくると元データからの復旧も時間的に難しいものとなるでしょう。

あとデータ量が多くなるとそれを保存しておく場所が容量的にHDFSしかないというのはわりとよくあるシチュエーションです。
こういうケースだと元データのバックアップ先がHDFSしかなくなります。いろいろ難しいですねw


閑話休題

結局のところスキルというものは自分の手を動かして自分の頭で考えて身につけるしかないわけです。
本を読んだり発表を聞いたりしてインプットするのは大切なことですが、これって見聞を広めている状態なわけでまだ血肉化したスキルじゃないわけです。
血肉化したスキルじゃないものにたいして値札がつくかというと疑問です。

もちろんインプットが無ければアウトプットもできないわけでそのバランスが重要です。

インプットにまわすエネルギーが多いとアウトプットが手抜きになるし、インプットを絞り込むとアウトプットすべきマテリアルが不足してくるわけです。
(このセリフの元ネタは村上春樹訳のグレートギャツビーのあとがきです)

業務時間外でインプットしたりアウトプットしたりというのは時間的に難しいかもしれないので、やはり日頃の業務を通してインプットしたりアウトプットしたりというのが近道かなあと思います。
もちろんセキュリティ的な意味合いでアウトプットできないことも多々あると思うのでその辺は難しい問題ですね。

ただGitHubなりブログなりTwitterなり書籍なり発表なりパブリックな場でのアウトプットが無いとその人のスキルというのは判断しづらいですよね。
まあ外に出てこないけど優秀な人というのも沢山います。

僕の場合はそんなにアウトプットは多くないですが、最近思うのは「人は自分が期待するほど、ブログを見ていてはくれないが、がっかりするほど見ていなくはない」ということです。
ちなみにこのセリフの元ネタは「人は自分が期待するほど、自分を見ていてはくれないが、がっかりするほど見ていなくはない」という本から取ってます。

見ていてくれる人はたくさんではないかもしれませんが、意外にいるものです。