注:著者は、Spark実行時のマスターSpark noソースコードの変更が含まれますが、可能な場合はコマンドラインから実行できるオプションのみが含まれます。
BinaryClassificationの例のrun()メソッドを考えてみましょう。
def run(params: Params) {
val conf = new SparkConf().setAppName(s"BinaryClassification with $params")
val sc = new SparkContext(conf)
SparkConfがSparkMasterを構成する手段を提供していないことに注意してください。
Intellijからこのプログラムを次の引数で実行する場合:
--algorithm LR --regType L2 --regParam 1.0 data/mllib/sample_binary_classification_data.txt
次のエラーが発生します。
Exception in thread "main" org.Apache.spark.SparkException: A master URL must be set
in your configuration
at org.Apache.spark.SparkContext.<init>(SparkContext.scala:166)
at org.Apache.spark.examples.mllib.BinaryClassification$.run(BinaryClassification.scala:105)
私はSpark Master urlをとにかく追加しようとしました(コードはそれをサポートしていないようですが..)
spark://10.213.39.125:17088 --algorithm LR --regType L2 --regParam 1.0
data/mllib/sample_binary_classification_data.txt
そして
--algorithm LR --regType L2 --regParam 1.0 spark://10.213.39.125:17088
data/mllib/sample_binary_classification_data.txt
両方ともエラーで動作しません:
Error: Unknown argument 'data/mllib/sample_binary_classification_data.txt'
ここで参照できるのは、解析オプションです-SparkMasterでは何もしません:
val parser = new OptionParser[Params]("BinaryClassification") {
head("BinaryClassification: an example app for binary classification.")
opt[Int]("numIterations")
.text("number of iterations")
.action((x, c) => c.copy(numIterations = x))
opt[Double]("stepSize")
.text(s"initial step size, default: ${defaultParams.stepSize}")
.action((x, c) => c.copy(stepSize = x))
opt[String]("algorithm")
.text(s"algorithm (${Algorithm.values.mkString(",")}), " +
s"default: ${defaultParams.algorithm}")
.action((x, c) => c.copy(algorithm = Algorithm.withName(x)))
opt[String]("regType")
.text(s"regularization type (${RegType.values.mkString(",")}), " +
s"default: ${defaultParams.regType}")
.action((x, c) => c.copy(regType = RegType.withName(x)))
opt[Double]("regParam")
.text(s"regularization parameter, default: ${defaultParams.regParam}")
arg[String]("<input>")
.required()
.text("input paths to labeled examples in LIBSVM format")
.action((x, c) => c.copy(input = x))
だから..はい..先に進んでソースコードを修正することができました。しかし、代わりに、ソースコードの変更を伴わないこの作業を行うためのavailable調整ノブが欠落していると思われます。
JVMパラメーターを追加して、コマンドラインからSpark masterを設定できます。
-Dspark.master=spark://myhost:7077
これをコードから実行したい場合は、SparkConf
を作成するときに.setMaster(...)
を使用できます。
val conf = new SparkConf().setAppName("Simple Application")
.setMaster("spark://myhost:7077")
Long overdue EDIT(コメント通り)
Spark 2.x +:のセッションの場合:
val spark = SparkSession.builder()
.appName("app_name")
.getOrCreate()
ローカルスタンドアロンクラスターを想定したコマンドライン(2.x)。
spark-Shell --master spark://localhost:7077
Spark 1.3.0をダウンロードし、Eclipse Luna 4.4を使用してJavaサンプルをテストしたいのですが、Javaサンプルを実行するにはspark- Javaプロジェクトの参照ライブラリとしてのAssembly-1.3.0-hadoop2.4.0.jar。
Sparkを使用してJavaで開始する最も速い方法は、JavaWordCountの例を実行することです。上記の問題を修正するには、Spark構成に次の行を追加します。
SparkConf sparkConf = new SparkConf()。setAppName( "JavaWordCount")。setMaster( "local [2]")。set( "spark.executor.memory"、 "1g");
それだけです。Eclipseを使用して実行してみてください。成功するはずです。以下のエラーが表示される場合:
Java.io.IOException:org.Apache.hadoop.util.Shell.getQualifiedBinPath(Shell.Java:318)のHadoopバイナリで実行可能なnull\bin\winutils.exeを見つけることができませんでした。
無視するだけで、コンソールを下にスクロールすると、入力テキストファイルの行ごとの行に続いて単語のカウンターが表示されます。
これは、Hadoopのインストールを心配することなく、Windows OSでSparkを開始するための高速な方法です。JDK6とEclipseが必要です。
前述のドキュメントのとおり:setMaster(String master)
接続するマスターURL。1つのスレッドでローカルに実行するlocal
、4つのコアでローカルに実行するlocal[4]
、またはSparkスタンドアロンで実行するspark://master:7077
などクラスタ。
だからここに解決策があります。
デフォルトで1スレッドでローカルとして設定
new SparkConf().setAppName("Ravi Macha").setMaster("local")
または引数付き(つまり、括弧内のスレッド数)
new SparkConf().setAppName("Ravi Macha").setMaster("local[2]")