我正在寻找一种解决方案,能够在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)