Main Content

Apache Spark の基礎

"Apache® Spark™" は大規模データを処理するための高速で汎用的なエンジンです。

すべての Spark アプリケーションには、クラスターでのアプリケーションの実行を管理する 1 つの"ドライバー" プログラムがあります。Spark 対応のクラスター上のワーカーは、"実行プログラム" と呼ばれます。ドライバー プロセスは、これらの実行プログラムでユーザー コードを実行します。

典型的な Spark アプリケーションでは、コードは "SparkContext" を確立し、外部データから "耐障害性分散データセット" ("RDD") を作成し、その RDD に対して "変換""アクション" として知られるメソッドを実行して解析結果を出力します。

RDD は、Spark における主要なプログラミングの抽象化であり、並列に動作できるクラスターのノード間で分割された要素の不変なコレクションを表します。Spark アプリケーションは、単一のマシンでローカルに、またはクラスター上で実行できます。

Spark は主に Scala® で記述されており、MATLAB® を含む他のプログラミング言語の API があります。Spark 用 MATLAB API は、Spark プログラミング モデルを MATLAB に公開するため、MATLAB の実装で数多くの Spark 関数を使用できるようになります。MATLAB の実装におけるこれらの Spark 関数の多くは、関数ハンドルや無名関数を入力として受け取り、さまざまなタイプの解析を実行します。

Spark に対する実行

Spark に対して実行するとは、サポートされているクラスター マネージャーを使用して、Spark 対応のクラスターに対してアプリケーションを実行することです。クラスターはローカルでもネットワーク上でも構いません。次の 2 つの方法で Spark に対して実行できます。

  • Spark に接続された "対話型シェル" でコマンドを実行する。

  • "スタンドアロン アプリケーション" を作成して Spark クラスターに対して実行する。

対話型シェルを使用する場合、Spark では、多数のマシンのディスク上またはメモリ内に分散されたデータを操作し、アドホック解析を実行できます。Spark は、さまざまなマシン間での作業分散の基礎的な処理を担います。対話型シェルは、Python® と Scala でのみ使用できます。

MATLAB Compiler™ の Spark 用 MATLAB API には、Spark シェルに似た対話型シェルが用意されており、これを使用してデプロイ前にアプリケーションをデバッグできます。対話型シェルは、ローカル クラスターに対してのみ実行されます。

スタンドアロン アプリケーションを作成して Spark に対して実行する場合、Spark 対応のクラスターに対して実行する前に、アプリケーションをまずスタンドアロン アプリケーションとしてパッケージ化またはコンパイルします。スタンドアロン アプリケーションは、Scala、Java®、Python、MATLAB で作成できます。

MATLAB Compiler の Spark 用 MATLAB API を使用すると、Spark に対して実行できるスタンドアロン アプリケーションを作成できます。

Spark でサポートされるクラスター マネージャー

ローカル

"ローカル" クラスター マネージャーは疑似クラスターを表し、単一マシン上において非分散モードで動作します。1 つのワーカー スレッドを使用するよう構成することも、マルチコア マシンで複数のワーカー スレッドを使用するよう構成することもできます。アプリケーション内では、local という語で表記します。

メモ

アプリケーションを対話的にデバッグできる Spark 用 MATLAB API は、ローカル クラスター マネージャーでのみ動作します。

スタンドアロン

"スタンドアロン" クラスター マネージャーは、Spark に付属しています。マスターと複数のワーカーで構成されます。スタンドアロン クラスター マネージャーを使用するには、各クラスター ノードに Spark のコンパイルされたバージョンを配置します。スタンドアロン クラスター マネージャーは、Spark に用意されているスクリプトを使用して起動できます。アプリケーション内では、spark://host:port と表記します。既定のポート番号は 7077 です。

メモ

Spark に付属しているスタンドアロン クラスター マネージャーを、Spark に対して実行できる "スタンドアロン アプリケーション" と混同しないでください。MATLAB Compiler は、スタンドアロン クラスター マネージャーをサポートしていません。

YARN

YARN クラスター マネージャーは Hadoop® 2.0 で導入されました。通常は HDFS™ と同じノードにインストールされます。このため、YARN 上で Spark を実行すると、Spark から HDFS のデータに簡単にアクセスできるようになります。アプリケーション内では、yarn という語を使用して表記します。YARN 上でアプリケーションを起動する際には、2 つのモードを使用できます。

  • yarn-client モードでは、ドライバーはクライアント プロセスで実行され、アプリケーション マスターは YARN からのリソースのリクエストにのみ使用されます。

  • yarn-cluster モードでは、Spark ドライバーは、クラスター上の YARN が管理するアプリケーション マスター プロセス内で実行され、アプリケーションの開始後にクライアントの使用を停止できます。

メモ

MATLAB Compiler は、yarn-client モードでのみ YARN クラスター マネージャーをサポートします。

Mesos

Mesos クラスター マネージャーは、Apache が開発したオープン ソースのクラスター マネージャーです。アプリケーション内では通常、mesos://host:port と表記します。既定のポート番号は 5050 です。

