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が新たにアップグレードされ、さまざまなアプリケーションシナリオに対応できるようになりました。

推薦する

losangelesvps: 年間 19 ドル、1Gbps 帯域幅 + 無制限トラフィック VPS、KVM/1G メモリ/1 コア/25g SSD、10Gbps 防御

losangelesvps には、ロサンゼルスのデータセンターに位置し、年間支払いのみで利用できる ...

安全な都市の構築、セキュリティクラウドコンピューティングが一般的なトレンド

クラウドコンピューティングは、パーソナルコンピュータとインターネットに続く第3のITの波と考えられて...

マルチエントリーパフォーマンスストレステストのキラー:ワンストップストレステストプラットフォーム OPM の背後にあるテクノロジーを明らかにする

課題アリババの「双十一」は世界的なスーパープロジェクトとなった。このスーパープロジェクトでは、フルリ...

SEOプロモーションテクノロジーとはどういう意味ですか? SEOとは何ですか?

月給5,000~50,000のこれらのプロジェクトはあなたの将来です多くの初心者は百度SEO百科を何...

リード

ホフマン(写真提供:Sina Technology)この無精ひげを生やしたスタンフォード出身の男は、...

神聖な歌「江南スタイル」にインスピレーションを受けたインターネットマーケティング

韓国のおじさんPSYがプロデュースした「江南スタイル」のMVは世界中で人気を博しています。なぜこれほ...

第10回中国クラウドコンピューティングカンファレンスが開幕、「クラウドの10年」の選定結果が正式に発表される

7月24日、第10回中国クラウドコンピューティングカンファレンスが北京国家会議センターで開幕しました...

Hostodo: 年間 21 ドル / 4GB RAM / 50GB ハードドライブ / 2TB データ / ロサンゼルス

ホストドの移籍はここまでで終わったはず?具体的な状況については報道されていません。今日、Hostod...

新しいマーケティング担当者は、オンライン マーケティング チャネルの特徴を迅速に理解するにはどうすればよいでしょうか?

主流のオンラインプロモーションチャネル16個をまとめ、その使い方も紹介しました。プロモーション経験3...

Dogyun(狗云)日本VPS - 「Japan-DC1」データセンター「ソフトバンク」回線VPS簡易評価

日本のVPSは中国では近くて速いのでとても人気があります。ここではDogyunの日本のVPSを見てみ...

簡単な説明: SEO の最高レベルとは何でしょうか?

SEO 業界で数年間働いた後でも、私はまだ自分を新人だと思っています。なぜなら、SEO 業界は非常に...

テンセントクラウドは、開発者がワンストップ開発を実現できるよう支援するクラウド開発ツール「Cloud Studio」をリリースした。

クラウドコンピューティングのさらなる発展により、「クラウド開発」は新たなパラダイムへと進化しています...

hostika - 39 ユーロ/年、8G RAM、100G ハードドライブ、無制限の帯域幅、リトアニア VPS

hostika.lt は、2017 年に設立されたリトアニアの企業です (会社登録コード: 3033...

EvoRack-XEN VPS 60% オフ/今すぐ購入を歓迎

EvoRack は、英国に拠点を置く ABPNI Computer Solutions Ltd. と...

日々の話題:WeChatグループに新世代の「出会いツール」が登場か?モモの旗?

A5 Webmaster Network(www.admin5.com)は5月7日、テンセントチーム...