SparkContext 错误 - 找不到文件 /tmp/spark-events 不存在

Posted

技术标签:

【中文标题】SparkContext 错误 - 找不到文件 /tmp/spark-events 不存在【英文标题】:SparkContext Error - File not found /tmp/spark-events does not exist 【发布时间】:2016-11-15 22:57:58 【问题描述】:

通过 API 调用运行 Python Spark 应用程序 - 提交申请时 - 响应 - 失败 SSH 进入 Worker

我的python应用存在于

/root/spark/work/driver-id/wordcount.py

错误可以在

中找到
/root/spark/work/driver-id/stderr

显示以下错误 -

Traceback (most recent call last):
  File "/root/wordcount.py", line 34, in <module>
    main()
  File "/root/wordcount.py", line 18, in main
    sc = SparkContext(conf=conf)
  File "/root/spark/python/lib/pyspark.zip/pyspark/context.py", line 115, in __init__
  File "/root/spark/python/lib/pyspark.zip/pyspark/context.py", line 172, in _do_init
  File "/root/spark/python/lib/pyspark.zip/pyspark/context.py", line 235, in _initialize_context
  File "/root/spark/python/lib/py4j-0.9-src.zip/py4j/java_gateway.py", line 1064, in __call__
  File "/root/spark/python/lib/py4j-0.9-src.zip/py4j/protocol.py", line 308, in get_return_value
py4j.protocol.Py4JJavaError: An error occurred while calling None.org.apache.spark.api.java.JavaSparkContext.
: java.io.FileNotFoundException: File file:/tmp/spark-events does not exist.
  at org.apache.hadoop.fs.RawLocalFileSystem.getFileStatus(RawLocalFileSystem.java:402)
  at org.apache.hadoop.fs.FilterFileSystem.getFileStatus(FilterFileSystem.java:255)
  at org.apache.spark.scheduler.EventLoggingListener.start(EventLoggingListener.scala:100)
  at org.apache.spark.SparkContext.<init>(SparkContext.scala:549)
  at org.apache.spark.api.java.JavaSparkContext.<init>(JavaSparkContext.scala:59)
  at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
  at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
  at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
  at java.lang.reflect.Constructor.newInstance(Constructor.java:526)
  at py4j.reflection.MethodInvoker.invoke(MethodInvoker.java:234)
  at py4j.reflection.ReflectionEngine.invoke(ReflectionEngine.java:381)
  at py4j.Gateway.invoke(Gateway.java:214)
  at py4j.commands.ConstructorCommand.invokeConstructor(ConstructorCommand.java:79)
  at py4j.commands.ConstructorCommand.execute(ConstructorCommand.java:68)
  at py4j.GatewayConnection.run(GatewayConnection.java:209)
  at java.lang.Thread.run(Thread.java:745)

这表明 - /tmp/spark-events 不存在 - 这是真的 但是,在 wordcount.py 中

from pyspark import SparkContext, SparkConf

... few more lines ...

def main():
    conf = SparkConf().setAppName("MyApp").setMaster("spark://ec2-54-209-108-127.compute-1.amazonaws.com:7077")
    sc = SparkContext(conf=conf)
    sc.stop()

if __name__ == "__main__":
    main()

【问题讨论】:

禁用事件记录可能会有所帮助:SparkConf().set("spark.eventLog.enabled","false")... 【参考方案1】:

/tmp/spark-events 是 Spark 存储事件日志的位置。只需在主计算机中创建此目录即可。

$mkdir /tmp/spark-events
$ sudo /root/spark-ec2/copy-dir /tmp/spark-events/
RSYNC'ing /tmp/spark-events to slaves...
ec2-54-175-163-32.compute-1.amazonaws.com

【讨论】:

尝试在主机中创建目录。重试 API 调用。错误仍然存​​在 哦。所以我不得不在工人身上复制同样的东西。错误已解决。谢谢 “/tmp/spark-events”在哪里设置?我在 $SPARK_HOME/conf/spark-defaults.conf 中输入了以下属性: spark.eventLog.enabled true spark.eventLog.dir hdfs://host:port/user/root/spark-logs spark.history.fs.logDirectory hdfs://host:port/user/root/spark-logs【参考方案2】:

尝试在本地计算机上设置我的 spark 历史服务器时,我遇到了相同的“文件文件:/tmp/spark-events 不存在”。错误。我已将日志目录自定义为非默认路径。为了解决这个问题,我需要做两件事。

    编辑 $SPARK_HOME/conf/spark-defaults.conf -- 添加这两行 spark.history.fs.logDirectory /mycustomdir spark.eventLog.enabled true 创建从 /tmp/spark-events 到 /mycustomdir 的链接。ln -fs /tmp/spark-events /mycustomdir 理想情况下,第 1 步可以完全解决我的问题,但我仍然需要创建链接,所以我怀疑我可能错过了另一个设置。无论如何,一旦我这样做了,我就能够运行我的历史服务器并看到我的 webui 中记录了新的作业。

【讨论】:

对我有用,但我必须以相反的顺序创建符号链接。我做了 ln -fs /mycustomdir 。 /tmp/spark-events 我将 spark.eventLog.dir=/mycustomdir 添加到 spark-defaults.conf 中,因此不需要使用 ln 创建的软链接。【参考方案3】:

将 spark.eventLog.dir 用于客户端/驱动程序

spark.eventLog.dir=/usr/local/spark/history

并使用 spark.history.fs.logDirectory 作为历史服务器

spark.history.fs.logDirectory=/usr/local/spark/history

如中所述:How to enable spark-history server for standalone cluster non hdfs mode

至少按照 Spark 2.2.1 版

【讨论】:

【参考方案4】:

我刚刚在 master 节点上创建了/tmp/spark-events,然后分发到集群上的其他节点上工作。

mkdir /tmp/spark-events
rsync -a /tmp/spark-events slaves:/tmp/spark-events

我的 spark-default.conf:

spark.history.ui.port=18080
spark.eventLog.enabled=true
spark.history.fs.logDirectory=hdfs:///home/elon/spark/events

【讨论】:

以上是关于SparkContext 错误 - 找不到文件 /tmp/spark-events 不存在的主要内容,如果未能解决你的问题,请参考以下文章

Spark 错误 - 值文本文件不是 org.apache.spark.sparkcontext 的成员

无法启动 Terminal Services 服务。错误 126: 找不到指定的模块。

无法执行目录中的文件 错误2系统找不到指定文件怎么办?

请求解决错误:找不到文件 pubspec.yaml

易语言问题 错误(36): 找不到指定的对象成员命令名称“取文本长度”。

易语言的错误怎么办错误(36): 找不到指定的对象成员命令名称“创建内存”