Hadoopとクラウドストレージ

Yuta Imai
5 min readAug 23, 2016

--

Hadoop Summit San Jose 2016のレポートでも書いたけど、最近Hadoopコミュニティからクラウドへの歩み寄りが顕著に見られるようになっている。

8/15に投稿されたHortonworksのブログでは、上記のHadoop SummitのDay 3 Keynoteで語られたHadoopとクラウドの話が文章にまとめられている。

ざっと要約すると

  • オンデマンド、アドホックなワークロードはクラウドで動作させると経済合理性が高い。必要なリソースを必要な分だけ利用し、終わったら破棄できるから。(当たり前の話。)
  • そこでポイントになってくるのがAmazon S3やWindows Azure Storage Blobのようなクラウドストレージ。これらのストレージは高い可用性と地理的分散などによるデータ耐久性、マルチテナンシーを持ちながらも経済的な価格で利用できる。クラウド上のデータレイクは間違いなくこれらのクラウドストレージとなる。

ということで、クラウドストレージを中心に、その周りにデータ処理のためのクラスタを配置していこうというアーキテクチャが語られている。しかし、ここにはいくつか解決すべき課題がある。

クラウドストレージはFile System APIではなく REST APIで利用する必要がある。当然ローカルにあるHDFSよりもネットワーク的に距離があるのでパフォーマンスにも課題がある。更に、Hadoopの特徴でもあるデータローカリティは提供してくれない。また、アトミックなオペレーションも提供してくれない。

まず、パフォーマンス関連についてはS3 Connectorの改善をしてるよーと書かれている。S3 Connectorって何?となりつつ、ブログ全体とコメントを読んでみると、なんとなくs3Aのことだと理解できる。で、JIRAを検索してみるとこんなUmbrellaチケットがあって、担当がHortonworksの人がやっているので、恐らくこの辺の話だと思われる。

HADOOP-13204: Über-jira: S3a phase III: scale and tuning

  • API呼び出し失敗時のリトライポリシーをコンフィグ可能にして、いつまでもだらだらリトライしないようにする
  • オブジェクトのメタデータにマルチパートアップロード時のSplitサイズを持たせる(?)
  • オブジェクトの etagを使ってHDFSとのファイル更新の比較をできるようにする
  • s3のデータを扱おうとすると、ResourceRequestが’localhost’になるような実装になっており、一旦すべてのコンテナをRM(?)に立てようとして、それをRMが別のノードにバラすような動きをしている。この一連の動作は無駄なので、最初から複数のノード上にコンテナを起動できるようにする。(HADOOP-12878: Impersonate hosts in s3a for better data locality handling ちゃんと読めていないけど、これは結構効きそうな雰囲気)
  • s3上のオブジェクト削除時に大量のListとDeleteが走るが、これを並列化する

他にもたくさんのチケットがあるが、こんな感じで性能改善の努力が払われている。

もうひとつ、データローカリティの課題に対してのひとつのアプローチとしてLLAP(Live Long And Process)という、常駐型デーモンによってHiveのクエリフラグメントを処理する仕組みが語られている。常駐型デーモンであるがゆえに、内部にキャッシュレイヤを持つことができ、これをつかって、データ再利用時に毎回s3へデータを取得しにいくコストを削減することができるという話。

LLAPについて詳しくはこちら。

正直なところ、Hadoopコミュニティはこれまでクラウドとかなり距離をとっていた印象があるので、これは結構大きな動きだと思っている。距離があった理由を想像すると、これまでのHadoopの大規模ユーザーはAWSのようなパブリッククラウドがあたりまえの存在になる2012年くらい以前から、数千台のノードをもつクラスタを運用しているようなひとたちばかりで、そもそもクラウド利用が進みにくい環境での利用が多かったから、というのがあると感じる。なので、距離をとっていた、というか自然に距離ができていたいうのが正しいのかもしれない。

一方、これらの大規模なHadoopユーザーのなかでも、Hadoopのマルチテナント化による、ワークロードの多様化と増大を背景に、ストレージとコンピュートの分離が進んできている。Hadoop Summitでも、Yahoo!、eBay、Symantecなどの「ストレージ(データレイク) + コンピュート(データマート)の分離と、データマートのセルフサービス化」みたいな話が語られている。

こういったアーキテクチャをとるためのひとつの選択肢としてクラウドストレージが、Hadoopコミュニティ内で見直されているのではないかという話でした!

--

--