Amazon Web Services ブログ

EMR 6.0.0 での Hive LLAP の使用で 2 倍速くなる Apache Hive



お客様は、Amazon S3 に保存されたペタバイト規模のデータへの SQL ベースのアクセスを提供するために Amazon EMR で Apache Hive を使用します。Amazon EMR 6.0.0 には Hive LLAP のサポートが追加され、EMR 5.29 よりも 2 倍速い平均パフォーマンスに加えて、個々の Hive TPC-DS クエリでも最大 10 倍の向上を実現します。この記事では、Hive LLAP を有効化する方法を紹介し、TPC-DS ベンチマークからのクエリを使用して観測したパフォーマンス向上について説明します。

Amazon EMR 5.29.0 と比べて速度が 2 倍に

Amazon EMR のリリース 6.0.0 で Hive を実行するパフォーマンスメリットを評価するために、6 ノードの c4.8xlarge EMR クラスターで 3 TB の Apache Parquet データセットに 70 個の TCP-DS クエリを使用し、合計実行時間と相乗平均を EMR リリース 5.29.0 からの結果と比較しました。

その結果から、デフォルトの Amazon EMR Hive 設定を使った場合、Amazon EMR 6.0.0 (Hive 3.1.2) では TPC-DS クエリが Amazon EMR 5.29.0 (Hive 2.3.6) よりも 2 倍速く実行されることがわかりました。

以下のグラフは、70 個の TPC-DS クエリの合計実行時間として測定されたパフォーマンス向上を示しています。実行時間は Amazon EMR 6.0.0 のほうが良く (短時間に) なっています。

以下のグラフは、70 個の TPC-DS クエリの相乗平均として測定されたパフォーマンス向上を示しています。相乗平均は Amazon EMR 6.0.0 のほうが良く (低く) なっています。

以下のグラフは、1 クエリあたりのパフォーマンス向上を示しており、パフォーマンスの向上率が高い順に並べてあります。この比較では、数値が大きいほど良いことになります。

Hive Live Long and Process (LLAP)

Hive LLAP は、低レイテンシーのクエリのために永続的なデーモンによる動的なインメモリキャッシングを使用して Hive の実行モデルを強化します。これらのデーモンは EMR クラスターのコアノードとタスクノードで実行され、データとメタデータをキャッシュします。また、従来の Hive クエリは長時間かかるプロセスであるため、それらのコンテナ起動オーバーヘッドを回避します。

デフォルトで、LLAP デーモンは EMR クラスター起動の一環として起動しません。Amazon EMR 6.0.0 では、以下の hive 設定を使って LLAP を有効化できます。

[
  {
    "Classification": "hive",
    "Properties": {
      "hive.llap.enabled": "true"
    }
  }
]

Hive LLAP は YARN で実行される永続的なデーモンを使用するため、LLAP が有効になると、EMR クラスターの YARN リソースにおける一定の割合が Hive LLAP デーモンのために予約されます。EMR クラスターを起動するときにこの hive 設定 を使って、EMR によって事前定義/計算される以下のプロパティを上書きすることができます。

プロパティ 説明 デフォルト
hive.llap.num-instances EMR クラスターで実行する LLAP インスタンスの数を定義します。NodeManager ノード (コア/タスク) あたり、最大 1 個の LLAP インスタンスを定義できます。 クラスター内のコア/タスクノードの数
hive.llap.percent-allocation LLAP インスタンスに割り当てられる YARN NodeManager リソースの割合を定義します。これは、hive.llap.num-instances によって定義された LLAP インスタンスを実行するノードのみに適用されます。 0.6 (60%)

たとえば、LLAP に YARN NodeManager リソースの 80% を定義するには、以下の設定を使用します。

 [
      {
        "classification": "hive",
        "properties": {
          "hive.llap.percent-allocation": "0.8",
          "hive.llap.enabled": "true"
        },
        "configurations": []
      }
    ]

EMR クラスターを起動するときに hive-site classification を使って、EMR によって事前定義/計算される以下のプロパティを上書きすることができます。

