Spark in action on Kubernetes-Playground構築とアーキテクチャの概要
前言
Sparkは非常に流行しているビッグデータ処理エンジンで、データ科学者たちはSparkと関連生態のビッグデータキットを使って大量で豊富なシーンのデータ分析とマイニングを完成した.Sparkは現在、データ処理分野における業界標準となっている.しかし、Spark自体の設計は静的なリソース管理に偏っており、SparkもYarnのような動的なリソースマネージャをサポートしているが、これらのリソース管理は動的なクラウドインフラストラクチャ向けに設計されたものではなく、速度、コスト、効率などの分野で解決策が欠けている.Kubernetesの急速な発展に伴い、データ科学者たちはKubernetesの弾力性と雲原生向けなどの特徴をSparkと結びつけることができるかどうかを考え始めた.Spark 2.3では、
Playgroundの構築
多くの開発者がHadoopに触れると,インストールプロセスの複雑さにより多くの積極性が打ち消される.学習の敷居を下げるため、このシリーズは
内部の原理を説明する前に、私たちはまず環境を構築して、簡単なdemoを通じて、全体の運行時環境を走ります.
1.取付
インストール結果の確認
このとき、
2.Demo検証
Sparkを学ぶとき、私たちが実行する最初のタスクは、公式ドキュメントで紹介されている円周率の実行の例です.今日は別の方法でKubernetesでもう一度実行します.
タスクの発行に成功した後、コマンドラインでタスクの状態を観察できます.
タスクが正常に実行されたことを発見し、このPodのログを表示し、
Spark Operatorのインフラストラクチャの概要
この図は
最後に
本稿では,
著者:莫源
原文を読む
本文は雲栖コミュニティのオリジナル内容で、許可を得ずに転載してはならない.
Sparkは非常に流行しているビッグデータ処理エンジンで、データ科学者たちはSparkと関連生態のビッグデータキットを使って大量で豊富なシーンのデータ分析とマイニングを完成した.Sparkは現在、データ処理分野における業界標準となっている.しかし、Spark自体の設計は静的なリソース管理に偏っており、SparkもYarnのような動的なリソースマネージャをサポートしているが、これらのリソース管理は動的なクラウドインフラストラクチャ向けに設計されたものではなく、速度、コスト、効率などの分野で解決策が欠けている.Kubernetesの急速な発展に伴い、データ科学者たちはKubernetesの弾力性と雲原生向けなどの特徴をSparkと結びつけることができるかどうかを考え始めた.Spark 2.3では、
Resource Manager
にKubernetesオリジナルのサポートが追加されていますが、このシリーズでは、よりKubernetesでクラスタ内でSparkを使用してデータ分析を行う方法について説明します.このシリーズは開発者が豊富なSparkの使用経験を持つ必要はなく、シリーズの深さに向かって、使用したSparkの特性を挿入して説明します.Playgroundの構築
多くの開発者がHadoopに触れると,インストールプロセスの複雑さにより多くの積極性が打ち消される.学習の敷居を下げるため、このシリーズは
spark-on-k8s-operator
をPlayground
として、皆さんのインストールの流れを簡素化します.spark-on-k8s-operator
はその名の通りSpark操作を簡略化するために開発されたoperatorですが、operatorについてよく知らない開発者は、まず自分で検索して理解し、operatorが何ができるかを理解することでspark-on-k8s-operator
の要領を素早く把握することができます.内部の原理を説明する前に、私たちはまず環境を構築して、簡単なdemoを通じて、全体の運行時環境を走ります.
1.取付
spark-on-k8s-operator
公式のドキュメントはHelm Chartでインストールされていますが、多くの開発者の環境でgoogleのrepoに接続できないため、ここでは標準のyamlでインストールします.## repo
git clone [email protected]:AliyunContainerService/spark-on-k8s-operator.git
## crd
kubectl apply -f manifest/spark-operator-crds.yaml
## operator
kubectl apply -f manifest/spark-operator-rbac.yaml
## spark
kubectl apply -f manifest/spark-rbac.yaml
## spark-on-k8s-operator
kubectl apply -f manifest/spark-operator.yaml
インストール結果の確認
このとき、
spark-operator
のネーミングスペースの無状態アプリケーションでは、実行中のsparkoperator
が表示され、テーブル名はコンポーネントが正常にインストールされ、次にdemoアプリケーションを実行してコンポーネントが正常に動作するかどうかを検証します.2.Demo検証
Sparkを学ぶとき、私たちが実行する最初のタスクは、公式ドキュメントで紹介されている円周率の実行の例です.今日は別の方法でKubernetesでもう一度実行します.
## spark-pi
kubectl apply -f examples/spark-pi.yaml
タスクの発行に成功した後、コマンドラインでタスクの状態を観察できます.
##
kubectl describe sparkapplication spark-pi
##
Name: spark-pi
Namespace: default
Labels:
Annotations: kubectl.kubernetes.io/last-applied-configuration:
{"apiVersion":"sparkoperator.k8s.io/v1alpha1","kind":"SparkApplication","metadata":{"annotations":{},"name":"spark-pi","namespace":"defaul...
API Version: sparkoperator.k8s.io/v1alpha1
Kind: SparkApplication
Metadata:
Creation Timestamp: 2019-01-20T10:47:08Z
Generation: 1
Resource Version: 4923532
Self Link: /apis/sparkoperator.k8s.io/v1alpha1/namespaces/default/sparkapplications/spark-pi
UID: bbe7445c-1ca0-11e9-9ad4-062fd7c19a7b
Spec:
Deps:
Driver:
Core Limit: 200m
Cores: 0.1
Labels:
Version: 2.4.0
Memory: 512m
Service Account: spark
Volume Mounts:
Mount Path: /tmp
Name: test-volume
Executor:
Cores: 1
Instances: 1
Labels:
Version: 2.4.0
Memory: 512m
Volume Mounts:
Mount Path: /tmp
Name: test-volume
Image: gcr.io/spark-operator/spark:v2.4.0
Image Pull Policy: Always
Main Application File: local:///opt/spark/examples/jars/spark-examples_2.11-2.4.0.jar
Main Class: org.apache.spark.examples.SparkPi
Mode: cluster
Restart Policy:
Type: Never
Type: Scala
Volumes:
Host Path:
Path: /tmp
Type: Directory
Name: test-volume
Status:
Application State:
Error Message:
State: COMPLETED
Driver Info:
Pod Name: spark-pi-driver
Web UI Port: 31182
Web UI Service Name: spark-pi-ui-svc
Execution Attempts: 1
Executor State:
Spark - Pi - 1547981232122 - Exec - 1: COMPLETED
Last Submission Attempt Time: 2019-01-20T10:47:14Z
Spark Application Id: spark-application-1547981285779
Submission Attempts: 1
Termination Time: 2019-01-20T10:48:56Z
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal SparkApplicationAdded 55m spark-operator SparkApplication spark-pi was added, Enqueuing it for submission
Normal SparkApplicationSubmitted 55m spark-operator SparkApplication spark-pi was submitted successfully
Normal SparkDriverPending 55m (x2 over 55m) spark-operator Driver spark-pi-driver is pending
Normal SparkExecutorPending 54m (x3 over 54m) spark-operator Executor spark-pi-1547981232122-exec-1 is pending
Normal SparkExecutorRunning 53m (x4 over 54m) spark-operator Executor spark-pi-1547981232122-exec-1 is running
Normal SparkDriverRunning 53m (x12 over 55m) spark-operator Driver spark-pi-driver is running
Normal SparkExecutorCompleted 53m (x2 over 53m) spark-operator Executor spark-pi-1547981232122-exec-1 completed
タスクが正常に実行されたことを発見し、このPodのログを表示し、
Pi is roughly 3.1470557352786765
の最終結果を計算することができます.これで、Kubernetesでは、最初のJobに通じました.次に、さっきの操作が何をしたのか詳しく説明します.Spark Operatorのインフラストラクチャの概要
この図は
Spark Operator
のフローチャートで、上記の操作では、最初のステップでは、実際に図の中心位置青色のSpark Operator
をクラスタにインストールし、Spark Opeartor
自体がCRDのControllerであり、Mutating Admission WebhookのControllerでもある.spark-pi
テンプレートを発行すると、SparkApplicationというCRDオブジェクトに変換され、Spark Operator
がApiserverをリスニングし、SparkApplicationオブジェクトを解析してspark-submitのコマンドになってコミットされ、コミットするとDriver Podが生成されます.簡単な方法で理解すると、Driver PodはSpark Jarをカプセル化したミラーです.ローカルタスクであれば、Driver Podで直接実行します.クラスタタスクの場合は、Driver PodからExector Podを再生成して実行します.タスクが終了すると、Driver Podで実行ログの表示ができます.さらに、タスクの実行中、Spark Operator
は、タスクステータスを表示したい開発者が、このUIページを使用してタスクステータスの表示を行うSpark UIをDriver Podに動的にattachします.最後に
本稿では,
Spark Operator
の設計の初心を議論し,Spark Operator
のPlaygroundおよびSpark Operator
の基本アーキテクチャとプロセスを迅速に構築する方法について議論した.次の記事では、Spark Operator
の内部に深く入り込み、その内部の実現原理とSparkとのシームレスな統合方法について説明します.著者:莫源
原文を読む
本文は雲栖コミュニティのオリジナル内容で、許可を得ずに転載してはならない.