2015-06-29 17 views
17

Tôi muốn lưu trữ các đối số Spark như tệp đầu vào, tệp đầu ra vào tệp thuộc tính Java và chuyển tệp đó vào Trình điều khiển Spark. Tôi đang sử dụng tia lửa gửi để gửi công việc nhưng không thể tìm thấy thông số để chuyển tệp thuộc tính. Bạn có gợi ý gì không?Cách tải tệp thuộc tính java và sử dụng trong Spark?

+1

bạn đã mệt mỏi tùy chọn này: --prop erties-file FILE Đường dẫn đến một tập tin mà từ đó để tải thêm các thuộc tính –

Trả lời

28

đây tôi tìm thấy một giải pháp:

đạo cụ nộp: (mypropsfile.conf) // lưu ý: tiền tố then chốt của bạn với "tia lửa". đạo cụ khác sẽ bị bỏ qua.

spark.myapp.input /input/path 
spark.myapp.output /output/path 

ra mắt

$SPARK_HOME/bin/spark-submit --properties-file mypropsfile.conf 

làm thế nào để gọi trong mã :(bên trong mã)

sc.getConf.get("spark.driver.host") // localhost 
sc.getConf.get("spark.myapp.input")  // /input/path 
sc.getConf.get("spark.myapp.output")  // /output/path 
+1

+ cùng một thủ thuật sẽ làm việc cho spark-shell quá .... –

+0

cảm ơn bạn :-) Nó đã làm việc một điều trị! – diplomaticguru

+0

@ ramisetty.vijay: phần mở rộng tệp phải là .conf hoặc chúng tôi cũng có thể sử dụng .properties? – Shankar

3

cách tiếp cận Câu trả lời trước đó có những hạn chế đó là mỗi tài sản nên bắt đầu với spark trong tệp thuộc tính-

ví dụ:

spark.myapp.input
spark.myapp.output

Nếu giả sử bạn có một tài sản mà không bắt đầu bằng spark:

job.property:

app.name = xyz

$SPARK_HOME/bin/spark-submit --properties-file job.property 

Spark sẽ bỏ qua tất cả các thuộc tính không có tiền tố spark. với thông điệp:

Cảnh báo: Bỏ qua sở hữu cấu hình không spark: app.name = test

Làm thế nào tôi quản lý tệp thuộc tính trong trình điều khiển và trình điều khiển của ứng dụng:

${SPARK_HOME}/bin/spark-submit --files job.properties 

Mã Java để truy cập tệp bộ nhớ cache (công việc.tài sản):

import java.util.Properties; 
import org.apache.hadoop.fs.FSDataInputStream; 
import org.apache.hadoop.fs.FileSystem; 
import org.apache.hadoop.fs.Path; 
import org.apache.spark.SparkFiles; 

//Load file to propert object using HDFS FileSystem 
String fileName = SparkFiles.get("job.properties") 
Configuration hdfsConf = new Configuration(); 
FileSystem fs = FileSystem.get(hdfsConf); 

//THe file name contains absolute path of file 
FSDataInputStream is = fs.open(new Path(fileName)); 
Properties prop = new Properties(); 
//load properties 
prop.load(is) 
//retrieve properties 
prop.getProperty("app.name"); 

Nếu bạn có thuộc tính cụ thể môi trường (dev/test/prod) sau đó cung cấp APP_ENV biến môi trường java tùy chỉnh trong spark-submit:

${SPARK_HOME}/bin/spark-submit --conf \ 
"spark.driver.extraJavaOptions=-DAPP_ENV=dev spark.executor.extraJavaOptions=-DAPP_ENV=dev" \ 
--properties-file dev.property 

Thay lái xe hoặc người thi hành mã của bạn:

//Load file to propert object using HDFS FileSystem 
String fileName = SparkFiles.get(System.getProperty("APP_ENV")+".properties") 
Các vấn đề liên quan