Treasure Dataを支える(中の人に必要な)技術

Treasure Data(以下、TD)に入社して早2週間が経ちました。

入社してから、平成14年度IPA未踏ユース第1期で同期でスーパークリエイタであった西田さんがTDで働いているのを知りました。MapReduceHadoopが登場した頃、「Googleを支える技術」という技術書*1でお世話になったのですが、いつの間にかTreasure Dataを支える人になっていたんですね*2

Googleを支える技術 ?巨大システムの内側の世界 (WEB+DB PRESSプラスシリーズ)

Googleを支える技術 ?巨大システムの内側の世界 (WEB+DB PRESSプラスシリーズ)

TDではおかげさまで結構なペースでお客さんが増えていて事業規模拡大に備えて幅広い職種で人材募集中です。今回はTDのバッグエンド側で働く人材に求められている技術やスキル(どのような人がフィットするのか)について、2週間働いて見えてきた部分を紹介します*3

TDのフロントエンドは米国のエンジニアによって開発されているのですが、バックエンド側の開発は多くの*4日本人が支えています。

バッグエンドの人材

バックエンド側には、主に①クラウドインフラやHadoopの運用担当のインフラエンジニアと②MPPデータベース/PlazmaDBなどの基盤システムの開発を行うソフトウェアエンジニア、③ FluentdEmbulk等のミドルウェア開発を行うエンジニアから構成されています*5*6

①のインフラエンジニアは更に、同期入社の@kamipoさんなどDevOps担当と、@ryu_kobayashiさんや@tagomorisさんなどHadoopインフラ運用担当*7に分かれます。

DevOps / Chef Server

Treasure Dataではクラウド計算資源の管理にHosted Chefを使っています。インフラエンジニアには、一般的なサーバ運用や関係データベース(MySQL/PostgreSQL)の知識に加えて、AWSの運用ノウハウ、Chefあるいは類似のDevOpsの知識*8が求められます。

ソフトウェアエンジニアにも開発やテスト時にChefの知識が求められますので、TDに入ってから私も以下の本で勉強を始めました。

Chef実践入門 ~コードによるインフラ構成の自動化 (WEB+DB PRESS plus)

Chef実践入門 ~コードによるインフラ構成の自動化 (WEB+DB PRESS plus)

入門Chef Solo - Infrastructure as Code

入門Chef Solo - Infrastructure as Code

Amazon AWSは特にEC2、S3、VPCを利用した開発に慣れているとスムーズかと思いますが、すぐに慣れるのでオンプレミスでもサーバ運用経験やネットワークの知識があれば特に支障はないと思います。

クラウドAMAZON EC2/S3のすべて (ITpro BOOKs)

クラウドAMAZON EC2/S3のすべて (ITpro BOOKs)

Hadoop / Hive

Hadoop-as-a-Serviceを提供している企業ですので、Hadoopへの理解はあることが必要です。 ただ、Hadoop/Hiveにはかなり手を加えており、HDFSは全く利用しない構成となっていることから、一般的なHadoopクラスタの運用経験などはそれ程重要ではないかもしれません。それよりも、PlazmaDB等、TDのレガシーなコード資産を読み込んで理解して改善を行ったり、新機能を追加しChefのレシピを書くなどする適応力や柔軟性が求められていると思います。

もちろん、HadoopについてTom Whiteの象本は一度読んで基本的な動作について理解していると良いと思います。プログラミングHiveはHiveQLのSQL拡張やUDF等の拡張方法が記述されているので、Apache Hiveを扱う場合に参考になります。

Hadoop 第3版

Hadoop 第3版

プログラミング Hive

プログラミング Hive

Git / Github

TDはGithub Enterpriseを契約しており、プライベートレポジトリを含めて開発コードは全てGithubで管理しています。Gitの操作知識は既にみなさんお持ちかと思いますが、TDの全ての開発者に必須の技術です。

Git flowほどきっちりとした運用はしていませんが、Git flowGithub flowなど、Gitの開発プロセスへの理解ももちろん必要です。

GitHub実践入門 ~Pull Requestによる開発の変革 (WEB+DB PRESS plus)

GitHub実践入門 ~Pull Requestによる開発の変革 (WEB+DB PRESS plus)

なお、Githubで自分のコードを公開されている方、そのコードに多くのスターがついている方は採用時に評価される項目です。Githubにアカウントもないって人はちょっと文化的にも合わないかもしれません。

Strong Ruby (Python) or Java Programming Skill

EmbulkやFluentd、DataDog等を利用したデータモニタリングなどにはRubyが利用されています。性能を求めるところはJavaを利用しています。将来的にはJava 8が主に使われていくと思います。ワークロフロー管理には、現在のところLuigiが利用されていますので、必須ではありませんが、Pythonを書けると良いです。

