2015-07-31 38 views
9

Tôi đã Spark và Hadoop cài đặt trên OS X. Tôi làm việc thành công thông qua một ví dụ nơi Hadoop chạy tại địa phương, đã file lưu trữ trong HDFS và tôi chạy châm ngòi vớiApache Spark chạy cục bộ cho từ chối Lỗi kết nối

spark-shell --master yarn-client 

và từ bên trong shell làm việc với HDFS. Tôi đang gặp vấn đề, tuy nhiên, cố gắng để có được Spark để chạy mà không cần HDFS, chỉ cục bộ trên máy tính của tôi. Tôi nhìn this answer nhưng nó không cảm thấy đúng rối tung xung quanh với các biến môi trường khi Spark documentation nói

Thật dễ dàng để chạy cục bộ trên một máy - tất cả bạn cần là phải có java cài đặt trên PATH hệ thống của bạn, hoặc biến môi trường JAVA_HOME trỏ đến cài đặt Java.

Nếu tôi chạy ví dụ cơ bản SparkPi Tôi nhận được kết quả chính xác.

Nếu tôi cố gắng chạy các ứng dụng Java mẫu they provide, một lần nữa, tôi nhận ra, nhưng lần này với kết nối từ chối lỗi liên quan đến cổng 9000, mà âm thanh như nó đang cố gắng để kết nối với Hadoop, nhưng tôi không biết tại sao vì tôi không chỉ định rằng

$SPARK_HOME/bin/spark-submit --class "SimpleApp" --master local[4] ~/study/scala/sampleJavaApp/target/simple-project-1.0.jar 
    Exception in thread "main" java.net.ConnectException: Call From 37-2-37-10.tssg.org/10.37.2.37 to localhost:9000 failed on connection exception: java.net.ConnectException: Connection refused; For more details see: http://wiki.apache.org/hadoop/ConnectionRefused 
     at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 
     at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) 
... 
... 
... 
org.apache.hadoop.ipc.Client$Connection.setupConnection(Client.java:604) 
     at org.apache.hadoop.ipc.Client$Connection.setupIOstreams(Client.java:699) 
     at org.apache.hadoop.ipc.Client$Connection.access(Client.java:367) 
     at org.apache.hadoop.ipc.Client.getConnection(Client.java:1462) 
     at org.apache.hadoop.ipc.Client.call(Client.java:1381) 
     ... 51 more 
    15/07/31 11:05:06 INFO spark.SparkContext: Invoking stop() from shutdown hook 
    15/07/31 11:05:06 INFO handler.ContextHandler: stopped o.s.j.s.ServletContextHandler{/metrics/json,null} 
... 
... 
... 
    15/07/31 11:05:06 INFO ui.SparkUI: Stopped Spark web UI at http://10.37.2.37:4040 
    15/07/31 11:05:06 INFO scheduler.DAGScheduler: Stopping DAGScheduler 
    15/07/31 11:05:06 INFO spark.MapOutputTrackerMasterEndpoint: MapOutputTrackerMasterEndpoint stopped! 
    15/07/31 11:05:06 INFO util.Utils: path = /private/var/folders/cg/vkq1ghks37lbflpdg0grq7f80000gn/T/spark-c6ba18f5-17a5-4da9-864c-509ec855cadf/blockmgr-b66cc31e-7371-472f-9886-4cd33d5ba4b1, already present as root for deletion. 
    15/07/31 11:05:06 INFO storage.MemoryStore: MemoryStore cleared 
    15/07/31 11:05:06 INFO storage.BlockManager: BlockManager stopped 
    15/07/31 11:05:06 INFO storage.BlockManagerMaster: BlockManagerMaster stopped 
    15/07/31 11:05:06 INFO scheduler.OutputCommitCoordinator$OutputCommitCoordinatorEndpoint: OutputCommitCoordinator stopped! 
    15/07/31 11:05:06 INFO spark.SparkContext: Successfully stopped SparkContext 
    15/07/31 11:05:06 INFO util.Utils: Shutdown hook called 
    15/07/31 11:05:06 INFO util.Utils: Deleting directory /private/var/folders/cg/vkq1ghks37lbflpdg0grq7f80000gn/T/spark-c6ba18f5-17a5-4da9-864c-509ec855cadf 

