1

当我使用 docker 启动 spark-notebook 并创建一个新工作表时。下次我启动它时,工作表不在那里。

这是命令:

docker run -v /Users/pkerp/projects/chairliftplot/:/mnt -p 9000:9000 andypetrella/spark-notebook:0.2.0-spark-1.2.0-hadoop-1.0.4

这是警告/信息:

15/02/09 08:38:12 WARN Remoting: Tried to associate with unreachable remote address [akka.tcp://Remote@127.0.0.1:41602]. Address is now gated for 5000 ms, all messages to this address will be delivered to dead letters. Reason: Connection refused: /127.0.0.1:41602
15/02/09 08:38:12 INFO remote.RemoteActorRefProvider$RemoteDeadLetterActorRef: Message [akka.remote.RemoteWatcher$Heartbeat$] from Actor[akka://NotebookServer/system/remote-watcher#-457307005] to Actor[akka://NotebookServer/deadLetters] was not delivered. [8] dead letters encountered. This logging can be turned off or adjusted with configuration settings 'akka.log-dead-letters' and 'akka.log-dead-letters-during-shutdown'.

这是配置错误还是其他问题?

编辑:

所以这个问题有几个方面。

  1. 当使用 ctrl-c 关闭正在运行的 docker 容器时,它实际上仍然存在。当我使用上面的命令重新运行它时,它会启动一个单独的新容器,该容器没有新创建的笔记本。

这可以通过查看正在运行的容器列表来缓解,使用docker ps找到正在运行的容器并使用 附加到它docker attach process_id。数据仍将存在。

  1. 使用已安装的卷来存储笔记本会导致权限问题。容器内挂载的目录只有所有者写权限,所有者为用户1000。spark-notebook 作为用户守护进程(用户 id 1)运行。

这是github 上有关此问题的长线程,但没有明确的解决方案。

4

1 回答 1

0

Dockerfile 将继续发展,但现在至少我们可以在 docker 容器之外备份我们的 notebook。

这可以解决问题: docker run --rm -v /Users/pkerp/projects/chairliftplot:/opt/docker/notebooks/ext -p 9000:9000 andypetrella/spark-notebook:0.6.0-scala-2.10.4-spark-1.4.1-hadoop-2.6.0

这样该文件夹Users/pkerp/projects/chairliftplot将包含extspark-notebook 列表中文件夹中的所有笔记本。

这意味着:

  • 文件夹中的所有笔记本Users/pkerp/projects/chairliftplot都将可见ext
  • 文件夹中所有新创建的笔记本ext在主机文件夹中可用Users/pkerp/projects/chairliftplot

当然,您也可以使用: docker run --rm -v /Users/pkerp/projects/chairliftplot:/opt/docker/notebooks -p 9000:9000 andypetrella/spark-notebook:0.6.0-scala-2.10.4-spark-1.4.1-hadoop-2.6.0 它将丢弃所有默认笔记本并仅显示/Users/pkerp/projects/chairliftplot. 但是,这样所有新创建的笔记本都将在主机中可用,无论它们是在哪个文件夹中创建的

于 2015-08-05T00:41:33.093 回答