【问题标题】:EMR JupyterHub: S3 persistence of notebooks not workingEMR JupyterHub:笔记本的 S3 持久性不工作
【发布时间】:2019-12-15 02:36:13
【问题描述】:

我正在尝试使用 JupyterHub 和 S3 持久性设置 EMR 集群。我有以下分类:

    {
        "Classification": "jupyter-s3-conf",
        "Properties": {
            "s3.persistence.enabled": "true",
            "s3.persistence.bucket": "my-persistence-bucket"
        }
    }

我正在通过以下步骤安装dask(否则,打开笔记本会导致500 错误):

  • command-runner.jar
  • 参数:/usr/bin/sudo /usr/bin/docker exec jupyterhub conda install dask

但是,当我打开一个新笔记本时,它并没有被持久化。桶保持空。集群确实可以访问 S3,因为在运行具有相同配置的 Spark 作业时,它可以使用相同的存储桶读取和写入 S3。

但是,在我的 master 上查看 jupyter 日志时,我看到了这个:

[E 2019-08-07 12:27:14.609 SingleUserNotebookApp application:574] Exception while loading config file /etc/jupyter/jupyter_notebook_config.py
    Traceback (most recent call last):
      File "/opt/conda/lib/python3.6/site-packages/traitlets/config/application.py", line 562, in _load_config_files
        config = loader.load_config()
      File "/opt/conda/lib/python3.6/site-packages/traitlets/config/loader.py", line 457, in load_config
        self._read_file_as_dict()
      File "/opt/conda/lib/python3.6/site-packages/traitlets/config/loader.py", line 489, in _read_file_as_dict
        py3compat.execfile(conf_filename, namespace)
      File "/opt/conda/lib/python3.6/site-packages/ipython_genutils/py3compat.py", line 198, in execfile
        exec(compiler(f.read(), fname, 'exec'), glob, loc)
      File "/etc/jupyter/jupyter_notebook_config.py", line 5, in <module>
        from s3contents import S3ContentsManager
      File "/opt/conda/lib/python3.6/site-packages/s3contents/__init__.py", line 15, in <module>
        from .gcsmanager import GCSContentsManager
      File "/opt/conda/lib/python3.6/site-packages/s3contents/gcsmanager.py", line 8, in <module>
        from s3contents.gcs_fs import GCSFS
      File "/opt/conda/lib/python3.6/site-packages/s3contents/gcs_fs.py", line 3, in <module>
        import gcsfs
      File "/opt/conda/lib/python3.6/site-packages/gcsfs/__init__.py", line 4, in <module>
        from .dask_link import register as register_dask
      File "/opt/conda/lib/python3.6/site-packages/gcsfs/dask_link.py", line 56, in <module>
        register()
      File "/opt/conda/lib/python3.6/site-packages/gcsfs/dask_link.py", line 51, in register
        dask.bytes.core._filesystems['gcs'] = DaskGCSFileSystem
    AttributeError: module 'dask.bytes.core' has no attribute '_filesystems'

我错过了什么,出了什么问题?

【问题讨论】:

  • 什么版本的 emr? 5.24 之后没有 dask 运行良好。我现在正在使用它。
  • 5.26,不包括 dask 时出现错误 500。
  • 更新:我启动了一个“空白”集群,它在那里工作。所以它可能与我的其他库不兼容。

标签: amazon-s3 jupyter-notebook amazon-emr


【解决方案1】:

事实证明,这是升级和安装自定义软件包破坏兼容性的连锁反应。我使用command-runner 在我的集群中安装了其他软件包,但我遇到了一些问题——我只能运行一个conda install 命令,第二个因no module named 'conda' 而失败。

所以我首先通过使用命令运行器执行 /usr/bin/sudo /usr/bin/docker exec jupyterhub conda update -n base conda 来更新 Anaconda。这导致jinja2 找不到markupsafe。安装 markupsafejupyterhub 拉到 1.0.0,这破坏了更多的东西。

这就是我如何让它工作的(按command-runner.jar的顺序执行):

  1. /usr/bin/sudo /usr/bin/docker exec jupyterhub conda update -n base conda 更新 Anaconda。
  2. /usr/bin/sudo /usr/bin/docker exec jupyterhub conda install --freeze-installed markupsafe 安装第 1 步后需要的 markupsafe
  3. 将我想要的附加软件包安装到容器中,但始终使用--freeze-installed 选项来避免破坏 EMR 安装的任何内容
  4. 从 S3 运行脚本的自定义引导操作也会使用 pip-3.6 从第 3 步安装我想要的包,因此它们也适用于 PySpark(要使其正常工作,它们必须直接安装在所有节点上)

【讨论】:

    猜你喜欢
    • 2019-09-19
    • 1970-01-01
    • 1970-01-01
    • 2019-04-11
    • 1970-01-01
    • 2019-10-09
    • 2020-01-14
    • 2019-02-14
    • 2020-06-02
    相关资源
    最近更新 更多