メモ

MATLAB Compiler は、Mesos クラスター マネージャーをサポートしていません。

次の表を使用して、各クラスター マネージャーでサポートされている MATLAB Compiler のデプロイ オプションを確認できます。

Spark に対するデプロイのオプションローカル クラスター (local)Hadoop クラスター (yarn-client)

tall 配列を含むスタンドアロン アプリケーションのデプロイ

サポートされていません。

サポートされています。

Spark 用 MATLAB API を使用して作成されたスタンドアロン アプリケーションのデプロイ

サポートされています。

サポートされています。

Spark 用 MATLAB API を使用したアプリケーションの対話的なデバッグ

サポートされています。

サポートされていません。

SparkHadoop の関係

Spark と Hadoop の関係は、Hadoop がインストールされているクラスターで Spark を実行する場合にのみ影響します。それ以外の場合は、Spark を実行するために Hadoop は必要ありません。

Spark をクラスターで実行するには、共有ファイルシステムが必要です。Hadoop クラスターは、HDFS と YARN クラスター マネージャーを介して分散ファイル システムへのアクセスを提供します。Spark は作業を分散するためのクラスター マネージャーとして YARN を使用し、HDFS を使用してデータにアクセスできます。また、一部の Spark アプリケーションは Hadoop の MapReduce プログラミング モデルを使用できますが、MapReduce は Spark のコアなプログラミング モデルを構成するものではありません。

クラスターで Spark を実行するために Hadoop は必要ありません。また、Mesos などの他のオプションを使用することもできます。

メモ

現在、MATLAB Compiler のデプロイ オプションは Spark 対応の Hadoop クラスターに対するデプロイのみをサポートしています。

ドライバー

すべての Spark アプリケーションには、クラスター上でさまざまな操作を開始する 1 つの "ドライバー" プログラムがあります。ドライバーは、プログラムの main() メソッドが実行されるプロセスです。ドライバー プロセスは、SparkContext を作成し、RDD を作成し、変換とアクションを実行するユーザー コードを実行します。Spark ドライバーが実行されると、次の 2 つの処理が実行されます。

  • ユーザー プログラムをタスクに変換する。

    Spark ドライバー アプリケーションは、ユーザー プログラムをタスクと呼ばれる物理的な実行単位に変換する役割を担います。タスクは Spark における作業の最小単位です。

  • 実行プログラムでタスクをスケジュールする。

    Spark ドライバーは、データの配置に基づいて、各タスクを適切な場所にスケジュールしようとします。また、キャッシュされたデータの場所を追跡し、それを使用して、今後そのデータにアクセスするタスクをスケジュールします。

ドライバーが終了すると、アプリケーションは終了します。

メモ

MATLAB Compiler で Spark 用 MATLAB API を使用する場合、MATLAB アプリケーション コードが Spark ドライバー プログラムとなります。

実行プログラム

Spark 実行プログラムは、特定の Spark ジョブにおける個々のタスクの実行を担うワーカー プロセスです。実行プログラムは、Spark アプリケーションの冒頭で開始され、アプリケーションのライフタイム全体にわたって存続します。実行プログラムは次の 2 つの役割を担います。

  • アプリケーションを構成するタスクを実行し、その結果をドライバーに返す。

  • ユーザー プログラムによってキャッシュされる RDD のメモリ内ストレージを提供します。

RDD

"耐障害性分散データセット" または "RDD" は、Spark におけるプログラミングの抽象化です。これは、並列に動作できる多くのノードに分散された要素のコレクションを表します。RDD はフォールトトレラントになる傾向があります。RDD は次の 2 つの方法で作成できます。

  • 外部データセットを読み込む。

  • オブジェクトのコレクションを "ドライバー" プログラムで並列化する。

作成後、RDD を使用して "変換""アクション" の 2 種類の操作を実行できます。

変換

"変換" は、新しい RDD を返す既存の RDD に対する操作です。すべてではありませんが、多くの変換は要素単位の操作です。

アクション

"アクション" は、RDD に基づいて最終結果を計算し、その結果をドライバー プログラムに返すか、HDFS などの外部ストレージ システムに保存します。

変換とアクションの区別

戻り値のデータ型を確認します。変換は RDD を返しますが、アクションは他のデータ型を返します。

SparkConf

"SparkConf" は、Spark にデプロイされるアプリケーションの構成パラメーターを保存します。すべてのアプリケーションは、Spark クラスターにデプロイする前に構成する必要があります。構成パラメーターの中には、アプリケーションのプロパティを定義するものもあれば、Spark がクラスターにリソースを割り当てるために使用するものもあります。構成パラメーターは、SparkContext を介して Spark クラスターに渡されます。

SparkContext

"SparkContext" は、Spark クラスターへの接続を表します。これは Spark へのエントリ ポイントであり、Spark 実行環境への接続を確立する上で必要な内部サービスを設定します。