また、Amazon S3やデータモニタリングツールでHTTP REST APIスタイルのAPIも多いのでREST APIプログラミングにも慣れているとよいかもしれません。

例えば、インフラエンジニアの山下さんはTDで使っているメトリクス収集用のクラウドサービスDatadogのクライアントを書いていますが、この辺の外部のクラウドサービスは大抵REST APIのようです。

Javaプログラマーなら習得しておきたい Java SE 8 実践プログラミング

Javaプログラマーなら習得しておきたい Java SE 8 実践プログラミング

MySQL / PostgersSQL

TDではAmazon RDSをメタデータの管理やJobのキューイングに使っておりますが、直のMySQL/PostgreSQLに比べてRDSには機能面や外部ツールとの接続性などで制約もあるので、直にMySQLPostgreSQLを利用することも検討しています。

ただ、自分たちで運用するには人手がまだ足りていないこともあり、これらの運用知識、特にDRBDを利用した可用性の高い運用やレプリケーション周りの知識*9があるとたぶん重宝されます。

エキスパートのためのMySQL[運用+管理]トラブルシューティングガイド

エキスパートのためのMySQL[運用+管理]トラブルシューティングガイド

英語の読み書き & 英会話

Treasure Dataの社内コミュニケーションや内部ドキュメントは英語ですから、英語力は必須です。 エンジニアもみなさんも各自、RareJobやLangrichで英会話を勉強しているようです。

TOEICとかで点数のとる英語能力というかプラクティカルな英語が必要です*10

TDでは新人さんは二週間ぐらい入社した後にシリコンバレーの本社に赴任することになっていて、私と @kamipoさんも来月行きます。@tagomorisさんが書いているようにAirnbで現地の方の家を借りることになりますので、英語のコミュニケーション能力が必要です*11

並列データベース

@taroleoさんなどPrestoのTD specificな改造を行っているMPPチームだとJavaプログラミングと深いデータベースへの理解が求められます。通常の関係データベースの利用知識ではなく、並列(MPP)データベースやMapReduceあるいはDAG形式の実行モデルなどへの深い知識も求められます。

並列データベースのよい教科書や技術書はないのですが、本として出版されているものですと、下記のものが一番良いかもしれません。残念ながら、現在Amazon JPからは買えないようです。目次はここで確認できます。

その他では、以前私が筑波大などで行った講義資料や並列DBの研究をしている山田さんが連載予定のこの記事が参考になるはずです。

さいごに

どこでもそうかもしれませんが、XXXに関して第一人者である、XXXに関する知識は誰にも負けないというような専門性を持っていて、自らトレジャーデータのサービスを改善していくような人は歓迎されます。

Sales Engineerやサポートエンジニアはまた違った要件となりますので、こちらの記事も参照ください。

TDでの機械学習のサービス化に伴い機械学習の分散処理の実装ができる方、またKaggle等のデータサイエンスコンペで上位入賞の経験があり、機械学習の細かなテクニックに長けたデータサイエンティストも別途募集していますので、興味がある方はお気軽にDMなり下さい。

*1:よく書けていて、当時、Googleの新人もこれを読んでそのインフラを学んだとかなんとか。

*2:古橋くん含め、TDには、私の把握している限りではIPA未踏のスーパークリエイタが3人います。

*3:私なりの理解で書いているのでTreasure Dataで働くことに興味の持った方は人材募集をよく読んでapply下さい。

*4:といっても、バッグエンド側はかなり少数精鋭部隊です。

*5:結構境界は曖昧で古橋くんとかみたいに全部関わる人もいます。Devopsの運用は専任ですが、他のエンジニアもDevOpsは使います。

*6:なお、私がTDに加入してからですが、機械学習データマイニング等のサービス化にも力を入れ出していて、Machine Learning-as-a-Service(MLaaS)の研究開発に関わる人材も募集しています。

*7:純粋に運用だけではなくて、マルチテナント運用時に発覚したHadoop/Hiveのバグ修正なども行います。

*8:なお、Hosted Chefを利用しているのでChef Soloではなく、Chef Serverの利用経験があると良いです。

*9:Pacemaker+DRBD+heartbeatでMySQLクラスタ http://qiita.com/fetaro/items/9a836ed0922c82f53a25

*10:ちなみに、TOEIC本はTOEIC Test 「正解」が見える【増補改訂第2版】という本がおすすめです。テスト前にちょっと読むと50点ぐらいは上がりました。

*11:何度か海外で発表したり赴任経験のある研究者なら問題ないと思いますが、あまり海外出張の機会がなかったエンジニアだと苦労する人もいるようです。サンノゼ空港ならばタクるがSFOからだとタクシーはかなりリッチなので、私ならSuperShuttleかなぁ。