サイバーエージェントを支える技術者たち

第28回秋葉原に集結した技術者集団Ameba Technology Laboratoryの役割を探る[前編]

2011年4月1日、サイバーエージェントは秋葉原ダイビル内に新たなオフィスとして「秋葉原オフィス」を開設しました。この新しいオフィスには、⁠Ameba Technology Laboratory」⁠以下、ラボ)という、特にデータ解析やデータマイニングなどを専門とするエンジニアが集まった組織が在籍しています。ここではどういった取り組みが行われているのか、実際に在籍するエンジニアの方々に直接お話を伺いました。

サイバーエージェントが秋葉原に新オフィスを設立

「秋葉原をIT産業の世界的拠点にする」という掛け声の下に始まった秋葉原再開発で、新たなビジネスエリアとして誕生したのが秋葉原クロスフィールドです。この地に建設された秋葉原ダイビルと秋葉原UDXの2つの超高層ビルには、多くのIT関連企業がオフィスを立ち上げています。

アメーバピグなどを運営するサイバーエージェントも、秋葉原ダイビル内にエンジニアのための新オフィス「秋葉原オフィス」を開設しました。このオフィスには、データ解析やデータマイニング、自然言語処理、機械学習などを専門とする研究開発エンジニア、そして分散システムや検索、画像処理などに携わるエンジニアが在籍しています。また、PC用パーツを扱うショップが軒を連ね、ハードウェアの調達が容易な秋葉原という立地を活かし、ハードウェアの検証や新サービスのテスト運用などを行う環境や設備も整えられています。

サイバーエージェントの研究開発部門としてのラボの役割について、ラボ研究室長である福田一郎氏は次のように説明します。

福田一郎氏
福田一郎氏

「ラボの業務は、ログ解析基盤、検索システム、機械学習という3つの開発と運用になります。この3つに共通しているのは、大規模なデータを扱っている点です。たとえばログ解析ではそれぞれのサービスから出力される大量のログを扱う必要がありますし、検索システムは膨大な数が投稿されるブログの記事を対象にしています。もう1つの機械学習は、収集された大量のデータ解析と応用によって実現されています。最終的な目的は異なりますが、同じように大規模データを扱うのであれば一緒に開発したほうが効率的ではないかということで、ラボを部署として立ち上げました」⁠福田氏)

ラボ設立のきっかけは、2010年8月にインターンとして働いていた学生エンジニアに、大規模データ処理に関する課題を与えたことでした。

「インターンとしてサイバーエージェントに来ていた学生に、Hadoopや機械学習などについて取り組んでもらっていました。このインターンが終わった打ち上げのときに、その学生がサイバーエージェントに入社して大規模データを扱うような開発がしたいと言っていたんですね。僕らとしても、今後はそういう方向性を突き詰めていく必要があるんじゃないかと考えていて、それなら専門の部署を作ろうということでラボができたわけです」⁠福田氏)

ちなみに、秋葉原にオフィスを作ることになったのも、そのときの会話がきっかけだったと言います。

「その席で、冗談半分で『秋葉原だったら、そういう部署を作ってもいいですよ』と話していたんです。それを聞いた社内の人間も『それはいいね!』と賛成してくれていたのですが、酒席での話だったので冗談だと思っていたのです。ただ翌日、アメリカにいたCTOの佐藤真人から『秋葉原の件だけど、結局どうなったの』と連絡があり、これは本気だということで急いで物件を探すことになりました」⁠福田氏)

フランクな場での会話から秋葉原でのオフィス開設という大きなプロジェクトが動き始めたというお話には驚きました。また、秋葉原という場所を選んだ理由は、福田氏とCTOの佐藤氏の双方が秋葉原好きだったからと言います。これらのエピソードは、サイバーエージェントの社風をよく表していると言えるのではないでしょうか。

大規模データ解析を担う「Patriot」のしくみ

