SparkでのTalendの機能についてお客様からよく質問を受けました。Sparkについて話すとき、最初に頭に浮かぶのはspark-submitコマンドです。これはSparkジョブをサブミットするために使用するものです。そのため、TalendのSparkジョブと通常のspark-submitの対応についての疑問が自然に生じます。Sparkの連携について説明します。Sparkでは、2種類のジョブをサブミットできす。Streamingです。Batchはバッチ処理モデルで動作します。このモデルでは、一定期間にわたって収集されたデータセットがSparkエンジンに送信され、処理されます。Streamingはストリーミングモデルで動作し、データがSparkエンジンに1つずつ送信され、処理がリアルタイムで行われます。Talendは両方のジョブタイプをサポートしており、それぞれのタイプ向けにSparkジョブを作成できます。Streamingジョブを作成するための「ビッグデータストリーミング」のオプションを使用できます。先に進む前に、このブログで使用される重要な概念をいくつか紹介します。Contextを作成・実行します。Sparkマスター:Sparkドライバーの定義に従ってYARNからリソースを要求し、ジョブを実行するホストを見つけます。Sparkエグゼキューター:ワーカーノード上で開始され、メモリーまたはディスク内でジョブのサブミットを実行するプロセスです。はじめに、spark-submitまたはTalendを使用してSparkジョブがどのように機能するかについて、いくつかのコンテキストで見ていきます。Sparkのジョブには、Sparkのジョブを設定・調整する「ドライバー」が常にあります。この場合、Sparkドライバーは、接続に使用するSparkマスターやSparkエグゼキューターに割り当てるメモリー量など、ジョブが使用する構成をセットアップします。したがって、Talendは、Sparkジョブを設定・調整するSparkドライバーが常に存在するという前提の下で、spark-submitと同等の機能を果たします。これで、Hadoopクラスター内からspark-submitを実行したときに、一部の構成情報がクラスター構成ファイルから取得されます。Studioは常にHadoopクラスター上にあるわけではないので、使用できる設定を認識できるようにするために、Studioでのジョブ内でこの情報を提供する必要があります。Sparkジョブで行われるデータ変換は、Talendでは、spark-submitプロシージャーが使用されるときに行われるものと同一のジョブのコンパイル時に行われます。spark-submitと同様に、Talendもジョブを上記のように定義された「ドライバー」として開始しますが、ジョブはドライバー内ではなく、クラスターレベルのSparkエグゼキューター上で実行されます。ジョブが開始されると、TalendはHadoopクラスターレベルで発生しているイベントを監視して、ジョブの進行状況を確認することでジョブを監視します。これは、ユーザーがspark-submitを使用する場合と似ています。spark-submitまたはTalendジョブのいずれかを使用してSparkにジョブをサブミットする場合、Hadoopクラスター構成に応じて3つのモードが提供されます。Sparkドキュメントでは、以下の3つのモードがあります(http://spark.apache.org/docs/latest/cluster-overview.html)。スタンドアロン:このモードでは、SparkドライバーがジョブをサブミットするSparkマスターと、ジョブを処理するためにクラスター上で実行されるSparkエグゼキューターがあります。YARNクライアントモード:ここでは、各ジョブに割り当てられたSparkワーカーデーモンがYARNフレームワーク内で開始・停止されます。上記で説明したSparkドライバーは、Talendジョブを実行しているのと同じシステム上で実行されます。YARNクラスターモード:SparkマスターとSparkエグゼキューターはYARNフレームワーク内で実行されます。これらはジョブと共に開始・停止します。この場合、SparkドライバーもHadoopクラスターレベルのYARN内で動作します。Sparkが提供するモードを定義したので、次にTalendが提供する機能を見ていきましょう。Talendでサポートされるモードは次のとおりです。ローカル:これを選択すると、ジョブはSparkフレームワークをローカルでスピンアップして、ジョブを実行します。ローカルマシンが、Sparkマスターとして、そしてデータ変換を実行するためのSparkエグゼキューターとしても使われます。スタンドアロン:このモードでは、上でも定義されているように、TalendはHadoopクラスターで定義されているSparkマスターに接続してからジョブを実行します。StudioはSparkの「ドライバー」を実行して、ジョブの開始場所からジョブのオーケストレーションを行い、次にオーケストレーションをYARNフレームワークに送信してリソースの実行と割り当てを行います。EMRなどのHadoopディストリビューションで使用できる選択肢です。Altusでのみサポートされています。前述のとおり、このモードでは、TalendはHadoopクラスターレベルのYARN内でSparkの「ドライバー」を実行します。答え:すべてのライブラリーが必ずしも一括でSparkマスターに送られるとは限りません。エグゼキューターが随時必要なライブラリーを送信するようSparkの「ドライバー」にコールバックする可能性は常にあります。この場合、ジョブが終了するのを待ってからジョブのステータスを返すために、ジョブの処理中も「ドライバー」は実行されます。Sparkジョブと同様に、「ドライバー」側で処理が発生する可能性があります。その好例は、ジョブにtLogRowがある場合(クラスターからすべての情報を収集してコンソールに出力する必要があるため)、または「ドライバー」がtCacheInおよびtCacheOutコンポーネント(メモリー内のファイルの場所に関するメタデータ情報を保存)を使用している場合です。Studioの動作は、spark-submitを実行する場合と変わりません。答え:ストレージ構成をジョブに提供する必要があります。これはジョブの安定性のために推奨されます。ジョブ全体に対して1つのストレージ構成を使用することが望ましいと言えます。2つの異なるクラスター用または2つの異なる認証方式用に、2つのHDFSストレージ場所を使用することはできません。HDFSやS3を使うと可能です。ジョブをローカルファイルシステムに書き込むことができないのは、Sparkワーカーが「ドライバー」のローカルファイルシステムを認識できないためです。これは、Spark「ドライバー」がサーバーを開いてライブラリーをクラスターに送信する理由でもあります。処理を可能にする必要がある場合は、HDFSに一時ファイルを書き込み、次にtHDFSGetを使用するDIジョブにファイルをローカルマシンに戻させるのが最善の方法です。sutmitと変わりません。