Hadoopはどのように動くのか ─並列・分散システム技術から読み解くHadoop処理系の設計と実装

第19回 Impalaの設計と実装[3]

この記事を読むのに必要な時間:およそ 2 分

Apache Parquetを用いた列指向データ処理

分析処理においては,本連載第14回でもかんたんに説明したように,列指向データレイアウトを用いることが一般的になりつつあります。Impalaにおいても,Apache Parquet(以後Parquet ※3という列指向データレイアウト機構の使用を推奨しています。

※3)
ParquetはClouderaとTwitter社により共同で開発され,Apacheソフトウェア財団に寄贈されています

列ごとにデータを管理することにより,属性によっては行ごとにデータをまとめた場合より同一の値が連続する可能性が高くなり,そのような列においては高い圧縮率が期待でき,圧縮データにおけるI/O量を削減できる傾向があります。

ただし,読み出しクエリの実行時においては,圧縮されたデータの展開や,レコード(タプル)の再構築などのCPU処理を余計に行う必要があります。Impalaにおいては,I/O量の削減とCPU処理のオーバーヘッドのバランスをとるべく,snappyと呼ばれる圧縮形式を用いています。

また,Parquetはデータを列指向で保持するだけではなく,各列のヘッダにその列データにおける値の範囲情報を持っています。この情報はIO Managerによって用いられ,クエリに不必要なデータを読み飛ばすことが可能であり,I/O量をさらに削減できる場合があります。

Apache Parquetを使用する際の注意点とApache Kuduプロジェクトについて

Parquetを使用する際の注意点として,データを列指向レイアウトに再構成するために余計に時間を要する点や,データの追記や更新を(直接)行えないという点があります。よって,たとえばETLなどにおける中間データや,更新が頻繁なデータには適さないと考えられます。

しかし,分析用のデータとして更新がされず繰り返し参照されるファイルを作成する場合などには適したフォーマットなので,パフォーマンスの検証などの際にはparquet/snappy化したデータもあわせて確認してみてください。

また,列指向ストレージに高速にデータを追記,更新したいという要望に対応するため,Apache Kudu(Inclubating)プロジェクトが公開されています。本稿執筆時点ではベータ版のプロジェクトですが,高速なデータの更新と列指向ストレージの検索性能を両立させる要件のあるユースケースでは有用な選択肢になっていくことが期待されます。

おわりに

3回に渡ってImpalaの内部を説明してきましたが,いかがでしたでしょうか。Impalaがアドホッククエリを処理するために行っている並列化や高速化の技法の概観を理解していただけたなら幸いです。

次回からは,Apache Sparkについて,コミッタの猿田さんから紹介いただく予定です。

謝辞

今回Impalaの記事執筆にあたってレビューやアドバイスを受けた嶋内翔はじめClouderaのメンバーに感謝します。

Impalaの今後の見通し

今回お伝えしたImpalaのデータアクセスの処理に関連して,Record Serviceというセキュリティレイヤのプロジェクトも公開されています。これも執筆時点ではベータ版のプロジェクトですが,HiveやSpark SQLなどのSQL on Hadoopから使用されることを想定したプロジェクトで,セキュリティレイヤであるRecord ServiceのデータアクセスにImpalaの技術を応用することで,新しいレイヤを追加しながらSQL処理の高速化も同時に実現しようという野心的なプロジェクトになっています。

KuduやRecord Serviceのような関連プロジェクトも含め,Impalaは非常に活発に開発が進められているプロジェクトですが,じつは2015年にはNested Typesへの対応など機能の拡充に焦点を当てて開発しており,パフォーマンス関連は大きな変更をしてきていませんでした。しかし,2016年はパフォーマンスを大幅に向上させるための施策が検討されており,昨年に発表されたロードマップでは20倍の速度向上を見込んでいることが公表されています

キーワードは先のロードマップにも記載されていますが,どのような更新になるのか,今回の内容と見比べながら楽しみにしていてください。

なお,Impala 2.3でのパフォーマンス比較の記事も公開されています。また,先日公開されたImpala2.5について,パフォーマンスに関する更新やTPC-DSで2.3比+363%の性能向上といった検証結果が報告されています。現状の確認や追試験,今後のバージョンとの比較などの参考になれば幸いです。

著者プロフィール

矢野智聡(やのともあき)

日本オラクル株式会社を経て,2014年よりCloudera株式会社所属。Impala,HiveなどのSQLに関連するエコシステムを中心としてHadoopクラスタのサポートに従事。


山田浩之(やまだひろゆき)

日本アイ・ビー・エム株式会社を経て,ヤフー株式会社にて分散型全文検索エンジンの研究開発に従事。2008年上期未踏IT人材発掘・育成事業において高性能分散型検索エンジンの開発によりスーパークリエータに認定。現在は東京大学生産技術研究所にて高性能並列データ処理系の研究開発に従事。博士(情報理工学)。

著書に『検索エンジン自作入門』。