Bất kỳ gợi ý/giải thích nào về nơi tôi sai sẽ được đánh giá cao!


CẬP NHẬT

Dường như thực tế tôi có các biến môi trường HADOOP_CONF_DIR bộ đang gây ra một số vấn đề. Trong thư mục đó, tôi có core-site.xml có chứa các thông tin sau

<property> 
    <name>fs.default.name</name>          
    <value>hdfs://localhost:9000</value>        
</property> 

Nếu tôi thay đổi giá trị, ví dụ: <value>hdfs://localhost:9100</value> sau đó khi tôi cố gắng để chạy các công việc spark, kết nối từ chối đề cập đến lỗi cổng thay đổi này

Exception in thread "main" java.net.ConnectException: Call From 37-2-37-10.tssg.org/10.37.2.37 to localhost:9100 failed on connection exception: java.net.ConnectException: Connection refused; For more details see: http://wiki.apache.org/hadoop/ConnectionRefused 

Vì vậy, đối với một số lý do, mặc dù hướng dẫn nó để chạy cục bộ, nó đang cố gắng để kết nối với HDFS. Nếu tôi xóa biến môi trường HADOOP_CONF_DIR, công việc sẽ hoạt động tốt.

+0

bạn có đang thiết lập cấu hình chính trong công việc của mình không? – eliasah

+0

Tôi không chắc chắn chính xác những gì bạn muốn nói (có thể là dấu hiệu cho thấy tại sao nó không hoạt động!). Tôi chỉ đang chạy lệnh '$ SPARK_HOME/bin/spark-submit - lớp" SimpleApp "--master local [4] ~/study/scala/sampleJavaApp/target/simple-project-1.0.jar' –

+0

bạn thế nào thiết lập SparkContext của bạn trong dự án Java của bạn? – eliasah

Trả lời

12

Apache Spark sử dụng các thư viện client Hadoop để truy cập tập tin khi bạn sử dụng sc.textFile. Điều này giúp bạn có thể sử dụng đường dẫn hdfs:// hoặc s3n:// chẳng hạn.Bạn cũng có thể sử dụng đường dẫn cục bộ là file:/home/robocode/foo.txt.

Nếu bạn chỉ định tên tệp không có lược đồ, fs.default.name sẽ được sử dụng. Giá trị mặc định là file:, nhưng bạn ghi đè rõ ràng nó vào hdfs://localhost:9000 trong số core-site.xml của mình. Vì vậy, nếu bạn không chỉ định lược đồ, nó đang cố đọc từ HDFS.

Giải pháp đơn giản nhất là để xác định các schema:

JavaRDD<String> logData = sc.textFile("file:/home/robocode/foo.txt").cache(); 
+0

Giải thích tuyệt vời, điều này đã giải quyết được. –

1

Tôi nghĩ rằng các biến môi trường mà bạn đã xác định trước đó cho ví dụ liên quan đến Hadoop vẫn đang can thiệp vào thử nghiệm của bạn.

Cho rằng bạn đang sử dụng Spark chính thức Java dụ:

public static void main(String[] args) { 
    String logFile = "YOUR_SPARK_HOME/README.md"; // Should be some file on your system 
    SparkConf conf = new SparkConf().setAppName("Simple Application"); 
    JavaSparkContext sc = new JavaSparkContext(conf); 
    JavaRDD<String> logData = sc.textFile(logFile).cache(); 
... 
} 

tôi sẽ đề nghị để explictly thiết lập Master, như các giá trị mặc định được thực hiện bằng cách khác.

SparkConf conf = new SparkConf().setMaster("local").setAppName("Simple Application") 

Kiểm tra SparkConf doc để biết thêm thông tin:

+0

Tôi vừa thử gợi ý của bạn, nhưng ngay cả với chủ rõ ràng thiết lập nó vẫn còn cố gắng để giao tiếp với HDFS là kết quả của 'HADOOP_CONF_DIR' được thiết lập. Tôi biết tôi chỉ có thể bỏ đặt và đặt biến env theo yêu cầu nhưng phải có cách hợp lý hơn –

1

tôi đã có lỗi tương tự, HADOOP_CONF_DIR được xác định, vì vậy tôi chỉ unset các biến môi trường.

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