উদাহরণ সহ সংগৃহীত সমস্ত পদ্ধতি
ইন্ট্রো
আসলে, এটি করার অনেকগুলি উপায় রয়েছে । কিছু অন্যের কাছ থেকে কঠোর হয় তবে এটি আপনার উপর নির্ভর করে যে কোনটি আপনার পক্ষে সবচেয়ে উপযুক্ত। আমি তাদের সব প্রদর্শন করার চেষ্টা করব।
# 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
এপিআই ব্যবহার করে আরও অনেক কিছু অর্জন করতে পারেন ।
উত্স: [লগ 4 জ কনফিগারেশন ডক্স , কনফিগারেশন বিভাগ]
# 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
মূল দিরগুলিতে উপলভ্য হবে, সুতরাং কোনও পথ যুক্ত করার দরকার নেই file:log4j.properties
।
- তালিকাভুক্ত ফাইলগুলি
--files
অবশ্যই নিখুঁত পথ সহ সরবরাহ করা উচিত!
file:
কনফিগারেশনের প্রিফিক্স ইউআরআই বাধ্যতামূলক।
# 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"
উপসংহার
অন্য কোনও পদ্ধতি আছে কিনা তা সম্পর্কে আমি নিশ্চিত নই, তবে আমি আশা করি এটি এ থেকে জেড পর্যন্ত বিষয়টি কভার করে If যদি না হয় তবে মন্তব্যগুলিতে আমাকে বিনা দ্বিধায় বোধ করবেন!
আপনার উপায় উপভোগ করুন!