KubernetesでのSparkのデプロイメントに関する完全なガイドをご覧ください

KubernetesでのSparkのデプロイメントに関する完全なガイドをご覧ください

この記事は、Kubernetes 上で Spark クラスターを構築するためのガイドです。また、Spark テスト タスクと関連するテスト データも提供します。この記事を読むことで、Spark イメージの作成、Spark コンテナ クラスターの構築、クラスター上でのテスト タスクの実行までの完全なプロセスを練習できます。

Yarn はかつて Hadoop のデフォルトのリソース オーケストレーション管理プラットフォームでした。しかし、最近、特に Hadoop の Spark に関しては状況が変わりました。 Kubernetes は、S3 などの他のストレージ プラットフォームと適切に統合されているものの、Hadoop エコシステム内の他のコンポーネントとは密接に関連していないため、急速に Yarn に取って代わり、オブジェクト ストレージに基づく Spark システムのデフォルトのオーケストレーションおよび管理プラットフォームになりつつあります。この記事では、Kubernetes クラスター上で Spark コンテナを構築およびデプロイする方法について詳しく説明します。 Spark は実行にデータを必要とするため、S3 API を介してストレージ操作を実行するように Spark クラスターを構成します。

Sparkコンテナを構築する

Kubernetes にアプリケーションをデプロイする最初のステップは、コンテナを作成することです。一部のプロジェクトでは公式のコンテナ イメージを提供していますが、この記事の執筆時点では、Apache Spark は公式イメージを提供していません。そこで、Spark コンテナを自分で作成し、Dockerfile から始めましょう。

  1. java:openjdk-8-jdkから
  2.   
  3. 環境 hadoop_ver 2.8.2
  4. 環境 spark_ver 2.4.4
  5.   
  6. mkdir -p /opt && \ を実行します。
  7. cd /opt && \
  8. curl http://archive.apache.org/dist/hadoop/common/hadoop-${hadoop_ver}/hadoop-${hadoop_ver}.tar.gz | \
  9. tar -zx && \
  10. ln -s hadoop-${hadoop_ver} hadoop && \
  11. echo Hadoop ${hadoop_ver} が/optインストールされました
  12.   
  13. mkdir -p /opt && \ を実行します。
  14. cd /opt && \
  15. curl http://archive.apache.org/dist/spark/spark-${spark_ver}/spark-${spark_ver}-bin-without-hadoop.tgz | \
  16. tar -zx && \
  17. ln -s spark-${spark_ver}-bin-without-hadoop spark && \
  18. echo Spark ${spark_ver} が/optインストールされました
  19.   
  20. 環境変数SPARK_HOME=/opt/spark
  21. 環境変数PATH=$PATH:$SPARK_HOME/bin
  22. 環境変数 HADOOP_HOME=/opt/hadoop
  23. 環境変数PATH=$PATH:$HADOOP_HOME/bin
  24. 環境変数 LD_LIBRARY_PATH=$HADOOP_HOME/lib/native
  25.   
  26. curl を実行します http://central.maven.org/maven2/org/apache/hadoop/hadoop-aws/2.8.2/hadoop-aws-2.8.2.jar -o /opt/spark/jars/hadoop-aws-2.8.2.jar
  27. curl http://central.maven.org/maven2/org/apache/httpcomponents/httpclient/4.5.3/httpclient-4.5.3.jar -o /opt/spark/jars/httpclient-4.5.3.jar を実行します。
  28. curl を実行します http://central.maven.org/maven2/joda- time /joda- time /2.9.9/joda- time -2.9.9.jar -o /opt/spark/jars/joda- time -2.9.9.jar
  29. curl を実行します http://central.maven.org/maven2/com/amazonaws/aws-java-sdk-core/1.11.712/aws-java-sdk-core-1.11.712.jar -o /opt/spark/jars/aws-java-sdk-core-1.11.712.jar
  30. curl を実行します http://central.maven.org/maven2/com/amazonaws/aws-java-sdk/1.11.712/aws-java-sdk-1.11.712.jar -o /opt/spark/jars/aws-java-sdk-1.11.712.jar
  31. curl を実行します http://central.maven.org/maven2/com/amazonaws/aws-java-sdk-kms/1.11.712/aws-java-sdk-kms-1.11.712.jar -o /opt/spark/jars/aws-java-sdk-kms-1.11.712.jar
  32. curl を実行します http://central.maven.org/maven2/com/amazonaws/aws-java-sdk-s3/1.11.712/aws-java-sdk-s3-1.11.712.jar -o /opt/spark/jars/aws-java-sdk-s3-1.11.712.jar
  33.   
  34. ADD start-common.sh start-worker start-master /
  35. core-site.xmlを追加します/opt/spark/conf/core-site.xml
  36. spark-defaults.confを追加します/opt/spark/conf/spark-defaults.conf
  37. 環境変数 PATH $PATH:/opt/spark/bin

