Azure HDInsight IO キャッシュを使用して Apache Spark のワークロードのパフォーマンスを改善するImprove performance of Apache Spark workloads using Azure HDInsight IO Cache

IO キャッシュは、Apache Spark のジョブのパフォーマンスを改善する、Azure HDInsight 用のデータ キャッシュ サービスです。IO Cache is a data caching service for Azure HDInsight that improves the performance of Apache Spark jobs. IO キャッシュは Apache TEZApache Hive のワークロードでも機能し、Apache Spark のクラスター上で実行できます。IO Cache also works with Apache TEZ and Apache Hive workloads, which can be run on Apache Spark clusters. IO キャッシュは RubiX と呼ばれるオープン ソースのキャッシュ コンポーネントを使用します。IO Cache uses an open-source caching component called RubiX. RubiX はビッグ データ分析エンジンで使用されるローカル ディスク キャッシュで、クラウド ストレージ システムからデータにアクセスします。RubiX is a local disk cache for use with big data analytics engines that access data from cloud storage systems. RubiX は、キャッシュ目的でオペレーティング メモリを予約するのではなくソリッド ステート ドライブ (SSD) を使用するため、キャッシュ システム間で一意です。RubiX is unique among caching systems, because it uses Solid-State Drives (SSDs) rather than reserve operating memory for caching purposes. IO キャッシュ サービスはクラスターの各ワーカー ノード上に RubiX メタデータ サーバーを起動して管理します。The IO Cache service launches and manages RubiX Metadata Servers on each worker node of the cluster. また、RubiX キャッシュの透過的な使用のためにクラスターのすべてのサービスを構成します。It also configures all services of the cluster for transparent use of RubiX cache.

ほとんどの SSD の帯域幅は 1 秒につき 1 GB 以上です。Most SSDs provide more than 1 GByte per second of bandwidth. この帯域幅はオペレーティング システムのインメモリ ファイル キャッシュによって補完され、Apache Spark などのビッグ データ演算処理エンジンを読み込むのに十分な帯域幅を提供します。This bandwidth, complemented by the operating system in-memory file cache, provides enough bandwidth to load big data compute processing engines, such as Apache Spark. オペレーティング メモリは、シャッフルなどのメモリに大きく依存するタスクを処理するために Apache Spark が利用できるように残されています。The operating memory is left available for Apache Spark to process heavily memory-dependent tasks, such as shuffles. オペレーティング メモリを排他的に使用できることにより、Apache Spark が最適なリソース使用量を達成できます。Having exclusive use of operating memory allows Apache Spark to achieve optimal resource usage.

注意

現在、IO キャッシュは RubiX をキャッシュ コンポーネントとして使用しますが、将来のバージョンのサービスでは変わる可能性があります。IO Cache currently uses RubiX as a caching component, but this may change in future versions of the service. IO キャッシュのインターフェイスを使用し、RubiX の実装に直接依存することはしないでください。Please use IO Cache interfaces and don't take any dependencies directly on the RubiX implementation. 現時点では、IO キャッシュは Azure Blob Storage でのみサポートされています。IO Cache is only supported with Azure BLOB Storage at this time.

Azure HDInsight IO キャッシュの利点Benefits of Azure HDInsight IO Cache

IO キャッシュを使用すると、Azure Blob Storage からデータを読み取るジョブのパフォーマンスを改善します。Using IO Cache provides a performance increase for jobs that read data from Azure Blob Storage.

IO キャッシュを使用すると、Spark のジョブに変更を加えなくてもパフォーマンスの改善が見られます。You don't have to make any changes to your Spark jobs to see performance increases when using IO Cache. IO キャッシュを無効にすると、Spark コード spark.read.load('wasbs:///myfolder/data.parquet').count() は Azure Blob Storage からデータをリモートで読み取ります。When IO Cache is disabled, this Spark code would read data remotely from Azure Blob Storage: spark.read.load('wasbs:///myfolder/data.parquet').count(). IO キャッシュをアクティブにすると、IO キャッシュによってそのコードの同じ行で キャッシュされた読み取りが行われます。When IO Cache is activated, the same line of code causes a cached read through IO Cache. 続く読み取りでは、データが SSD からローカルで読み取られます。On following reads, the data is read locally from SSD. HDInsight クラスター上のワーカー ノードにはローカルで接続された専用の SSD ドライブが備わっています。Worker nodes on HDInsight cluster are equipped with locally attached, dedicated SSD drives. HDInsight IO キャッシュはこれらのローカル SSD を使用してキャッシュを行います。これにより、最小レベルの待ち時間を実現し、帯域幅を最大化します。HDInsight IO Cache uses these local SSDs for caching, which provides lowest level of latency and maximizes bandwidth.

