web-dev-qa-db-ja.com

リモートへの接続Sparkマスター-Java / Scala

AWSに3ノード(1マスター、2ワーカー)Apache Sparkクラスターを作成しました。マスターからクラスターにジョブを送信できますが、リモートで機能させることができません。

/* SimpleApp.scala */
import org.Apache.spark.SparkContext
import org.Apache.spark.SparkContext._
import org.Apache.spark.SparkConf

object SimpleApp {
  def main(args: Array[String]) {
    val logFile = "/usr/local/spark/README.md" // Should be some file on your system
    val conf = new SparkConf().setAppName("Simple Application").setMaster("spark://ec2-54-245-111-320.compute-1.amazonaws.com:7077")
    val sc = new SparkContext(conf)
    val logData = sc.textFile(logFile, 2).cache()
    val numAs = logData.filter(line => line.contains("a")).count()
    val numBs = logData.filter(line => line.contains("b")).count()
    println(s"Lines with a: $numAs, Lines with b: $numBs")
    sc.stop()
  }
}

私はマスターから見ることができます:

Spark Master at spark://ip-171-13-22-125.ec2.internal:7077
URL: spark://ip-171-13-22-125.ec2.internal:7077
REST URL: spark://ip-171-13-22-125.ec2.internal:6066 (cluster mode)

ローカルマシンからSimpleApp.scalaを実行すると、Spark Masterへの接続に失敗します。

2017-02-04 19:59:44,074 INFO  [appclient-register-master-threadpool-0] client.StandaloneAppClient$ClientEndpoint (Logging.scala:54)  [] - Connecting to master spark://ec2-54-245-111-320.compute-1.amazonaws.com:7077...
2017-02-04 19:59:44,166 WARN  [appclient-register-master-threadpool-0] client.StandaloneAppClient$ClientEndpoint (Logging.scala:87)  [] - Failed to connect to spark://ec2-54-245-111-320.compute-1.amazonaws.com:7077
org.Apache.spark.SparkException: Exception thrown in awaitResult
    at org.Apache.spark.rpc.RpcTimeout$$anonfun$1.applyOrElse(RpcTimeout.scala:77) ~[spark-core_2.10-2.0.2.jar:2.0.2]
    at org.Apache.spark.rpc.RpcTimeout$$anonfun$1.applyOrElse(RpcTimeout.scala:75) ~[spark-core_2.10-2.0.2.jar:2.0.2]
    at scala.runtime.AbstractPartialFunction.apply(AbstractPartialFunction.scala:33) ~[scala-library-2.10.0.jar:?]
    at org.Apache.spark.rpc.RpcTimeout$$anonfun$addMessageIfTimeout$1.applyOrElse(RpcTimeout.scala:59) ~[spark-core_2.10-2.0.2.jar:2.0.2]

ただし、マスターをlocalに設定した場合、ローカルで実行されるため、問題なく動作することはわかっています。ただし、クライアントをこのリモートマスターに接続する必要があります。どうすればそれを達成できますか? Apache構成のlookファイル。そのパブリックDNSとポートにtelnetで接続することもできます。また、/etc/hostsの各インスタンスのパブリックDNSとホスト名でEC2を構成しました。このリモートマスターにジョブを送信できるようにしたいのですが、何が欠けていますか?

7
cybertextron

マスターホストのホスト名/ IPをバインドするには、sparkインストールconfディレクトリ(spark-2.0.2-bin-hadoop2.7/conf)に移動し、以下のコマンドを使用してspark-env.shファイルを作成します。 。

cp spark-env.sh.template spark-env.sh

Viエディターでspark-env.shファイルを開き、以下の行にマスターのホスト名/ IPを追加します。

SPARK_MASTER_Host=ec2-54-245-111-320.compute-1.amazonaws.com

停止して開始Spark using stop-all.shとstart-all.shを使用します。これで、これを使用してリモートマスターに接続できます。

val spark = SparkSession.builder()
  .appName("SparkSample")
  .master("spark://ec2-54-245-111-320.compute-1.amazonaws.com:7077")
  .getOrCreate()

環境変数の設定の詳細については、 http://spark.Apache.org/docs/latest/spark-standalone.html#cluster-launch-scripts を確認してください。

8
abaghel

リモートクラスターでのローカルコードの起動をアップグレードする際に別の問題が発生しました:ジョブが送信され、リソースが適切に割り当てられていますが、ローカルマシンのドライバープロセスはクラスターが受け入れられないと主張しています

WARN TaskSchedulerImpl:最初のジョブはリソースを受け入れていません。クラスターUIをチェックして、ワーカーが登録され、十分なリソースがあることを確認します

リモートマシンのログで、ローカルネットワークからのdriver-urlでジョブを受け入れていることに気付きました

ExecutorRunner:54-起動コマンド: "/opt/jdk1.8.0_131/bin/Java" "-cp" "/opt/spark-2.3.3-bin-hadoop2.7/conf/:/opt/spark-2.3。 3-bin-hadoop2.7/jars/* "" -Xmx16384M "" -Dspark.driver.port = 59399 "" org.Apache.spark.executor.CoarseGrainedExecutorBackend "" --driver-url "" spark:// CoarseGrainedScheduler @ 192.168.88.227:59399 "" --executor-id "" 0 "" --hostname "" 172.31.50.134 "" --cores "" 4 "" --app-id "" app-20190318121936-0000 "" --worker-url "" spark://[email protected]:45999 "

だから私の問題は、ドライバープロセスを解決する間違ったホスト名に関するものでした

0
Andrey