Azure HDInsight IO キャッシュを使ったApache Sparkワークロードのパフォーマンスを向上させる

Note

  • IOキャッシュはSpark 2.3までサポートされていましたが、Spark 2.4(HDInsight 4.0)およびSpark 3.1.2(HDInsight 5.0)ではサポートされません。

IO CacheはAzure HDInsight向けのデータキャッシュサービスで、Apache Sparkジョブのパフォーマンスを向上させます。 IO CacheはApache TEZApache Hive ワークロードにも対応しており、 これらはApache Spark クラスター上で実行可能です。 IO CacheはRubiXというオープンソースのキャッシュコンポーネントを使用しています。 RubiXは、クラウドストレージシステムからデータにアクセスするビッグデータ分析エンジンで使用されるローカルディスクキャッシュです。 RubiXはキャッシュシステムの中でも独特であり、キャッシュ目的でオペレーティングメモリを予約するのではなく、Solid-State ドライブ(SSD)を使用します。 IOキャッシュサービスは、クラスタの各ワーカーノード上でRubiXメタデータサーバーを起動し管理します。 また、クラスタのすべてのサービスをRubiXキャッシュの透過利用のために設定します。

ほとんどのSSDは1秒あたり1GByte以上の帯域幅を提供します。 この帯域幅は、オペレーティングシステムのメモリ内ファイルキャッシュによって補完され、Apache Sparkのようなビッグデータ計算処理エンジンを読み込むのに十分な帯域幅を提供します。 動作メモリは、シャッフルなどのメモリ依存の強いタスクを処理するためにApache Sparkが利用可能です。 オペレーティングメモリを専用に利用することで、Apache Sparkは最適なリソース使用を実現します。

Note

IO Cacheは現在、キャッシュコンポーネントとしてRubiXを使用していますが、今後のバージョンで変更される可能性があります。 IOキャッシュインターフェースを使用し、RubiX実装に直接依存関係を取らないでください。 IO Cacheは現時点でAzure BLOB Storageでのみサポートされています。

Azure HDInsight IO Cacheのメリット

IO Cacheを使用すると、Azure Blob Storageからデータを読み取るジョブのパフォーマンスが向上します。

I-Cacheを使うと、Sparkジョブに変更を加えなくてもパフォーマンス向上が見られます。 IOキャッシュが無効化されると、このSparkコードはAzure Blob Storage: spark.read.load('wasbs:///myfolder/data.parquet').count()から遠隔データを読み込みます。 IOキャッシュが起動されると、同じコード行がIOキャッシュの読み出しを引き起こします。 次のリードでは、データはSSDからローカルに読み込まれます。 HDInsightクラスタのワーカーノードには、ローカルに接続された専用SSDドライブが装備されています。 HDInsight IO CacheはこれらのローカルSSDをキャッシュに使用しており、遅延を最小限に抑え帯域幅を最大化します。

作業の開始

Azure HDInsight IO Cacheはプレビューでデフォルトで無効化されています。 IO Cacheは、Apache Spark 2.3を動作させるAzure HDInsight 3.6+ Sparkクラスターで利用可能です。 HDInsight 4.0でIOキャッシュを有効にするには、以下の手順を踏みます。

  1. Web ブラウザーから https://CLUSTERNAME.azurehdinsight.net に移動します。ここで、 CLUSTERNAME はクラスターの名前です。

  2. 左側の IOキャッシュ サービスを選択してください。

  3. アクション ( HDI 3.6のサービスアクション )を選択し、 アクティベートします

    アンバリでIOキャッシュサービスを有効化すること。

  4. クラスタ上のすべての影響を受けたサービスの再起動を確認してください。

Note

進行バーは有効表示ですが、IOキャッシュは他の影響を受けたサービスを再起動するまで有効になりません。

Troubleshooting

IOキャッシュを有効にした後にSparkジョブを実行しているとディスクスペースエラーが発生することがあります。 これらのエラーは、Sparkがシャッフル操作中にローカルディスクストレージもデータ保存に使用しているため発生します。 IOキャッシュが有効になり、Sparkストレージの容量が減ると、SparkはSSDの容量が不足する可能性があります。 IOキャッシュが使用する容量は、SSD全体の半分に設定されています。 IOキャッシュのディスク容量使用量はAmbariで設定可能です。 ディスク容量エラーが出たら、IOキャッシュに使うSSD容量を減らし、サービスを再起動してください。 IOキャッシュのスペース設定を変更するには、以下の手順を行います。

  1. Apache Ambariで左側の HDFS サービスを選択します。

  2. 設定タブ詳細タブを選択します。

    編集:HDFSの詳細設定。

  3. 下にスクロールして カスタムコアサイト エリアを展開してください。

  4. hadoop.cache.data.fullness.percentage というプロパティを見つけてください。

  5. ボックス内の値を変えてください。

    I/Oキャッシュの使用率を編集します。

  6. 右上から 「保存 」を選択してください。

  7. 再起動>影響を受けるすべてを再起動」を選択します。

    Apache Ambariは全て影響を受けて再起動します。

  8. すべて再起動を確認 を選択します。

それでもダメなら、IOキャッシュを無効にしてください。