作業の開始Getting started

Azure HDInsight IO キャッシュはプレビューでは既定で非アクティブ化されます。Azure HDInsight IO Cache is deactivated by default in preview. IO キャッシュは Azure HDInsight 3.6 以上の Spark クラスターで利用可能で、Apache Spark 2.3 を実行します。IO Cache is available on Azure HDInsight 3.6+ Spark clusters, which run Apache Spark 2.3. HDInsight 4.0 上で IO キャッシュをアクティブ化するには、次の手順を実行します。To activate IO Cache on HDInsight 4.0, do the following steps:

  1. Web ブラウザーから、https://CLUSTERNAME.azurehdinsight.net に移動します。ここで、CLUSTERNAME はクラスターの名前です。From a web browser, navigate to https://CLUSTERNAME.azurehdinsight.net, where CLUSTERNAME is the name of your cluster.

  2. 左側の [IO キャッシュ] を選択します。Select the IO Cache service on the left.

  3. [アクション] (HDI 3.6 では [Service Actions](サービス アクション) )、 [有効にする] の順に選択します。Select Actions (Service Actions in HDI 3.6) and Activate.

    Ambari での IO キャッシュ サービスの有効化Enabling the IO Cache service in Ambari

  4. 影響を受けるクラスター上のすべてのサービスの再起動を確認します。Confirm restart of all the affected services on the cluster.

注意

進行状況バーにアクティブ化と表示されていても、IO キャッシュは実際には 影響を受ける他のサービスを再起動するまで有効になりません。Even though the progress bar shows activated, IO Cache isn't actually enabled until you restart the other affected services.

トラブルシューティングTroubleshooting

IO キャッシュを有効にした後に Spark のジョブを実行するとディスク領域エラーが発生することがあります。You may get disk space errors running Spark jobs after enabling IO Cache. これらのエラーは、Spark がシャッフル操作中にデータの格納にもローカル ディスク ストレージを使用することが原因で発生します。These errors occur because Spark also uses local disk storage for storing data during shuffling operations. IO キャッシュが有効になり、Spark のストレージ領域が減ると、Spark で SSD 領域が不足する場合があります。Spark may run out of SSD space once IO Cache is enabled and the space for Spark storage is reduced. IO キャッシュで使用されるディスク領域は既定で SSD の合計領域の半分になります。The amount of space used by IO Cache defaults to half of the total SSD space. IO キャッシュのディスク領域使用量は Ambari で構成できます。The disk space usage for IO Cache is configurable in Ambari. ディスク領域のエラーが発生した場合は、IO キャッシュで使用されるSSD 領域を減らし、サービスを再起動してください。If you get disk space errors, reduce the amount of SSD space used for IO Cache and restart the service. IO キャッシュに設定されている領域を変更するには、次の手順を実行します。To change the space set for IO Cache, do the following steps:

  1. Apache Ambari で、左側にある [HDFS] サービスを選択します。In Apache Ambari, select the HDFS service on the left.

  2. [Configs](構成) タブを選択し、 [Advanced](詳細) タブを選択します。Select the Configs and Advanced tabs.

    HDFS の詳細構成を編集するEdit HDFS Advanced Configuration

  3. 下にスクロールし、 [Custom core-site](カスタム コアサイト) 領域を展開します。Scroll down and expand the Custom core-site area.

  4. プロパティ hadoop.cache.data.fullness.percentage を探します。Locate the property hadoop.cache.data.fullness.percentage.

  5. ボックスの値を変更します。Change the value in the box.

    IO キャッシュの最大割合を編集するEdit IO Cache Fullness Percentage

  6. 右上の [Save](保存) を選択します。Select Save on the upper right.

  7. [Restart](再起動) > [Restart All Affected](影響を受けるすべてを再起動) を選択します。Select Restart > Restart All Affected.

    Apache Ambari の [Restart All Affected](影響を受けるすべてを再起動)Apache Ambari restarts all affected

  8. [Confirm Restart All](すべて再起動) を選択します。Select Confirm Restart All.

それでもうまくいかない場合は、IO キャッシュを無効にしてください。If that doesn't work, disable IO Cache.

次の手順Next Steps

IO キャッシュとパフォーマンスのベンチマークについて詳しくは、ブログ投稿「Apache Spark jobs gain up to 9x speed up with HDInsight IO キャッシュ」(HDInsight IO キャッシュにより Apache Spark のジョブの速度が最大で 9 倍に) をご覧ください。Read more about IO Cache, including performance benchmarks in this blog post: Apache Spark jobs gain up to 9x speed up with HDInsight IO Cache