この Dockerfile では、まず公式 Web サイトから Apache Spark と Hadoop をダウンロードし、次に Maven から関連する jar パッケージを取得します。すべての関連ファイルがダウンロードされ、特定のディレクトリに解凍されたら、これらの重要な構成ファイルをイメージに追加します。

このプロセスでは、環境に固有の構成を簡単に追加できます。

上記の手順をスキップして、事前に構築されたイメージを直接使用することもできますが、これらの手順に従うことで、読者は Spark コンテナーの内部を確認でき、上級ユーザーは特定のニーズに合わせてこれを変更できます。

上記の例で使用されている Dockerfile およびその他の関連する構成ファイルは、この GitHub リポジトリから取得できます。このリポジトリの内容を使用する場合は、次のコマンドを使用してローカルにクローンしてください。

  1. git クローン [email protected]:devshlabs/spark-kubernetes.git

これで、必要に応じて環境に変更を加え、イメージをビルドして、使用するコンテナ レジストリにアップロードできるようになります。この記事の例では、コンテナ レジストリとして Dockerhub を使用します。コマンドは次のようになります。

  1. spark-kubernetes/spark-container を実行します
  2. docker ビルド 。 -t mydockerrepo/spark:2.4.4
  3. docker push mydockerrepo/spark:2.4.4

mydockerrepo を実際のレジストリ名に置き換えることを忘れないでください。

Kubernetes に Spark をデプロイする

この時点で、Spark コンテナ イメージがビルドされ、プルして使用できるようになります。このイメージを使用して、Spark マスターとワーカーをデプロイしましょう。最初のステップは、Spark Master を作成することです。 Kubernetes ReplicationController を使用して Spark Master を作成します。この記事の例では、1 つのインスタンスのみを使用して Spark Master を作成しました。 HA 要件のある本番環境では、レプリカの数を 3 以上に設定する必要がある場合があります。

  1. 種類: レプリケーションコントローラ
  2. APIバージョン: v1
  3. メタデータ:
  4. 名前: スパークマスターコントローラー
  5. 仕様:
  6. レプリカ: 1
  7. セレクタ:
  8. コンポーネント: spark-master
  9. テンプレート:
  10. メタデータ:
  11. ラベル:
  12. コンポーネント: spark-master
  13. 仕様:
  14. ホスト名: spark-master-hostname
  15. サブドメイン: spark-master-headless
  16. コンテナ:
  17. -名前: スパークマスター
  18. イメージ: mydockerrepo/spark:2.4.4
  19. imagePullPolicy: 常に
  20. コマンド: [ "/start-master" ]
  21. ポート:
  22. - コンテナポート: 7077
  23. - コンテナポート: 8080
  24. リソース:
  25. リクエスト:
  26. CPU: 100m

Spark Worker ノードが Spark Master ノードを検出できるようにするには、ヘッドレス サービスも作成する必要があります。 GitHub からリポジトリをクローンして spark-kubernetes ディレクトリに移動したら、次のコマンドで Spark Master サービスを開始できます。

  1. kubectl create -f spark-master-controller.yaml
  2. kubectl create -f spark-master-service.yaml

