কিভাবে স্পার্ক কনসোলে প্রদর্শিত INFO বার্তাগুলি বন্ধ করবেন?


181

আমি স্পার্ক শেল থেকে আসা বিভিন্ন বার্তা বন্ধ করতে চাই।

log4j.propertiesএই বার্তাটি বন্ধ করার জন্য আমি ফাইলটি সম্পাদনা করার চেষ্টা করেছি ।

এখানে লিখিত বিষয়বস্তু log4j.properties

# Define the root logger with appender file
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

# Settings to quiet third party logs that are too verbose
log4j.logger.org.eclipse.jetty=WARN
log4j.logger.org.eclipse.jetty.util.component.AbstractLifeCycle=ERROR
log4j.logger.org.apache.spark.repl.SparkIMain$exprTyper=INFO
log4j.logger.org.apache.spark.repl.SparkILoop$SparkILoopInterpreter=INFO

তবে বার্তাগুলি এখনও কনসোলে প্রদর্শিত হচ্ছে।

এখানে কিছু উদাহরণ বার্তা আছে

15/01/05 15:11:45 INFO SparkEnv: Registering BlockManagerMaster
15/01/05 15:11:45 INFO DiskBlockManager: Created local directory at /tmp/spark-local-20150105151145-b1ba
15/01/05 15:11:45 INFO MemoryStore: MemoryStore started with capacity 0.0 B.
15/01/05 15:11:45 INFO ConnectionManager: Bound socket to port 44728 with id = ConnectionManagerId(192.168.100.85,44728)
15/01/05 15:11:45 INFO BlockManagerMaster: Trying to register BlockManager
15/01/05 15:11:45 INFO BlockManagerMasterActor$BlockManagerInfo: Registering block manager 192.168.100.85:44728 with 0.0 B RAM
15/01/05 15:11:45 INFO BlockManagerMaster: Registered BlockManager
15/01/05 15:11:45 INFO HttpServer: Starting HTTP Server
15/01/05 15:11:45 INFO HttpBroadcast: Broadcast server star

আমি এগুলি কীভাবে বন্ধ করব?

উত্তর:


168

আপনার conf/log4j.propertiesফাইল সম্পাদনা করুন এবং নিম্নলিখিত লাইনটি পরিবর্তন করুন:

log4j.rootCategory=INFO, console

প্রতি

log4j.rootCategory=ERROR, console

আর একটি পদ্ধতি হ'ল:

স্পার্ক-শেল শুরু করুন এবং নিম্নলিখিতটিতে টাইপ করুন:

import org.apache.log4j.Logger
import org.apache.log4j.Level

Logger.getLogger("org").setLevel(Level.OFF)
Logger.getLogger("akka").setLevel(Level.OFF)

আপনি এর পরে কোনও লগ দেখতে পাবেন না।

শ্রেনী জন্য অন্যান্য অপশন অন্তর্ভুক্ত: all, debug, error, fatal, info, off, trace, trace_int,warn

প্রতিটি সম্পর্কে বিবরণ ডকুমেন্টেশন পাওয়া যাবে।


15
আমি মনে করি এটি বন্ধ খুব সীমাবদ্ধ। সতর্কতা বা ERROR এখানে আরও ফিট করতে পারে।
তুষারপাত

2
এটি আপনার প্রকল্পের প্রধান শ্রেণিতে যুক্ত করুন।
আখল্ড

2
দুর্দান্ত উত্তর। প্রোগ্রামস্যাটিকভাবে পাইস্পার্ক থেকে একই করার কোনও উপায়?
তাগর

2
এর প্রোগ্রামমেটিক অংশটি কাজ করে না। পরিবর্তে থেকে @cantdutchthis এই উত্তরটি দেখুন stackoverflow.com/a/37836847/1056563
javadba

1
কে এই @ আখলডি?
অ্যাভিয়াদ ক্লিন

151

spark-shellটাইপ শুরু করার পরে ঠিক ;

sc.setLogLevel("ERROR")

