Ошибка SparkContext-файл не найден /tmp/spark-события не существуют

запуск приложения Python Spark через вызов API - При подаче заявки-ответ-не удалось SSH в рабочий

мое приложение 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-события не существуют-что верно Однако, в 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()

4 ответов


/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

при попытке настроить сервер истории spark на моем локальном компьютере у меня был тот же файл file:/tmp/spark-events не существует.' ошибка. Я настроил каталог журнала на путь, отличный от стандартного. Чтобы решить эту проблему, мне нужно сделать 2 вещи.

  1. edit $SPARK_HOME/conf / spark-по умолчанию.conf -- добавить эти 2 строчки spark.history.fs.logDirectory /mycustomdir spark.eventLog.enabled true
  2. создайте ссылку из /tmp /spark-events в / mycustomdir.
    ln -fs /tmp/spark-events /mycustomdir В идеале, Шаг 1 полностью решил бы мою проблему, но я все еще необходимо создать ссылку, поэтому я подозреваю, что, возможно, был еще один параметр, который я пропустил. Во всяком случае, как только я это сделал, я смог запустить свой historyserver и увидеть новые задания, зарегистрированные в моем webui.

использовать spark.с EventLog.dir для программы клиента / драйвера

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

и использовать spark.история.файловая система.logDirectory для сервера истории

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

как указано в: Как включить spark-history server для автономного кластера без режима hdfs

по крайней мере, в соответствии с Spark версии 2.2.1


Я только что создал /tmp/spark-events на узле {master}, а затем распределил его на другие узлы кластера для работы.

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

my spark-по умолчанию.conf:

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