現在、ITの新たなトレンドとして注目を集めているのが「ビッグデータ」です。Webサービスにおけるユーザの行動履歴やECサイトの購買履歴、あるいはソーシャルメディアに投稿されるユーザのメッセージなど、世界中で日々大量のデータが生成されています。ただ、従来はこうしたデータが有効に活用されているとは言えませんでした。あまりにデータ量が大きく、それを現実的なコスト、あるいは時間で解析できる環境を構築することが容易ではなかったためです。

しかしハードウェア性能の向上や並列処理技術の発展により、大規模データを解析するための環境が徐々に整い始めます。そうした中で登場したのが、大規模分散処理基盤である「Hadoop」でした。

Hadoopにはさまざまな魅力がありますが、その中でも大きいのは、特別なハードウェアを使うことなく、テラバイト、あるいはペタバイトという大規模データを処理できることでしょう。これにより、従来活用されているとは言いにくかった大規模データを解析し、ビジネスに役立てることが可能になったわけです。

サイバーエージェントにおけるHadoopの使用実績としては、アメーバピグやその海外版であるAmeba Picoにおけるログ解析が挙げられます。それまでサイバーエージェントでは、サービスごとに独自の解析が行われていましたが、効率を考えればこれらの処理は当然集約すべきです。

またログ解析には、データの肥大化やエンジニアのリソース不足といった課題もありました。こうした問題に対応するべく、福田氏やラボの鈴木俊裕氏がログ解析基盤の開発を提案したところ、それが認められて、現在はラボで開発・運用が行われているというわけです。

鈴木俊裕氏
鈴木俊裕氏

このログ解析基盤の目的は、Amebaサービス全体の統合的な現状把握と未来予測、各サービスのデータの集約、そしてサービス開発支援です。これらの目的を達成するため、Hadoop独自のファイルシステムである「HDFS」Hadoop Distributed File Systemや、Hadoopに対してSQLライクな言語でクエリを発行できる「Hive」などを使った独自のログ解析基盤が開発されました。Hadoopのディストリビューションとしては「CDH」Cloudera's Distribution for Hadoopを使っています。なお、集計結果を表示するために独自Web UIが開発されているほか、アドホックな集計と解析のためにGUIを使ってHadoopを操作できる「HUE」Hadoop User Experienceも利用されています。

このログ解析基盤には「Patriot」という名前が付けられており、現在は3番目のバージョンとなる「PAC3」の改修が行われているそうです。

「現在、ジョブの依存関係はPAC3を用いて管理しています。それまでは、ログの収集から解析まではシェルスクリプトとcronを使ったバッチ処理で実現していました。ただ、シェルとcronを使うと依存関係がうまく作れません。このため、1つの処理が止まるとすべて止まってしまうという状況でした。解析項目が増えてきたこともあり、シェルとcronを使ったバッチ処理では駄目だということになり、設定を簡便化するためにDSLDomain Specific Languageを開発しました。このDSLはインポート処理や解析項目のクエリ設定などを行うためのものです」⁠福田氏)

数千ものバッチをHadoop環境上で実行

このPatriotのHadoop環境ではどの程度の処理が行われているのでしょうか。まず現状のHadoopクラスタについて伺ったところ、⁠約40台のハードウェアを使って構成している」⁠鈴木氏)とのことでした。その上で実行しているのは、日次バッチが約2000、月次バッチはその倍程度になると言います。ただ、これだけバッチの数が多くても、現状ではまだ処理能力に余裕があると話すのは福田氏です。

「現状でもかなりの数のバッチを走らせていますが、計算量の面でも、ストレージの面でもまだ余裕はあります。たしかにピーク帯ではリソースをかなり消費しますが、平均値を見ていくとまだ大丈夫ですね」⁠福田氏)

ただ、メモリ消費量には注意していると鈴木氏は話します。

「ボトルネックとなるのはCPUよりもメモリですね。メモリを使い切ってしまうと、完全に固まってしまって、そのサーバが落ちてしまったような状態に陥ってしまいます。そこで、MapReduceのスロット数などを調整し、メモリを使い切らないように注意しています。具体的には、MapReduce内でMapとReduceのどちらもスロット数は200程度に設定して、それ以上は動かないようになっています」⁠鈴木氏)