স্পার্ক ২.০ (স্কেলা) এ:

spark = SparkSession.builder.getOrCreate()
spark.sparkContext.setLogLevel("ERROR")

এপিআই ডক্স: https://spark.apache.org/docs/2.2.0/api/scala/index.html#org.apache.spark.sql.SparkSession

জাভার জন্য:

spark = SparkSession.builder.getOrCreate();
spark.sparkContext().setLogLevel("ERROR");

আপনি এই প্রোগ্রামটি কীভাবে কোনও প্রোগ্রামে সেট করবেন?
অ্যালেক্স রাজ কালীমূর্তি

এটি কেবল স্পার্ক.এসকিএল.স্পার্কসেশনের জন্য বা জাভাস্পর্ককন্টেক্সের জন্য আয়েবালে ??
শার্পলু

হ্যাঁ, এটি জাভাস্পর্ককন্টেক্সটের জন্য উপলব্ধ । ধন্যবাদ, ক্যান্টডাথথিস এটি আমাকে কিছুক্ষণ বিরক্ত করেছে।
অ্যালান

1
এটিই একমাত্র উত্তর যা পৃথক লগ 4j না তৈরি করে আমার পক্ষে কাজ করে। ধন্যবাদ!
abhihello123

2
এটি আমার পক্ষে কাজ করে, তবে আমি আমার পরীক্ষার শুরুতে কয়েকটি বার্তা পাচ্ছি। কোন ধারণা?

46

.confফাইলটিতে পরিবর্তনের পরামর্শ দেওয়ার জন্য @ আখল্ড এবং @ সচিন জানানিকে ধন্যবাদ Thanks

নিম্নলিখিত কোডটি আমার সমস্যার সমাধান করেছে:

1) import org.apache.log4j.{Level, Logger}আমদানি বিভাগে যুক্ত

2) স্পার্ক কনটেক্সট অবজেক্ট তৈরির পরে নিম্নলিখিত রেখা যুক্ত করা হয়েছে এর পরে val sc = new SparkContext(conf):

val rootLogger = Logger.getRootLogger()
rootLogger.setLevel(Level.ERROR)

12
এটি চেষ্টা করেও লগিং আউটপুটগুলি পাচ্ছেন।
হোরাটিওএল 701 ডি

1
আমি এই সমাধানটি কনফিড /
জিম হো

31

স্পার্ক-জমা বা স্পার্ক-এসকিএল ব্যবহার করে অ্যাপ্লিকেশন জমা দেওয়ার সময় লগ স্তর পরিবর্তন করতে নীচের কমান্ডটি ব্যবহার করুন:

spark-submit \
--conf "spark.driver.extraJavaOptions=-Dlog4j.configuration=file:<file path>/log4j.xml" \
--conf "spark.executor.extraJavaOptions=-Dlog4j.configuration=file:<file path>/log4j.xml"

দ্রষ্টব্য: কনফিগার ফাইলটি <file path>যেখানে log4jসংরক্ষণ করা হয়েছে তা প্রতিস্থাপন করুন।

Log4j.properties:

log4j.rootLogger=ERROR, console

# set the log level for these components
log4j.logger.com.test=DEBUG
log4j.logger.org=ERROR
log4j.logger.org.apache.spark=ERROR
log4j.logger.org.spark-project=ERROR
log4j.logger.org.apache.hadoop=ERROR
log4j.logger.io.netty=ERROR
log4j.logger.org.apache.zookeeper=ERROR

# add a ConsoleAppender to the logger stdout to write to the console
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.layout=org.apache.log4j.PatternLayout
# use a simple message format
log4j.appender.console.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n

log4j.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">

