उदाहरणों के साथ एकत्रित सभी विधियाँ
पहचान
दरअसल, इसे करने के कई तरीके हैं । कुछ दूसरों से कठिन हैं, लेकिन यह आपके ऊपर है कि कौन आपको सबसे अच्छा लगता है। मैं उन सभी को दिखाने की कोशिश करूंगा।
# 1 प्रोग्राम अपने ऐप में
सबसे आसान लगता है, लेकिन आपको उन सेटिंग्स को बदलने के लिए अपने ऐप को फिर से स्थापित करना होगा। व्यक्तिगत रूप से, मुझे यह पसंद नहीं है लेकिन यह ठीक काम करता है।
उदाहरण:
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)
आप log4j
एपीआई का उपयोग करके बहुत कुछ हासिल कर सकते हैं ।
स्रोत: [ Log4J कॉन्फ़िगरेशन डॉक्स , कॉन्फ़िगरेशन अनुभाग]
# 2 के log4j.properties
दौरान पासspark-submit
यह एक बहुत मुश्किल है, लेकिन असंभव नहीं है। और मेरे पसंदीदा।
ऐप स्टार्टअप के दौरान लॉग 4 जे हमेशा की तलाश और लोड होता है log4j.properties
क्लासपाथ से फ़ाइल ।
हालांकि, जब spark-submit
स्पार्क कलस्टर के क्लासपाथ का उपयोग किया जाता है, तो ऐप की क्लासपाथ पर पूर्वता है! यही कारण है कि इस फ़ाइल को अपने वसा-जार में डालने से क्लस्टर की सेटिंग ओवरराइड नहीं होगी!
जोड़े -Dlog4j.configuration=<location of configuration file>
को
spark.driver.extraJavaOptions
(ड्राइवर के लिए) या
spark.executor.extraJavaOptions
(निष्पादकों के लिए) ।
ध्यान दें कि यदि फ़ाइल का उपयोग किया जाता है, तो file:
प्रोटोकॉल स्पष्ट रूप से प्रदान किया जाना चाहिए, और फ़ाइल को सभी नोड्स पर स्थानीय रूप से मौजूद होना चाहिए ।
अंतिम स्थिति को संतुष्ट करने के लिए, आप या तो फ़ाइल को नोड्स (जैसे hdfs
) के लिए उपलब्ध स्थान पर अपलोड कर सकते हैं या उपयोग करते समय ड्राइवर के साथ स्थानीय रूप से एक्सेस कर सकते हैं deploy-mode client
। अन्यथा:
log4j.properties
स्पार्क-सबमिट का उपयोग करके एक कस्टम अपलोड करें, इसे --files
एप्लिकेशन के साथ अपलोड की जाने वाली फ़ाइलों की सूची में जोड़कर ।
स्रोत: स्पार्क डॉक्स, डीबगिंग
कदम:
उदाहरण 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
spark-submit
क्लस्टर मोड के लिए निष्पादन :
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"
ध्यान दें कि --driver-java-options
यदि आपको client
मोड का उपयोग करना चाहिए स्पार्क डॉक्स, रनटाइम एन.वी.
spark-submit
ग्राहक मोड के लिए निष्पादन ,
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"
टिप्पणियाँ:
spark-cluster
साथ अपलोड की गई फ़ाइलें --files
रूट dir पर उपलब्ध होंगी, इसलिए इसमें कोई पथ जोड़ने की आवश्यकता नहीं हैfile:log4j.properties
।
- सूचीबद्ध फ़ाइलें
--files
पूर्ण पथ के साथ प्रदान की जानी चाहिए!
file:
URI कॉन्फ़िगरेशन में उपसर्ग अनिवार्य है।
# 3 क्लस्टर संपादित करें conf/log4j.properties
यह वैश्विक लॉगिंग कॉन्फ़िगरेशन फ़ाइल को बदलता है ।
$SPARK_CONF_DIR/log4j.properties
फ़ाइल को अपडेट करें और इसे अन्य कॉन्फ़िगरेशन के साथ स्वचालित रूप से अपलोड किया जाएगा।
स्रोत: स्पार्क डॉक्स, डीबगिंग
अपना SPARK_CONF_DIR
उपयोग करने के लिए आप इसका उपयोग कर सकते हैं 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
अब बस संपादित करें /var/lib/spark/latest/conf/log4j.properties
(उदाहरण के लिए विधि # 2 से) और आपके सभी एप्लिकेशन इस कॉन्फ़िगरेशन को साझा करेंगे।
# 4 ओवरराइड कॉन्फ़िगरेशन निर्देशिका
यदि आप समाधान # 3 को पसंद करते हैं, लेकिन इसे प्रति एप्लिकेशन को अनुकूलित करना चाहते हैं, तो आप वास्तव में conf
फ़ोल्डर की प्रतिलिपि बना सकते हैं , सामग्री को संपादित कर सकते हैं और मूल कॉन्फ़िगरेशन के दौरान निर्दिष्ट कर सकते हैं spark-submit
।
डिफ़ॉल्ट के अलावा किसी अन्य कॉन्फ़िगरेशन निर्देशिका को निर्दिष्ट करने के लिए “SPARK_HOME/conf”
, आप सेट कर सकते हैं SPARK_CONF_DIR
। स्पार्क विन्यास फाइल (का उपयोग करेगा spark-defaults.conf
, spark-env.sh
, log4j.properties
, आदि इस निर्देशिका से)।
स्रोत: स्पार्क डॉक्स, कॉन्फ़िगरेशन
कदम:
- कॉपी क्लस्टर के
conf
फ़ोल्डर (अधिक जानकारी, विधि # 3)
log4j.properties
उस फ़ोल्डर में संपादित करें (उदाहरण # 2 विधि में)
SPARK_CONF_DIR
निष्पादित करने से पहले इस फ़ोल्डर में सेट करें spark-submit
,
उदाहरण:
export SPARK_CONF_DIR=/absolute/path/to/custom/conf
spark-submit \
--master yarn \
--deploy-mode cluster \
--class com.github.atais.Main \
"SparkApp.jar"
निष्कर्ष
मुझे यकीन नहीं है कि कोई अन्य तरीका है, लेकिन मुझे आशा है कि यह ए से जेड तक विषय को कवर करता है। यदि नहीं, तो टिप्पणी में मुझे पिंग करने के लिए स्वतंत्र महसूस करें!
अपने तरीके से आनंद लें!