このトピックでは、Alibaba Cloudアカウントを使用してAlibaba Cloud E-MapReduce(EMR)コンソールにログオンし、EMR on ACKページでクラスタを作成し、コンソールでジョブを実行する方法について説明します。
注意事項
このトピックでは、必要なJARファイルはイメージにパッケージ化されています。独自のJARファイルを使用している場合は、Alibaba Cloud Object Storage Service(OSS)にJARファイルをアップロードできます。ファイルのアップロード方法の詳細については、「シンプルアップロード」をご参照ください。
この場合、コマンドの
local:///opt/spark/examples/spark-examples.jarを、JARファイルがOSSに保存されている実際のパスに置き換える必要があります。パスは、oss://<yourBucketName>/<path>.jar形式で指定されます。
準備
Container Service for Kubernetes (ACK) コンソールでEMR on ACKページにクラスタを作成する前に、以下の操作を実行する必要があります。
ACKクラスタを作成します。詳細については、「ACK専用クラスタを作成する」または「ACKマネージドクラスタを作成する」をご参照ください。
AliyunOSSFullAccessポリシーとAliyunDLFFullAccessポリシーをAlibaba Cloudアカウントにアタッチします。詳細については、「RAMロールにポリシーをアタッチする」をご参照ください。
JARパッケージをAlibaba Cloud Object Storage Service(OSS)に保存する場合は、最初にOSSを有効化する必要があります。詳細については、「OSSを有効化する」をご参照ください。
ステップ 1:ロールの割り当て
EMR on ACKを使用する前に、Alibaba CloudアカウントにシステムデフォルトロールAliyunEMROnACKDefaultRoleが割り当てられている必要があります。詳細については、「Alibaba Cloudアカウントにロールを割り当てる」をご参照ください。
ステップ 2:クラスタの作成
EMR on ACKページでSparkクラスタを作成します。詳細については、「クラスタを作成する」をご参照ください。
EMR コンソールにログオンします。左側のナビゲーションペインで、[EMR on ACK] をクリックします。
EMR on ACKページで、[クラスタの作成] をクリックします。
[e-mapreduce On ACK] ページで、パラメータを構成します。次の表にパラメータを示します。
パラメータ
例
説明
リージョン
中国 (杭州)
クラスタを作成するリージョン。クラスタの作成後、リージョンを変更することはできません。
クラスタタイプ
Spark
クラスタのタイプ。 Spark は、抽出、変換、読み込み (ETL)、バッチ処理、データモデリングなど、さまざまな機能を提供する一般的な分散ビッグデータ処理エンジンです。
重要Spark クラスタを Shuffle Service クラスタに関連付ける場合は、クラスタの主要な EMR バージョンが同じである必要があります。たとえば、EMR バージョンが EMR-5.x-ack の Spark クラスタは、EMR バージョンが EMR-5.x-ack の Shuffle Service クラスタにのみ関連付けることができます。
製品バージョン
EMR-5.6.0-ack
EMR のバージョン。デフォルトでは、最新バージョンが使用されます。
コンポーネントバージョン
SPARK (3.2.1)
指定されたタイプのクラスタにデプロイされているコンポーネントのタイプとバージョンを表示します。
ACK クラスタ
Emr-ack
既存の ACK クラスタを選択するか、ACK コンソールで ACK クラスタを作成します。
重要同じ ACK クラスタを、EMR on ACK ページで作成された同じタイプの複数のクラスタに関連付けることはできません。
[専用ノードの構成] をクリックして、EMR 専用ノードを構成できます。ノードまたはノードプールに taint とラベルを追加することで、EMR 専用ノードまたはノードプールを構成できます。
説明ノードプールで専用ノードを構成することをお勧めします。ノードプールがない場合は、ノードプールを作成します。ノードプールの作成方法の詳細については、「ノードプールを作成する」をご参照ください。ノードプールの詳細については、「ノードプールの概要」をご参照ください。
OSS バケット
oss-spark-test
既存のバケットを選択するか、OSS コンソールでバケットを作成します。
クラスタ名
Emr-Spark
クラスタの名前。名前は 1 ~ 64 文字で、文字、数字、ハイフン (-)、アンダースコア (_) のみを使用できます。
[作成] をクリックします。
クラスタのステータスが [実行中] に変わると、クラスタが作成されます。
ステップ 3:ジョブの送信
クラスタが作成された後、ジョブを送信できます。このセクションでは、カスタムリソース定義 (CRD) を使用して Spark ジョブを送信する方法について説明します。 Spark の詳細については、「クイックスタート」をご参照ください。「クイックスタート」の情報を確認する場合は、プログラミング言語のタイプと Spark のバージョンを選択します。
さまざまなタイプのジョブを送信する方法については、以下のトピックをご参照ください。
kubectl を使用して Alibaba Cloud Container Service for Kubernetes (ACK) クラスタに接続します。詳細については、「クラスタの kubeconfig ファイルを取得し、kubectl を使用してクラスタに接続する」をご参照ください。
spark-pi.yaml という名前のジョブファイルを作成します。次のコードは、ファイルの内容を示しています。
apiVersion: "sparkoperator.k8s.io/v1beta2" kind: SparkApplication metadata: name: spark-pi-simple spec: type: Scala sparkVersion: 3.2.1 mainClass: org.apache.spark.examples.SparkPi mainApplicationFile: "local:///opt/spark/examples/spark-examples.jar" arguments: - "1000" driver: cores: 1 coreLimit: 1000m memory: 4g executor: cores: 1 coreLimit: 1000m memory: 8g memoryOverhead: 1g instances: 1コードのフィールドの詳細については、「spark-on-k8s-operator」をご参照ください。
説明カスタムファイル名を指定できます。この例では、spark-pi.yaml が使用されています。
この例では、EMR V5.6.0 用の Spark 3.2.1 を使用しています。別のバージョンの Spark を使用する場合は、ビジネス要件に基づいて sparkVersion パラメータを構成します。
次のコマンドを実行して、ジョブを送信します。
kubectl apply -f spark-pi.yaml --namespace <Namespace in which the cluster resides><Namespace in which the cluster resides>を、ビジネス要件に基づいて名前空間に置き換えます。名前空間を表示するには、EMR コンソールにログオンし、[クラスタの詳細] タブに移動します。次の情報が返されます。
sparkapplication.sparkoperator.k8s.io/spark-pi-simple created説明spark-pi-simpleは、送信された Spark ジョブの名前です。オプション。 [ジョブの詳細] タブで、送信された Spark ジョブに関する情報を表示します。
ステップ 4:(オプション)クラスタの解放
クラスタが不要になった場合は、コストを削減するためにクラスタを解放できます。
EMR on ACKページで、解放するクラスタを見つけ、[アクション] 列の [解放] をクリックします。
[クラスタの解放] メッセージで、[OK] をクリックします。
参考資料
現在のAlibaba Cloudアカウントのクラスタを表示する方法については、「クラスタ情報を表示する」をご参照ください。
クラスタ内のジョブを表示する方法については、「ジョブを表示する」をご参照ください。