プロパティ 説明
hive.llap.daemon.yarn.container.mb 各 LLAP デーモンの YARN コンテナサイズ
hive.llap.daemon.memory.per.instance.mb LLAP Xmx
hive.llap.io.memory.size LLAP デーモン内の LLAP IO キャッシュのサイズ
hive.llap.daemon.num.executors LLAP デーモンあたりのエグゼキュターの数 (並列的に実行できるタスク)

Amazon EMR での 6.0.0 Hive LLAP の設定に関する詳細については、「Hive LLAP の使用」を参照してください。

LLAP デーモンのサイズの変更

LLAP インスタンスの数は YARN CLI を使用して変更できます。以下はサンプルコマンドです。

$ yarn app -flex <Application Name> -component llap -1

  • Application Name – llap0 (Default)

Hive LLAP デーモンのステータスは、以下のコマンドを使ってチェックできます。

$ hive --service llapstatus

Hive LLAP Web Services

Hive LLAP Monitor は、LLAP デーモンを実行するコアおよびタスクノードのそれぞれでポート 15002 をリッスンします。

以下の表は、LLAP で利用できる Web Services の概要を説明するものです。

URI 説明
http://coretask-public-dns-name:15002 ヒープ、キャッシュ、エグゼキューター、およびシステムメトリクスの概要を示します
http://coretask-public-dns-name:15002/conf 現在の LLAP 設定を示します
http://coretask-public-dns-name:15002/peers Zookeeper サーバーから抽出されたクラスター内の LLAP ノードの詳細を示します
http://coretask-public-dns-name:15002/iomem キャッシュのコンテンツと使用率に関する詳細を示します
http://coretask-public-dns-name:15002/jmx LLAP デーモンの JVM メトリクスを示します
http://coretask-public-dns-name:15002/stacks すべてのスレッドの JVM スタックトレースを示します
http://coretask-public-dns-name:15002/conflog 現在のログレベルを示します
http://coretask-public-dns-name:15002/status LLAP のステータスを示します

Hive のパフォーマンス (LLAP 対コンテナ)

EMR 6.0.0 では Hive LLAP はオプションになっており、Hive LLAP が無効化されている場合、すべての Hive クエリは動的に割り当てられたコンテナを使用して実行されます。永続的な Hive LLAP デーモンを使用する場合と、動的に割り当てられたコンテナを使用する場合での Hive クエリの実行における差を示すために、TCP-DS ベンチマークのサブセットを使用しました。結果を見ると、全体的なパフォーマンスが 27% 向上しているのがわかり、クエリには最大 4 倍速くなったものもありました。

以下のグラフは、50 個の TPC-DS クエリの合計実行時間として測定されたパフォーマンス向上を示しています。実行時間は LLAP を使用する Amazon EMR 6.0.0 のほうが良く (短時間に) なっています。

以下のグラフは、50 個の TPC-DS クエリの相乗平均として測定されたパフォーマンス向上を示しています。実行時間は LLAP を使用する Amazon EMR 6.0.0 のほうが良く (短時間に) なっています。

以下のグラフは、1 クエリあたりのパフォーマンス向上を示しており、パフォーマンスの向上率が高い順に並べてあります。この比較では、数値が大きいほど良いことになります。

まとめ

この記事では、以前の Amazon EMR 5.29 リリースと比較した、Amazon EMR 6.0.0 での Hive のパフォーマンス向上を実証しました。このパフォーマンスの向上は、クエリの実行時間とコストの削減に役立ちます。また、Amazon EMR 6.0.0 での Hive LLAP の使用、その設定方法、および LLAP Monitor を使ったステータスとメトリクスの表示方法について学び、Hive LLAP が有効化されているときのパフォーマンス向上を確認しました。これからも、Amazon EMR での Apache Hive における新たな機能とさらなる改善に関する追加情報にご期待ください。

 


著者について

Suthan Phillips は AWS のビッグデータアーキテクトです。Suthan はアーキテクチャ面でのガイダンスを提供するためにお客様と連携し、Amazon EMR 上の複雑なアプリケーションのパフォーマンス強化を達成するお手伝いをしています。余暇には、太平洋岸北西地区でのハイキングと探検を楽しんでいます。