Tất cả các phương pháp được thu thập với các ví dụ
Giới thiệu
Trên thực tế, có nhiều cách để làm điều đó . Một số khó hơn từ những người khác, nhưng tùy thuộc vào bạn, cái nào phù hợp với bạn nhất. Tôi sẽ cố gắng để giới thiệu tất cả.
# 1 Lập trình trong ứng dụng của bạn
Có vẻ là dễ nhất, nhưng bạn sẽ cần biên dịch lại ứng dụng của mình để thay đổi các cài đặt đó. Cá nhân, tôi không thích nó nhưng nó hoạt động tốt.
Thí dụ:
import org.apache.log4j.{Level, Logger}
val rootLogger = Logger.getRootLogger()
rootLogger.setLevel(Level.ERROR)
Logger.getLogger("org.apache.spark").setLevel(Level.WARN)
Logger.getLogger("org.spark-project").setLevel(Level.WARN)
Bạn có thể đạt được nhiều hơn nữa chỉ bằng cách sử dụng log4j
API.
Nguồn: [ Tài liệu cấu hình Log4J , phần Cấu hình]
# 2 đèo log4j.properties
trongspark-submit
Điều này là rất khó khăn, nhưng không phải là không thể. Và yêu thích của tôi.
Log4J trong quá trình khởi động ứng dụng luôn tìm kiếm và tải log4j.properties
tệp từ classpath.
Tuy nhiên, khi sử dụng spark-submit
classpath của Spark Cluster đã được ưu tiên hơn so với classpath của ứng dụng! Đây là lý do tại sao việc đặt tệp này vào hũ mỡ của bạn sẽ không ghi đè cài đặt của cụm!
Thêm -Dlog4j.configuration=<location of configuration file>
vào
spark.driver.extraJavaOptions
(cho trình điều khiển) hoặc
spark.executor.extraJavaOptions
(cho người thực thi) .
Lưu ý rằng nếu sử dụng tệp, file:
giao thức phải được cung cấp rõ ràng và tệp cần tồn tại cục bộ trên tất cả các nút .
Để đáp ứng điều kiện cuối cùng, bạn có thể tải tệp lên vị trí có sẵn cho các nút (như hdfs
) hoặc truy cập tệp cục bộ bằng trình điều khiển nếu sử dụng deploy-mode client
. Nếu không thì:
tải lên một tùy chỉnh log4j.properties
bằng cách sử dụng tia lửa, bằng cách thêm nó vào --files
danh sách các tệp sẽ được tải lên cùng với ứng dụng.
Nguồn: Tài liệu Spark, Gỡ lỗi
Các bước:
Ví dụ log4j.properties
:
# Blacklist all to warn level
log4j.rootCategory=WARN, console
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.target=System.err
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=%d{yy/MM/dd HH:mm:ss} %p %c{1}: %m%n
# Whitelist our app to info :)
log4j.logger.com.github.atais=INFO
Thực hiện spark-submit
, cho chế độ cụm:
spark-submit \
--master yarn \
--deploy-mode cluster \
--conf "spark.driver.extraJavaOptions=-Dlog4j.configuration=file:log4j.properties" \
--conf "spark.executor.extraJavaOptions=-Dlog4j.configuration=file:log4j.properties" \
--files "/absolute/path/to/your/log4j.properties" \
--class com.github.atais.Main \
"SparkApp.jar"
Lưu ý rằng bạn phải sử dụng --driver-java-options
nếu sử dụng client
chế độ. Tài liệu Spark, thời gian chạy env
Thực thi spark-submit
, cho chế độ máy khách:
spark-submit \
--master yarn \
--deploy-mode client \
--driver-java-options "-Dlog4j.configuration=file:/absolute/path/to/your/log4j.properties \
--conf "spark.executor.extraJavaOptions=-Dlog4j.configuration=file:log4j.properties" \
--files "/absolute/path/to/your/log4j.properties" \
--class com.github.atais.Main \
"SparkApp.jar"
Ghi chú:
- Các tệp được tải lên
spark-cluster
với --files
sẽ có sẵn tại thư mục gốc, do đó không cần thêm bất kỳ đường dẫn nào vào file:log4j.properties
.
- Các tập tin được liệt kê trong
--files
phải được cung cấp với đường dẫn tuyệt đối!
file:
tiền tố trong cấu hình URI là bắt buộc.
# 3 Chỉnh sửa cụm conf/log4j.properties
Điều này thay đổi tập tin cấu hình đăng nhập toàn cầu .
cập nhật $SPARK_CONF_DIR/log4j.properties
tệp và nó sẽ được tự động tải lên cùng với các cấu hình khác.
Nguồn: Tài liệu Spark, Gỡ lỗi
Để tìm bạn, SPARK_CONF_DIR
bạn có thể sử dụng spark-shell
:
atais@cluster:~$ spark-shell
Welcome to
____ __
/ __/__ ___ _____/ /__
_\ \/ _ \/ _ `/ __/ '_/
/___/ .__/\_,_/_/ /_/\_\ version 2.1.1
/_/
scala> System.getenv("SPARK_CONF_DIR")
res0: String = /var/lib/spark/latest/conf
Bây giờ chỉ cần chỉnh sửa /var/lib/spark/latest/conf/log4j.properties
(với ví dụ từ phương pháp # 2) và tất cả các ứng dụng của bạn sẽ chia sẻ cấu hình này.
# 4 Thư mục cấu hình ghi đè
Nếu bạn thích giải pháp số 3, nhưng muốn tùy chỉnh nó cho mỗi ứng dụng, bạn thực sự có thể sao chép conf
thư mục, chỉnh sửa nội dung của nó và chỉ định làm cấu hình gốc trong suốt spark-submit
.
Để chỉ định một thư mục cấu hình khác với mặc định “SPARK_HOME/conf”
, bạn có thể đặt SPARK_CONF_DIR
. Spark sẽ sử dụng các tập tin cấu hình ( spark-defaults.conf
, spark-env.sh
, log4j.properties
, vv ) từ thư mục này.
Nguồn: Spark docs, Cấu hình
Các bước:
- Sao chép
conf
thư mục của cụm (thông tin thêm, phương pháp # 3)
- Chỉnh sửa
log4j.properties
trong thư mục đó (ví dụ trong phương pháp # 2)
Đặt SPARK_CONF_DIR
vào thư mục này, trước khi thực hiện spark-submit
,
ví dụ:
export SPARK_CONF_DIR=/absolute/path/to/custom/conf
spark-submit \
--master yarn \
--deploy-mode cluster \
--class com.github.atais.Main \
"SparkApp.jar"
Phần kết luận
Tôi không chắc chắn nếu có bất kỳ phương pháp nào khác, nhưng tôi hy vọng điều này bao gồm chủ đề từ A đến Z. Nếu không, hãy thoải mái ping tôi trong các bình luận!
Tận hưởng theo cách của bạn!