<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
   <appender name="console" class="org.apache.log4j.ConsoleAppender">
    <param name="Target" value="System.out"/>
    <layout class="org.apache.log4j.PatternLayout">
    <param name="ConversionPattern" value="%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n" />
    </layout>
  </appender>
    <logger name="org.apache.spark">
        <level value="error" />
    </logger>
    <logger name="org.spark-project">
        <level value="error" />
    </logger>
    <logger name="org.apache.hadoop">
        <level value="error" />
    </logger>
    <logger name="io.netty">
        <level value="error" />
    </logger>
    <logger name="org.apache.zookeeper">
        <level value="error" />
    </logger>
   <logger name="org">
        <level value="error" />
    </logger>
    <root>
        <priority value ="ERROR" />
        <appender-ref ref="console" />
    </root>
</log4j:configuration>

যদি আপনি কনসোলের পরিবর্তে ফাইলটিতে লগ লিখতে চান তবে log4j.xml এ ফাইলঅ্যাপেন্ডারে স্যুইচ করুন। LOG_DIRলগ ডিরেক্টরি যা আপনি ব্যবহার করে সরবরাহ করতে পারেন একটি পরিবর্তনশীল spark-submit --conf "spark.driver.extraJavaOptions=-D

<appender name="file" class="org.apache.log4j.DailyRollingFileAppender">
        <param name="file" value="${LOG_DIR}"/>
        <param name="datePattern" value="'.'yyyy-MM-dd"/>
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%d [%t] %-5p %c %x - %m%n"/>
        </layout>
    </appender>

এখানে আরেকটি গুরুত্বপূর্ণ বিষয়টি বুঝতে হবে, যখন কাজটি বিতরণ মোডে চালু করা হয় (সুতা বা মেসোস হিসাবে মাইন্ড স্থাপন করুন) লগ 4 জে কনফিগারেশন ফাইলটি ড্রাইভার এবং কর্মী নোডে উপস্থিত থাকতে হবে ( log4j.configuration=file:<file path>/log4j.xml) অন্যথায় লগ 4 জ আরআইআই অভিযোগ করবে-

log4j: ERROR কনফিগারেশন ফাইল [log4j.properties] পড়তে পারেনি। java.io.FileNotFoundException: log4j.properties (এ জাতীয় কোনও ফাইল বা ডিরেক্টরি নেই)

এই সমস্যাটি সমাধান করার ইঙ্গিত-

লগ 4 জে কনফিগারেশন ফাইলটি বিতরণকৃত ফাইল সিস্টেমে রাখুন (এইচডিএফএস বা মেসোস) এবং লগ 4 জ প্রপার্টি কনফিগ্রেটার ব্যবহার করে বাহ্যিক কনফিগারেশন যুক্ত করুন । অথবা প্রতিটি নোডে এটি উপলভ্য করতে স্পার্ককন্টেক্সট অ্যাডফিল ব্যবহার করুন এবং তারপরে কনফিগারেশনটি পুনরায় লোড করতে log4j প্রোপার্টি কনফিগ্রেটর ব্যবহার করুন।


2
এটি এমন কয়েকটি উদাহরণগুলির মধ্যে একটি যা orgডিফল্ট লগার থেকে tradition তিহ্যগতভাবে সমস্ত লগ ক্লোবার করে না ।
25:30

1
এটি খুব ভাল কাজ করে তবে Log4j.propertiesফাইলটি কীসের জন্য? এটি ব্যবহার করা হবে বলে মনে হয় না। আপনি কি এক্সএমএল ফাইলে সেট করা বৈশিষ্ট্যগুলি নথিভুক্ত করছেন?
vy32

1
আপনি এগুলির দুটি ব্যবহার করতে পারেন।
রাহুল শর্মা

3
উপরের সাথে আমার সাফল্য আছে - আমি লগ --files4j.properties সমস্ত নোডে উপলভ্য করতে স্পার্ক-সাবমিট কমান্ড ব্যবহার করি ।
বেন ওয়াটসন

1
এটি আমার জন্য কাজ করা একমাত্র সমাধান এবং এতে কোনও কোড পরিবর্তন জড়িত না। ফাইলটি বিদ্যমান না থাকলে তার Log4.propertiesঅধীনে একটি ফাইল তৈরি করুনmain/resources
ইয়োইকেল

30