なお、このバッチの追加について、ラボの善明晃由氏は次のように語ります。

「今はラボでバッチの追加などを行っていますが、将来的には各サービスのプロデューサーなどが自分で簡単にバッチを追加できるしくみを用意したいですね。それにより、我々はHadoopクラスタの管理だけを行うという形が理想だと考えています」⁠善明氏)

善明晃由氏
善明晃由氏

ただ、そのためにはまだまだハードルがあると説明するのは鈴木氏です。

「プロデューサーがバッチを追加できるようにするには、設定や結果を出力するインターフェースの整理が必要でしょう。現状ではHiveのクエリをそのままバッチとして設定しているようなイメージですが、プロデューサーなどに使ってもらうには、もう一段、抽象化する必要があると考えています。このあたりをどう実現していくかは、現在検討を重ねている段階です」⁠鈴木氏)

また、鈴木氏は社内からデータ解析の依頼を受けることが増えていると話し、そうした作業をアプリケーション側のエンジニアが自分自身で対応できるようにしたいと言います。

「たとえばログだけを解析するプラットフォームを用意しておき、何かを解析したい場合はアプリケーションエンジニアがそれにアクセスして作業するといった形もあると思います。最終的には、データ解析などの作業をどこまでラボで対応するかということになりますが、この線引きは難しいですね。今のところはほとんど全部我々が対応していますが、できるだけ手を離していきたいと考えています」⁠鈴木氏)

ちなみに、現状でもラボ以外の社内のメンバーがHadoop環境を使ってデータ解析を行えるよう、Clouderaが提供している「HUE」⁠旧Cloudera Desktop)環境を開放しているとのこと。

HUEはHiveで使われている問い合わせ言語の「HiveQL」を使い、WebベースのGUI環境からHadoopを操作できるというインタフェースです。利用するには当然、HiveQLを記述する必要があるため、ハードルはけっして低くはありませんが、それでもWebブラウザを使ってアクセスし、外部から気軽にHadoopを使えるのは便利でしょう。実際、エンジニアではないプロデューサーがこのHUEを使って、Hadoopにアドホックなクエリを投入することも増えているそうです。

Hadoop環境に限らず、データ解析基盤を開発する際、エンドユーザがデータ解析を行ったり、あるいは解析結果を参照するためのインタフェースをどう構築するかは難しいポイントでしょう。今後、ラボがこの問題にどのように対処するのか、注目したいところです。

次期バージョンではFlumeの活用を検討

さて、Hadoopのような環境を使ってログ解析を行う際、問題となることのひとつがログの収集です。たとえば各システムでログフォーマットが固定されていれば、解析処理の手間を省くことが可能になるでしょう。ただ、サイバーエージェントでは解析を行うためのログのフォーマットについて、ほとんどルールはないそうです。

「今は正規表現を使って値を抽出するなどの形で、どういったフォーマットでも対応できるようにしています。ログのフォーマットを統一しているところもありますが、基本的にはサービスによってバラバラですね。本当はそういったこともやっていきたいのですが、現状ではあえてやらないという判断を下しています」⁠鈴木氏)

バッチ処理による解析の対象となるデータは、scpSecure Copyによるファイル転送で、1日に1回Hadoop環境に転送されています。ただプロデューサーの立場で考えた場合、リアルタイムに近い形で解析結果を見たいところでしょう。実際、そういった要望もあるとのことで、現在、その対応としてFlumeの利用を検討しているそうです。

Flumeとはオープンソースで開発されている分散ログ収集のしくみであり、これを使うとリアルタイムに近い形で各システムからログを収集することが可能になります。次期ログ解析基盤では、このFlumeも積極的に取り入れていきたいとのこと。このあたりのお話は、後編で紹介していきます。

オフィスに畳敷の小上がりが出現…なんと福田氏のデスクだった!
オフィスに畳敷の小上がりが出現…なんと福田氏のデスクだった!
サイバーエージェント公式エンジニアブログ
URL:http://ameblo.jp/principia-ca
エンジニアの生の声を週替わりでお届け中!

おすすめ記事

記事・ニュース一覧