2017-02-05 18 views
5

Tôi đã tạo một cụm nút 3 (1 chủ, 2 công nhân) Apache Spark trong AWS. Tôi có thể gửi công việc cho cụm từ chủ, tuy nhiên tôi không thể làm cho nó hoạt động từ xa.Kết nối với một tổng thể Spark từ xa - Java/Scala

/* 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() 
    } 
} 

tôi có thể nhìn thấy từ các bậc thầy:

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) 

vì vậy khi tôi thực hiện SimpleApp.scala từ máy tính cục bộ của tôi, nó không thành công để kết nối với Spark Master sự:

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] 

Tuy nhiên, tôi biết nó sẽ làm việc nếu tôi đã thiết lập tổng thể để local, bởi vì sau đó nó sẽ chạy cục bộ. Tuy nhiên, tôi muốn khách hàng của tôi kết nối với chủ từ xa này. Làm thế nào tôi có thể thực hiện điều đó? Cấu hình Apache trông tệp. Tôi thậm chí có thể telnet đến DNS và cổng công cộng đó, tôi cũng đã định cấu hình /etc/hosts với DNS công cộng và tên máy chủ cho từng trường hợp EC2. Tôi muốn có thể gửi công việc cho chủ nhân từ xa này, tôi đang thiếu gì?

Trả lời

5

Đối với máy chủ lưu trữ chính tên/IP, hãy truy cập thư mục conf cài đặt của bạn (spark-2.0.2-bin-hadoop2.7/conf) và tạo tệp spark-env.sh bằng lệnh dưới đây.

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

Mở tệp spark-env.sh trong trình chỉnh sửa vi và thêm dòng dưới cùng với tên máy chủ/IP của chủ của bạn.

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

Dừng và khởi động Spark sử dụng stop-all.sh và start-all.sh. Bây giờ bạn có thể sử dụng nó để kết nối chủ từ xa sử dụng

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

Để biết thêm thông tin về thiết lập các biến môi trường hãy kiểm tra http://spark.apache.org/docs/latest/spark-standalone.html#cluster-launch-scripts

+0

tôi đã làm chính xác điều đó và nó vẫn không làm việc :-( – cybertextron

+0

Abaghel, tôi có thể tạo ra một trường hợp duy nhất trong AWS và chỉ chỉnh sửa spark-env? – cybertextron

+0

Bạn có thể đăng dấu vết ngăn xếp đầy đủ của mình không? Bạn đang sử dụng cùng một phiên bản của tia lửa để kết nối? Vui lòng kiểm tra http://stackoverflow.com/questions/38559597/failed-to- connect-to-spark-masterinvalidclassexception-org-apache-spark-rpc-rp – abaghel

Các vấn đề liên quan