উদাহরণ সহ সংগৃহীত সমস্ত পদ্ধতি

ইন্ট্রো

আসলে, এটি করার অনেকগুলি উপায় রয়েছে । কিছু অন্যের কাছ থেকে কঠোর হয় তবে এটি আপনার উপর নির্ভর করে যে কোনটি আপনার পক্ষে সবচেয়ে উপযুক্ত। আমি তাদের সব প্রদর্শন করার চেষ্টা করব।


# 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"

মন্তব্য:

  1. এর spark-clusterসাথে আপলোড করা ফাইলগুলি --filesমূল দিরগুলিতে উপলভ্য হবে, সুতরাং কোনও পথ যুক্ত করার দরকার নেই file:log4j.properties
  2. তালিকাভুক্ত ফাইলগুলি --filesঅবশ্যই নিখুঁত পথ সহ সরবরাহ করা উচিত!
  3. 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, ইত্যাদি এই ডিরেক্টরি থেকে)।

উত্স: স্পার্ক ডক্স, কনফিগারেশন

পদক্ষেপ:

  1. ক্লাস্টারের confফোল্ডারটি অনুলিপি করুন (আরও তথ্য, পদ্ধতি # 3)
  2. log4j.propertiesসেই ফোল্ডারে সম্পাদনা করুন (পদ্ধতি # 2 তে উদাহরণস্বরূপ)
  3. 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 যদি না হয় তবে মন্তব্যগুলিতে আমাকে বিনা দ্বিধায় বোধ করবেন!

আপনার উপায় উপভোগ করুন!


এটি গ্রহণযোগ্য উত্তর হওয়া উচিত। এটি অন্যদের তুলনায় অনেক বেশি বিশদ সরবরাহ করে এবং ব্যবহারের পরিমাণের যোগফল দেয়। (লগগুলি অক্ষম করতে উত্সাহিত না করে))
বেলগেসিয়া

@ আটাইস - আপনার নীচের অংশটি যুক্ত করা উচিত তাই আপনি যদি আমার মতো হয়ে থাকেন এবং উপরের উত্তরগুলি সাহায্য না করে তা খুঁজে পেতে পারে, তবে সম্ভবত আপনাকেও আপনার লগ 4 জে কনফ ফাইল থেকে '.template' প্রত্যয়টি সরিয়ে ফেলতে হবে এবং তারপরে উপরেরটি পুরোপুরি কার্যকরভাবে কাজ করবে!
ওনেডে

1
প্রোগ্রামেটিক পদ্ধতির উপর অতিরিক্ত নোট- স্পার্ক কনটেক্সট তৈরির আগে স্তরটি নির্ধারণ করতে হবে
অরুণরাজ নায়ার

@ অরুনরাজনায়ারের ক্ষেত্রে হওয়া উচিত নয়, কারণ লগিং স্পারকন্টেক্সটে সংযুক্ত নয়, একটি পৃথক বৈশিষ্ট্য is
আতাইস

19

আপনি লগগুলিকে এর স্তরটি বন্ধ হিসাবে সেট করে নীচে অক্ষম করে দিয়েছেন:

Logger.getLogger("org").setLevel(Level.OFF);
Logger.getLogger("akka").setLevel(Level.OFF);

বা লগ ফাইল সম্পাদনা করুন এবং কেবল নীচের সম্পত্তিটি পরিবর্তন করে লগ স্তরটি বন্ধ করে দিন:

log4j.rootCategory=OFF, console

কোন ফাইলটিতে আমি উপরের বৈশিষ্ট্যগুলি সেট করব?
বিশ্বাস

আপনি আপনার ড্রাইভার প্রোগ্রামে এই লাইনগুলি যুক্ত করতে পারেন @ বিশ্বাস
শচীন

আমি একই যুক্ত করেছি তবে এখনও কনসোলে লগগুলি উপস্থিত হয়
বিশ্বাস

আপনি সম্পত্তি log4j.rootCategory = বন্ধ পরিবর্তন করেছেন? আমি এগুলি আমার শেষে এবং এটির কাজটি সূক্ষ্মভাবে পরীক্ষা করে দেখেছি
শচীন জানানী

3
এটি স্পার্ক
২.৩.১-এ

15

আমি আমদানি বিবৃতিগুলির ঠিক নীচে আমার সমস্ত পাইপর্ক স্ক্রিপ্টগুলিতে এই লাইনটি যুক্ত করছি।

SparkSession.builder.getOrCreate().sparkContext.setLogLevel("ERROR")

উদাহরণস্বরূপ আমার পাইপর্ক স্ক্রিপ্টগুলির শিরোনাম

from pyspark.sql import SparkSession, functions as fs
SparkSession.builder.getOrCreate().sparkContext.setLogLevel("ERROR")

13
এটি কাজ করে, তবে স্পার্ক প্রসঙ্গে তৈরির সময় উপস্থিত হওয়া INFO বার্তাগুলির 58 টি লাইন এটি থামায় না।
vy32

1
দ্রষ্টব্য যে এটি স্পার্ক ২.x এর জন্য
ইয়োইকেল

13

উপরের উত্তরগুলি সঠিক তবে আমার প্রয়োজনীয় তথ্য অতিরিক্ত ছিল বলে আমাকে ঠিক সহায়তা করেনি help

আমি সবেমাত্র স্পার্ক সেটআপ করেছি যাতে লগ 4 জে ফাইলটিতে এখনও '.template' প্রত্যয় ছিল এবং পড়ছিল না। আমি বিশ্বাস করি যে লগিং তারপরে স্পার্ক কোর লগিং কনফ থেকে ডিফল্ট হয়।

সুতরাং আপনি যদি আমার মতো হয়ে থাকেন এবং সন্ধান করেছেন যে উপরের উত্তরগুলি সাহায্য করে নি, তবে সম্ভবত আপনাকেও আপনার লগ 4j কনফিগ ফাইল থেকে '.template' প্রত্যয়টি সরিয়ে ফেলতে হবে এবং তারপরে উপরেরটি পুরোপুরি সঠিকভাবে কাজ করবে!

http://apache-spark-user-list.1001560.n3.nabble.com/disable-log4j-for-spark-shell-td11278.html


দয়া করে এই উত্তরটি দেখুন, stackoverflow.com/a/51554118/2094086 আশা করি আপনিও এটির সন্ধান করছেন।
গৌরব আদুরকর

5

পাইথন / স্পার্কে আমরা এটি করতে পারি:

def quiet_logs( sc ):
  logger = sc._jvm.org.apache.log4j
  logger.LogManager.getLogger("org"). setLevel( logger.Level.ERROR )
  logger.LogManager.getLogger("akka").setLevel( logger.Level.ERROR )

স্পার্ককন্টেক্সট 'এসসি' সংজ্ঞায়িত করার পরে এই ফাংশনটিকে কল করুন: নিঃশর্ত_লগস (এসসি)


আমি একটি প্রোগ্র্যাম্যাটিক উপায়টি খুঁজে পেতে চাই যা লগ 4 জ ফাইলটির সাথে বিশৃঙ্খলা ছাড়াই কাজ করে - তবে আমি যখন এটি চেষ্টা করি তখনও আমি সতর্কতা পেতে পারি ..., এক্সিকিউটর 15): টাস্কিল্ড (আরেকটি প্রত্যয়
মিস্টারকার্টনোলজি

5

TL; ড

স্পার্ক প্রসঙ্গে আপনি ব্যবহার করতে পারেন:

sc.setLogLevel(<logLevel>)

যেখানে loglevelসব, ডিবাগ, ত্রুটি, মারাত্মক, তথ্য, বন্ধ, ট্রেস হতে পারে অথবা সতর্ক করতে পারেন।


Details-

অভ্যন্তরীণভাবে, setLogLevelকলগুলি কল করে org.apache.log4j.Level.toLevel(logLevel)যে এটি তখন ব্যবহার করে সেট করতে ব্যবহার করে org.apache.log4j.LogManager.getRootLogger().setLevel(level)

আপনি সরাসরি লগিং স্তরগুলি OFFব্যবহার করে সেট করতে পারেন :

LogManager.getLogger("org").setLevel(Level.OFF)

আপনি স্পার্ক শেলের জন্য ডিফল্ট লগিং সেট আপ করতে পারেন conf/log4j.propertiesconf/log4j.properties.templateএকটি সূচনা পয়েন্ট হিসাবে ব্যবহার করুন ।

স্পার্ক অ্যাপ্লিকেশনগুলিতে লগ স্তর নির্ধারণ করা

একক স্পার্ক অ্যাপ্লিকেশনগুলিতে বা স্পার্ক শেল সেশনে থাকাকালীন, নিম্নলিখিতটি ব্যবহার করুন:

import org.apache.log4j.{Level, Logger}

Logger.getLogger(classOf[RackResolver]).getLevel
Logger.getLogger("org").setLevel(Level.OFF)
Logger.getLogger("akka").setLevel(Level.OFF)

লগিং অক্ষম করা (লগ 4 জে):

conf/log4j.propertiesসম্পূর্ণ লগিং নিষ্ক্রিয় করতে নিম্নলিখিতটি ব্যবহার করুন :

log4j.logger.org=OFF

তথ্যসূত্র: জেসেক লাসকোভস্কি দ্বারা মাস্টারিং স্পার্ক।


3

কমান্ড লাইনে করা সহজ ...

spark2-submit --driver-java-options="-Droot.logger=ERROR,console" ..অন্যান্য অপশন..


কি spark2-submit?
vy32

স্পার্ক 2-জমা স্পার্ক 2 এর জন্য ব্যবহৃত হয়।
নেফিলিম

3

কেবলমাত্র আপনার স্পার্ক-শেল বা স্পার্ক-জমা কমান্ডে পরম নীচে যুক্ত করুন

--conf "spark.driver.extraJavaOptions=-Dlog4jspark.root.logger=WARN,console"

Log4j.properties ফাইল থেকে যথাযথ সম্পত্তির নাম (log4jspark.root.logger এখানে) দেখুন। আশা করি এটি সাহায্য করবে, চিয়ার্স!


1
কমান্ড-লাইন থেকে এটি সেট করা দুর্দান্ত হত। তবে এটি আমার পক্ষে কার্যকর হয়নি।
সোভেদেব

2

একটি আকর্ষণীয় ধারণাটি এখানে প্রস্তাবিত রোলিং অ্যাপেন্ডারটি ব্যবহার করা: http://shzhangji.com/blog/2015/05/31/spark-streaming-logging-configration/ যাতে আপনি কনসোলের জায়গাকে "দূষিত " না করেন তবে এখনও $ YOUR_LOG_PATH_HERE / $ {dm.logging.name} .log এর অধীনে ফলাফল দেখতে সক্ষম হবেন।

    log4j.rootLogger=INFO, rolling

log4j.appender.rolling=org.apache.log4j.RollingFileAppender
log4j.appender.rolling.layout=org.apache.log4j.PatternLayout
log4j.appender.rolling.layout.conversionPattern=[%d] %p %m (%c)%n
log4j.appender.rolling.maxFileSize=50MB
log4j.appender.rolling.maxBackupIndex=5
log4j.appender.rolling.file=$YOUR_LOG_PATH_HERE/${dm.logging.name}.log
log4j.appender.rolling.encoding=UTF-8

আর একটি পদ্ধতি যা কারণটি সমাধান করে তা হ'ল আপনার সাধারণত কোন ধরণের লগিং থাকে তা পর্যবেক্ষণ করা (বিভিন্ন মডিউল এবং নির্ভরতা থেকে আসা) এবং লগিংয়ের জন্য প্রতিটি গ্রানুলারিটির জন্য সেট করা হয়, "ভার্চুয়াল" তৃতীয় পক্ষের লগগুলি পরিবর্তন করার সময়

এই ক্ষেত্রে,

    # Silence akka remoting
log4j.logger.Remoting=ERROR
log4j.logger.akka.event.slf4j=ERROR
log4j.logger.org.spark-project.jetty.server=ERROR
log4j.logger.org.apache.spark=ERROR
log4j.logger.com.anjuke.dm=${dm.logging.level}
log4j.logger.org.eclipse.jetty=WARN
log4j.logger.org.eclipse.jetty.util.component.AbstractLifeCycle=ERROR
log4j.logger.org.apache.spark.repl.SparkIMain$exprTyper=INFO
log4j.logger.org.apache.spark.repl.SparkILoop$SparkILoopInterpreter=INFO

0
  1. অন্যান্য log4j.rootCategory = ERROR, কনসোল দ্বারা বর্ণিত কনফারেন্স / লগ 4j.properties সামঞ্জস্য করুন
  2. আপনার স্পার্ক কাজটি কার্যকর করার সময় আপনি log4j.properties ফাইল পাথ দিয়ে - ফাইল ফ্ল্যাগটি পাস করার সময় নিশ্চিত হন
  3. যদি এটি এখনও কাজ না করে তবে আপনার কাছে একটি জার থাকতে পারে যা log4j.properties রয়েছে যা আপনার নতুন লগ 4j.properties এর আগে ডাকা হচ্ছে। জার থেকে সেই log4j.properties সরান (উপযুক্ত হলে)

0
sparkContext.setLogLevel("OFF")

1
আমি উভয়ই করেছি - log4j.properties থেকে .template প্রত্যয়টি মুছে ফেলে এবং স্তরটি ERROR এ সেট করেছিলাম এবং val rootLogger = Logger.getRootLogger() rootLogger.setLevel(Level.ERROR) এটি কাজ করেছে
স্যাম-টি

0

উপরের সমস্ত পোস্টের পাশাপাশি, এখানে আমার জন্য সমস্যাটি সমাধান করা হয়েছে।

লার্গারগুলিকে আবদ্ধ করতে স্পার্ক slf4j ব্যবহার করে। যদি লগ 4 জে প্রথম বাঁধাই না পাওয়া যায় তবে আপনি log4j.properties ফাইলগুলি যা চান তা সম্পাদনা করতে পারেন, লগারগুলি এমনকি ব্যবহৃত হয় না। উদাহরণস্বরূপ, এটি একটি সম্ভব SLF4J আউটপুট হতে পারে:

SLF4J: শ্রেণীর পথে একাধিক SLF4J বাইন্ডিং রয়েছে। এসএলএফ 4 জে: বাঁধার সন্ধান পেয়েছে [জার: ফাইল: / সি: / ইউজার / ./2 এম 2/repository/org/slf4j/slf4j-simple/1.6.6/slf4j-simple-1.6.6.jar! / Org / slf4j / ইমপ্ল / স্ট্যাটিকলগারবিন্ডার.ক্লাস] এসএলএফ 4 জে: বাঁধাই পাওয়া গেছে [জার: ফাইল: / সি: / ইউজারস / এম / 2 / রেপোসিটরি / অর্গস / এসএফ 4j/slf4j-log4j12/1.7.19/slf4j-log4j12-1.7.19.jar ! /org/slf4j/impl/StaticLoggerBinder.class] SLF4J: দেখুন http://www.slf4j.org/codes.html#multiple_bindings একটি ব্যাখ্যা জন্য। এসএলএফ 4 জে: আসল বাঁধাই প্রকারের [org.slf4j.impl.SimpleLoggerFactory]

সুতরাং এখানে সিম্পললগারফ্যাক্টরি ব্যবহার করা হয়েছিল, যা লগ 4 জে সেটিংসের বিষয়ে চিন্তা করে না।

আমার প্রকল্পের মাধ্যমে slf4j- সাধারণ প্যাকেজ বাদ দিচ্ছে

<dependency>
        ...
        <exclusions>
            ...
            <exclusion>
                <artifactId>slf4j-simple</artifactId>
                <groupId>org.slf4j</groupId>
            </exclusion>
        </exclusions>
    </dependency>

সমস্যাটি সমাধান করুন, এখনই যেমন লগ 4 জে লগার বাঁধাই ব্যবহৃত হয় এবং log4j.properties এ কোনও সেটিংস মেনে চলা হয়। এফওয়াইআই আমার লগ 4 জে প্রোপার্টি ফাইলে রয়েছে (সাধারণ কনফিগারেশন ছাড়াও)

log4j.rootLogger=WARN, stdout
...
log4j.category.org.apache.spark = WARN
log4j.category.org.apache.parquet.hadoop.ParquetRecordReader = FATAL
log4j.additivity.org.apache.parquet.hadoop.ParquetRecordReader=false
log4j.logger.org.apache.parquet.hadoop.ParquetRecordReader=OFF

আশাকরি এটা সাহায্য করবে!


0

এই আমার জন্য কাজ করে। কেবল ERROR বার্তাগুলি হিসাবে প্রদর্শিত হবে stdout, log4j.propertiesফাইলটি দেখতে পারে:

# Root logger option
log4j.rootLogger=ERROR, stdout
# Direct log messages to stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n

দ্রষ্টব্য: রাখুন log4j.propertiessrc/main/resources কার্যকর হতে ফোল্ডারে ফাইল । এবং যদি log4j.propertiesঅস্তিত্ব না থাকে (অর্থ ফাইল sparkব্যবহার করা হয় log4j-defaults.properties) তবে আপনি এটিকে তৈরি করে তৈরি করতে পারেন SPARK_HOME/confএবং তারপরে mv log4j.properties.template log4j.propertiesএবং তারপরে উপরে বর্ণিত পরিবর্তনগুলি নিয়ে এগিয়ে যেতে পারেন।


0

যদি .setLogLevel()বিবৃতিগুলি সন্নিবেশ করার জন্য আপনার জাভা কোড সম্পাদনা করার ক্ষমতা না থাকে এবং আপনি আরও বেশি বাহ্যিক ফাইল স্থাপন করতে চান না, আপনি এটি সমাধান করার জন্য একটি জোর বল প্রয়োগ করতে পারেন। গ্রেপ ব্যবহার করে কেবল INFO লাইনগুলি ফিল্টার করুন।

spark-submit --deploy-mode client --master local <rest-of-cmd> | grep -v -F "INFO"

0

যদি অন্য কেউ আটকে থাকে,

উপরের কিছুই আমার পক্ষে কাজ করেনি। আমাকে সরিয়ে ফেলতে হয়েছিল

implementation group: "ch.qos.logback", name: "logback-classic", version: "1.2.3"
implementation group: 'com.typesafe.scala-logging', name: "scala-logging_$scalaVersion", version: '3.9.2'

লগগুলি অদৃশ্য হওয়ার জন্য আমার বিল্ড.gradle থেকে। টিএলডিআর: অন্য কোনও লগিং ফ্রেমওয়ার্ক আমদানি করবেন না, আপনি ঠিক ব্যবহার করে ভাল হওয়া উচিতorg.apache.log4j.Logger


0

লগগুলি পুরোপুরি বন্ধ করার আর একটি উপায় হ'ল:

    import org.apache.log4j.Appender;
    import org.apache.log4j.BasicConfigurator;
    import org.apache.log4j.varia.NullAppender;

    public class SomeClass {

        public static void main(String[] args) {
            Appender nullAppender = new NullAppender();
            BasicConfigurator.configure(nullAppender);

            {...more code here...}

        }
    }

এটি আমার পক্ষে কাজ করেছে। একটি নাল অ্যাপেনডর হলেন

একটি অ্যাপেন্ডার যা লগ ইভেন্টগুলিকে উপেক্ষা করে। ( https://logging.apache.org/log4j/2.x/log4j-core/apidocs/org/apache/logging/log4j/core/appender/NullAppender.html )

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.