【发布时间】:2016-03-02 21:01:26
【问题描述】:
我已将 Spark 配置为在两个节点上运行,HDFS 托管输入文件。我想将 metrics.properties 提供的所有统计文件转储到 HDFS 或每个节点的本地目录。
这是我对 metrics.properties 的统计信息位置的配置:
*.sink.csv.directory=hdfs://ip:port/user/spark_stats/
我也尝试在每个节点中建立一个临时的本地目录,并配置metrics.properties如下:
*.sink.csv.directory=/tmp/spark_stats/
两种方法都给出如下错误:
16/03/02 15:41:49 WARN CsvReporter: Error writing to jvm.PS-MarkSweep.count
java.io.IOException: No such file or directory
at java.io.UnixFileSystem.createFileExclusively(Native Method)
at java.io.File.createNewFile(File.java:1006)
at com.codahale.metrics.CsvReporter.report(CsvReporter.java:241)
at com.codahale.metrics.CsvReporter.reportGauge(CsvReporter.java:234)
at com.codahale.metrics.CsvReporter.report(CsvReporter.java:150)
at com.codahale.metrics.ScheduledReporter.report(ScheduledReporter.java:162)
at com.codahale.metrics.ScheduledReporter$1.run(ScheduledReporter.java:117)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:304)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:178)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:745)
16/03/02 15:41:49 WARN CsvReporter: Error writing to jvm.PS-MarkSweep.count
java.io.IOException: No such file or directory
at java.io.UnixFileSystem.createFileExclusively(Native Method)
at java.io.File.createNewFile(File.java:1006)
....
我的应用程序仍然可以正常运行并完成。但火花日志文件显示写入统计文件时出错。有没有人遇到过这个问题?
跟进:仔细查看错误信息,所有的IO错误都是写入master jvm信息引起的。如果我指定只转储工作者、驱动程序和执行程序的 jvm 信息,则没有错误。
可以将此行放入 metric.properties 文件中的修复:
executor.source.jvm.class=org.apache.spark.metrics.source.JvmSource
【问题讨论】:
标签: file-io apache-spark hdfs metrics