次に、マスター ノードとすべてのサービスが適切に実行されていることを確認してから、ワーカー ノードのデプロイを開始できます。 Spark Worker のレプリカ数は 2 に設定されていますが、必要に応じて変更できます。ワーカーの起動コマンドは次のとおりです: kubectl create -f spark-worker-controller.yaml 最後に、次のコマンドを使用して、すべてのサービスが正常に実行されていることを確認します: kubectl get all 上記のコマンドを実行すると、次のようなものが表示されます。

  1. 名前準備完了 ステータス 再起動 年齢
  2. po/spark-master-controller-5rgz2 1/1 実行中 0 9m
  3. po/spark-worker-controller-0pts6 1/1 実行中 0 9分
  4. po/spark-worker-controller-cq6ng 1/1 実行中 0 9分
  5.   
  6. 名前希望現在の年齢
  7. rc/spark-マスターコントローラー 1 1 1 9m
  8. rc/spark-worker-controller 2 2 2 9分
  9.   
  10. 名前クラスタ IP 外部 IP ポート 年齢
  11. svc/spark-master 10.108.94.160 7077/TCP、8080/TCP 9分

Spark クラスターにジョブを送信する

それでは、ジョブを送信して、正常に動作するかどうかを確認しましょう。ただし、その前に、有効な AWS S3 アカウントとサンプルデータを含むバケットが必要です。サンプルデータをダウンロードするためにKaggleを使用しました。サンプル データは https://www.kaggle.com/datasna ... s.csv から取得でき、S3 バケットにアップロードする必要があります。バケット名が s3-data-bucket であると仮定すると、サンプル データ ファイルは s3-data-bucket/data.csv にあります。データの準備が整うと、実行のために Spark マスター ポッドにロードされます。 spark-master-controller-5rgz2 という名前の Pod を例にとると、コマンドは次のようになります: kubectl exec -it spark-master-controller-v2hjb /bin/bash Spark システムにログインしている場合は、Spark Shell を実行できます。

  1. SPARK_DIST_CLASSPATH=$(hadoop クラスパス) をエクスポートします。
  2. スパークシェル
  3. デフォルトのログレベルの設定   「警告」
  4. ログレベルを調整するには、sc.setLogLevel(newLevel) を使用します。 SparkRの場合は、setLogLevel(newLevel) を使用します。
  5. Spark コンテキスト Web UI はhttp://192.168.132.147:4040利用可能です。
  6. Sparkコンテキストは次のように利用可能  'sc' (マスター = spark://spark-master:7077、アプリ ID = app-20170405152342-0000)。
  7. Sparkセッションは以下からご利用いただけます  「スパーク」
  8. ようこそ  
  9. ____ __
  10. / __/__ ___ _____/ /__
  11. _\ \/ _ \/ _ `/ __/ '_/
  12. /___/ .__/\_,_/_/ ///\_\ バージョン 2.4.4
  13. /_/
  14.   
  15. Scala バージョン 2.11.12 (Java HotSpot(TM) 64ビットサーバー VM、Java 1.8.0_221)を使用
  16. を入力し評価します。
  17. 詳細については、 :help と入力してください。
  18.   
  19. スカラ>

次に、上記のスケール プロンプトに次の構成を入力して、Spark マスターに S3 ストレージの詳細を伝えます。

  1. sc.hadoopConfiguration.set ( " fs.s3a.endpoint " "https://s3.amazonaws.com" )
  2. sc.hadoopConfiguration.set ( "fs.s3a.access.key" "s3-access-key" )
  3. sc.hadoopConfiguration.set ( "fs.s3a.secret.key" "s3-secret-key" )

次に、Scala プロンプトに次のコードを貼り付けて、Spark ジョブを送信します (S3 関連のフィールドを変更することを忘れないでください)。

  1. org.apache.spark._ をインポートします。
  2. org.apache.spark.rdd.RDD をインポートします。
  3. org.apache.spark.util.IntParam をインポートします
  4. org.apache.spark.sql.SQLContext をインポートします。
  5. org.apache.spark.graphx._ をインポートします。
  6. org.apache.spark.graphx.util.GraphGenerators をインポートします。
  7. org.apache.spark.mllib.regression.LabeledPoint をインポートします。
  8. org.apache.spark.mllib.linalg.Vectors をインポートします。
  9. org.apache.spark.mllib.tree.DecisionTree をインポートします。
  10. org.apache.spark.mllib.tree.model.DecisionTreeModel をインポートします。
  11. org.apache.spark.mllib.util.MLUtils をインポートします。
  12.   
  13. val conf = new SparkConf().setAppName( "YouTube" )
  14. val sqlContext = 新しい SQLContext(sc)
  15.   
  16. sqlContext.implicits._ をインポートします。
  17. sqlContext._をインポートします。
  18.   
  19. val youtubeDF = スパーク。 .format( "csv" )を読み取りますオプション( "sep" "," )。オプション( "inferSchema" "true" )。オプション( "header" "true" )。ロード( "s3a://s3-data-bucket/data.csv" )
  20.   
  21. youtubeDF.registerTempTable( "人気" )
  22.   
  23. val fltCountsql = sqlContext.sql( "人気のある s から s.title、s.views を選択" )
  24. fltCountsql.show()

最後に、kubectl patch コマンドを使用して Spark デプロイメントを更新できます。たとえば、負荷が高いときにワーカー ノードを追加し、負荷が減ったらそれらのワーカー ノードを削除できます。

<<:  調査によると、データセンター分野ではオープンコンピューティングプロジェクトが成長している

>>:  新世代のクラウドインフラストラクチャQing Cube Hyper-Converged Express Editionが新たにアップグレードされ、さまざまなアプリケーションシナリオに対応できるようになりました。

推薦する

企業サイトにおけるブランドキーワードの重要性について簡単に説明します

検索業界全体を見てみると、トラフィックの多いキーワードは、いくつかの大規模な古いウェブサイトによって...

SEO のためだけに Baidu を K にした場合、他に何ができるでしょうか?

最近、Baidu は狂ったようにサイトを K にしています。私の周りで Baidu サイト グループ...

SEO で競合他社を活用するいくつかの方法

どの業界でも競争はありますが、SEO 分野も例外ではなく、相対的に見ると SEO 分野の競争はさらに...

新たなブランドプロモーションチャネルの模索:モバイルアプリ

【ポイント】 掲示板や新種のSNS、Weiboなどのソーシャルメディアなどの伝統的なインターネットの...

中国CITIC銀行のネットワークセキュリティ戦略のためのビジュアル管理プラットフォームの構築実践

タイトル:実践丨銀行全体の集中的な運用保守を推進し、業務のデジタル変革を可能にする――中国中信銀行の...

華雲が支援する上洋ハイブリッドクラウドがCAICTのハイブリッドクラウド優秀事例賞を初受賞

11月17日、中国情報通信研究院(CAICT)が主導し、オープンソース・アライアンス・フォー・クラウ...

SEO はどこに向かっているのでしょうか?

はるか昔、SEO は非常に人気がありました。それは、個々のウェブマスターの世界です。ウェブサイトを構...

トラフィック獲得のための4つのチャネルと戦略

インターネット時代においては、電子商取引であれ、オフラインの実店舗であれ、トラフィックの考え方を持つ...

Hiformance スペシャル VPS の簡単なレビュー: $11.99/年/4G メモリ/20g SSD/4T トラフィック

6 月に、hiformance は 4G メモリの年間支払いがわずか 11.99 ドルの超格安 VP...

ガーンター:クラウドコンピューティングはIT市場全体の25倍の速さで成長している

6月14日、市場調査会社ガートナーのニュースによると、クラウドコンピューティングは全体の成長率が25...

百度、湖北成利の公式販売サイトを更新し権限を縮小

今朝、私に悪いことが起こりました。私が担当していた湖北成利公式サイトの販売サイトがランキング0位にな...

分散型クラウドの時代を迎え、Tianyi Cloud 4.0 はエッジ セキュリティをどのように保護するのでしょうか?

12月10日、中国通信企業協会と中国情報通信研究院の主催による2021年(第11回)電気通信・インタ...

完全な JVM オフヒープ メモリ リークのトラブルシューティング記録

[[339593]]序文この記事では、「JVM メモリ割り当ての原則の分析」や「一般的な JVM ...

ウェブサイト分析ハック: エントリー、エグジット、バウンスレポート (パート 1)

この記事は、Web 分析の第一人者である Eric T. Peterson 氏の著書「Web Sit...