小编Bog*_*n N的帖子

Scala中的Apache Spark日志记录

我正在寻找一种解决方案,能够在Apache Spark节点上执行代码时记录其他数据,这有助于稍后调查执行期间可能出现的一些问题.尝试使用传统的解决方案,例如com.typesafe.scalalogging.LazyLogging失败,因为日志实例无法在Apache Spark等分布式环境中进行序列化.

我已经调查了这个问题,现在我找到的解决方案就是使用这样的org.apache.spark.Logging特性:

class SparkExample with Logging {
  val someRDD = ...
  someRDD.map {
    rddElement => logInfo(s"$rddElement will be processed.")
    doSomething(rddElement)
  }
}
Run Code Online (Sandbox Code Playgroud)

然而,看起来Logging特性不是Apache Spark的永久解决方案,因为它被标记为@DeveloperApi,类文档提到:

这可能会在将来的版本中更改或删除.

我想知道 - 他们是否可以使用任何已知的日志记录解决方案,并允许我在Apache Spark节点上执行RDD时记录数据?

@Later Edit:下面的一些评论建议使用Log4J.我尝试过使用Log4J,但是当我从Scala类(而不是Scala对象)使用logger时我仍然遇到问题.这是我的完整代码:

import org.apache.log4j.Logger
import org.apache.spark._

object Main {
 def main(args: Array[String]) {
  new LoggingTestWithRDD().doTest()
 }
}

class LoggingTestWithRDD extends Serializable {

  val log = Logger.getLogger(getClass.getName)

  def doTest(): Unit = {
   val conf = new SparkConf().setMaster("local[4]").setAppName("LogTest")
   val spark = new SparkContext(conf)

   val …
Run Code Online (Sandbox Code Playgroud)

logging scala apache-spark

54
推荐指数
3
解决办法
4万
查看次数

标签 统计

apache-spark ×1

logging ×1

scala ×1