スパークソースのコンパイラおよびローカル構築するためのデバッグ環境
最近、私は読み始めた「・コアアイデアやソースコード解析の-depth理解をスパーク、」本は基本Spark1.2バージョンを説明するために、16年に出版されました。ほんの少し古いスパークバージョンを感じ始めた後、私は明確な思考の3つの章の発見、学ぶために多くの場所をお読みください。
ローカル簡単にソースコードを読んで、デバッグしたい、あなたは成功した地元のIDEで構築する必要があります。ここでは本をたどり、スパークソースがローカルデバッグ環境を構築行うように設定されている説明します。IDEの選択ツールを構築し、EclipseのであるSBTであり、私はIDEがのIntelliJ IDEAで使用し、ツールを構築Mavenのです。
事前準備作業
以下の比較的単純な作業の前には、詳細に説明しません。私のローカル環境はJDK-1.8、Scalaの-2.12.4、Mavenの-3.3.9、Gitの-2.17.1です。
- JDKのインストールと設定の環境変数
- Scalaのインストールと設定環境変数
- Mavenのインストールと設定環境変数
- SSHのGitのクライアントのインストールと設定
スパークソースコンパイラ
スパーク-1.2.3のソースコンパイラ
あなたが最初のローカル倉庫にソースコードのクローンを作成する必要があり、このプロセスは時間がかかることがあります。
gitのクローン[email protected]:apacheの/ spark.git -b枝-1.2
クローンが完了すると、ソースコードをコンパイルし始めます。Mavenのがコンパイル時オプション-T 1Cに設定することができ、Mavenは、CPUコアあたりの実行中のスレッドを示す、並列コンパイルを使用する能力を提供し、コンパイルをスピードアップ、-eオプションは、例外の詳細は、異常な印刷が発生示します。
MVN -T 1C -DskipTests -eクリーンインストール
最初のコンパイルは、次のエラーメッセージが発生しました:
[INFO] ------------------------------------------------------------------------
[INFO] Reactor Summary:
[INFO]
[INFO] Spark Project Parent POM ........................... SUCCESS [ 2.824 s]
[INFO] Spark Project Networking ........................... SUCCESS [ 13.824 s]
[INFO] Spark Project Shuffle Streaming Service ............ SUCCESS [ 10.192 s]
[INFO] Spark Project Core ................................. SUCCESS [02:38 min]
[INFO] Spark Project Bagel ................................ SUCCESS [ 27.409 s]
[INFO] Spark Project GraphX ............................... SUCCESS [01:06 min]
[INFO] Spark Project Streaming ............................ SUCCESS [01:40 min]
[INFO] Spark Project Catalyst ............................. SKIPPED
[INFO] Spark Project SQL .................................. SKIPPED
[INFO] Spark Project ML Library ........................... SKIPPED
[INFO] Spark Project Tools ................................ SKIPPED
[INFO] Spark Project Hive ................................. SKIPPED
[INFO] Spark Project REPL ................................. SKIPPED
[INFO] Spark Project Assembly ............................. SKIPPED
[INFO] Spark Project External Twitter ..................... SKIPPED
[INFO] Spark Project External Flume Sink .................. SUCCESS [ 18.871 s]
[INFO] Spark Project External Flume ....................... FAILURE [ 10.060 s]
[INFO] Spark Project External MQTT ........................ SKIPPED
[INFO] Spark Project External ZeroMQ ...................... SKIPPED
[INFO] Spark Project External Kafka ....................... SKIPPED
[INFO] Spark Project Examples ............................. SKIPPED
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal net.alchim31.maven:scala-maven-plugin:3.2.0:compile (scala-compile-first) on project spark-streaming-flume_2.10: Execution scala-compile-first of goal net.alchim31.maven:scala-maven-plugin:3.2.0:compile failed. CompileFailed -> [Help 1]
org.apache.maven.lifecycle.LifecycleExecutionException: Failed to execute goal net.alchim31.maven:scala-maven-plugin:3.2.0:compile (scala-compile-first) on project spark-streaming-flume_2.10: Execution scala-compile-first of goal net.alchim31.maven:scala-maven-plugin:3.2.0:compile failed.
...
[ERROR] After correcting the problems, you can resume the build with the command
[ERROR] mvn <goals> -rf :spark-streaming-flume_2.10
調査の後、与えられた理由は、依存プロジェクトの欠如は次のとおりです。
<dependency>
<groupId>net.alchim31.maven</groupId>
<artifactId>scala-maven-plugin</artifactId>
<version>3.2.0</version>
</dependency>
上記のメインのpom.xml依存プロジェクトを導入した後、再びコンパイルするコマンドをコンパイルします。しかし、ここでは踏んピット:Mavenのエラー情報は、最後のラインのプロンプトに応じて、ビルドプロセスの現在の状態からの回復後に問題を解決するために、次のコマンドを実行します。
MVN <目標> -rf:火花ストリーミングflume_2.10
だから私は、次のようにコンパイラのコマンドは、再入力するプロンプトに従います。
MVN -T 1C -DskipTests -e -rfクリーンインストール:火花ストリーミングflume_2.10
その結果、コンパイルプロセスと、次のエラーメッセージが表示されます。
[INFO] ------------------------------------------------------------------------
[INFO] Reactor Summary:
[INFO]
[INFO] Spark Project External Flume ....................... SUCCESS [ 25.568 s]
[INFO] Spark Project External MQTT ........................ SUCCESS [03:45 min]
[INFO] Spark Project External ZeroMQ ...................... SUCCESS [ 48.209 s]
[INFO] Spark Project External Kafka ....................... SUCCESS [01:49 min]
[INFO] Spark Project Examples ............................. FAILURE [06:12 min]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 09:58 min (Wall Clock)
···
[ERROR] Failed to execute goal on project spark-examples_2.10: Could not resolve dependencies for project org.apache.spark:spark-examples_2.10:jar:1.2.3-SNAPSHOT: The following artifacts could not be resolved: org.apache.spark:spark-mllib_2.10:jar:1.2.3-SNAPSHOT, org.apache.spark:spark-hive_2.10:jar:1.2.3-SNAPSHOT, org.apache.spark:spark-streaming-twitter_2.10:jar:1.2.3-SNAPSHOT: Could not find artifact org.apache.spark:spark-mllib_2.10:jar:1.2.3-SNAPSHOT in apache.snapshots (http://repository.apache.org/snapshots) -> [Help 1]
···
出力からわかるように:リカバリビルドした後、Mavenは単にダウン実行モジュールの障害を開始しますが、以前に、このような上記のコマンドとして再構築モジュール、スキップに依存しないスパークプロジェクトMLライブラリなどを、下記を参照してください:
そう、ここで私は、再ビルド後にきれいにすることができます。
MVN -T 1C -DskipTests -eクリーンインストール
上記苦渋後、14分の総消費、スムーズに再構築します。
[INFO] ------------------------------------------------------------------------
[INFO] Reactor Summary:
[INFO]
[INFO] Spark Project Parent POM ........................... SUCCESS [ 3.703 s]
[INFO] Spark Project Networking ........................... SUCCESS [ 16.933 s]
[INFO] Spark Project Shuffle Streaming Service ............ SUCCESS [ 11.269 s]
[INFO] Spark Project Core ................................. SUCCESS [02:44 min]
[INFO] Spark Project Bagel ................................ SUCCESS [ 28.633 s]
[INFO] Spark Project GraphX ............................... SUCCESS [01:12 min]
[INFO] Spark Project Streaming ............................ SUCCESS [01:41 min]
[INFO] Spark Project Catalyst ............................. SUCCESS [02:09 min]
[INFO] Spark Project SQL .................................. SUCCESS [01:38 min]
[INFO] Spark Project ML Library ........................... SUCCESS [05:52 min]
[INFO] Spark Project Tools ................................ SUCCESS [ 32.681 s]
[INFO] Spark Project Hive ................................. SUCCESS [05:33 min]
[INFO] Spark Project REPL ................................. SUCCESS [ 46.894 s]
[INFO] Spark Project Assembly ............................. SUCCESS [ 27.147 s]
[INFO] Spark Project External Twitter ..................... SUCCESS [ 57.706 s]
[INFO] Spark Project External Flume Sink .................. SUCCESS [ 20.473 s]
[INFO] Spark Project External Flume ....................... SUCCESS [01:09 min]
[INFO] Spark Project External MQTT ........................ SUCCESS [ 57.697 s]
[INFO] Spark Project External ZeroMQ ...................... SUCCESS [ 58.706 s]
[INFO] Spark Project External Kafka ....................... SUCCESS [01:12 min]
[INFO] Spark Project Examples ............................. SUCCESS [01:08 min]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 14:10 min (Wall Clock)
···
スパーク-2.2.4のソースコンパイラ
元の1.2バージョン比較的古いので、フォローアップの仕事や勉強は、比較読書に続く、新しいバージョン2.2選択しました。2.2のビルドに直接ここでは、ハンドオーバブランチ:
gitのチェックアウト支店-2.2
ハンドオーバが成功した後、コンパイルを開始するには、同じコマンドを使用して:
MVN -T 1C -DskipTests -eクリーンインストール
ソースコンパイルプロセスは、以下のCPU使用率:
全体ソースコンパイルプロセスは、異常が発生していない、最後は正常に完了し、次のように情報出力を構築し、約20分かかります。
[INFO] ------------------------------------------------------------------------
[INFO] Reactor Summary:
[INFO]
[INFO] Spark Project Parent POM ........................... SUCCESS [ 23.283 s]
[INFO] Spark Project Tags ................................. SUCCESS [ 12.210 s]
[INFO] Spark Project Sketch ............................... SUCCESS [ 21.720 s]
[INFO] Spark Project Networking ........................... SUCCESS [ 44.170 s]
[INFO] Spark Project Shuffle Streaming Service ............ SUCCESS [ 16.677 s]
[INFO] Spark Project Unsafe ............................... SUCCESS [ 37.268 s]
[INFO] Spark Project Launcher ............................. SUCCESS [ 50.450 s]
[INFO] Spark Project Core ................................. SUCCESS [05:35 min]
[INFO] Spark Project ML Local Library ..................... SUCCESS [01:00 min]
[INFO] Spark Project GraphX ............................... SUCCESS [01:00 min]
[INFO] Spark Project Streaming ............................ SUCCESS [01:53 min]
[INFO] Spark Project Catalyst ............................. SUCCESS [03:52 min]
[INFO] Spark Project SQL .................................. SUCCESS [04:55 min]
[INFO] Spark Project ML Library ........................... SUCCESS [03:36 min]
[INFO] Spark Project Tools ................................ SUCCESS [ 13.582 s]
[INFO] Spark Project Hive ................................. SUCCESS [02:49 min]
[INFO] Spark Project REPL ................................. SUCCESS [ 23.556 s]
[INFO] Spark Project Assembly ............................. SUCCESS [ 3.623 s]
[INFO] Spark Project External Flume Sink .................. SUCCESS [ 44.048 s]
[INFO] Spark Project External Flume ....................... SUCCESS [ 42.474 s]
[INFO] Spark Project External Flume Assembly .............. SUCCESS [ 2.933 s]
[INFO] Spark Integration for Kafka 0.8 .................... SUCCESS [01:09 min]
[INFO] Kafka 0.10 Source for Structured Streaming ......... SUCCESS [ 50.854 s]
[INFO] Spark Project Examples ............................. SUCCESS [ 55.074 s]
[INFO] Spark Project External Kafka Assembly .............. SUCCESS [ 3.453 s]
[INFO] Spark Integration for Kafka 0.10 ................... SUCCESS [ 59.934 s]
[INFO] Spark Integration for Kafka 0.10 Assembly .......... SUCCESS [ 8.501 s]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 20:32 min (Wall Clock)
···
構築するためにソース環境を読みます
ソースコードは、簡単なテストをコンパイルしています。最初の例モジュールJavaWordCount.javaを見つけ、次のようにコードの一部を参照してください。
if (args.length < 1) {
System.err.println("Usage: JavaWordCount <file>");
System.exit(1);
}
SparkSession spark = SparkSession
.builder()
.appName("JavaWordCount")
.getOrCreate();
JavaRDD<String> lines = spark.read().textFile(args[0]).javaRDD();
ここで、我々は2つのことを設定するために実行する必要があります。
- ソースは、この例では、見ることができる、すなわち、ファイル名を計算する必要がある、[0]外部パラメータの引数を受け取ります。以下に示すように、「\ README.md \ apacheの-スパーク\スパーク\ WorkSpaceの\のIntelliJ IDEA E」ここで、私は、アプリケーションが直接、設定を変更するパラメータを追加実行します
- スパークは、ローカルモードに動作モードを変更する必要があります。
SparkSession spark = SparkSession
.builder()
.appName("JavaWordCount").master("local")
.getOrCreate();
設定後、操作JavaWordCount、次の出力:
MLlib: 1
["Building: 1
contributing: 1
shell:: 2
instance:: 1
Scala,: 1
and: 9
command,: 2
package.): 1
./dev/run-tests: 1
sample: 1
19/07/22 14:15:20 INFO AbstractConnector: Stopped Spark@61f05988{HTTP/1.1,[http/1.1]}{0.0.0.0:4040}
このように、私たちは、あなたが喜んで読んで、ソースコードをデバッグすることができ、最初の例は、駆け抜け参照してください。