使用 docker-compose 的本地数据集群
local dask cluster using docker-compose
我想创建一个 docker-compose.yml 包含我们公司的分析工具链。为此,我添加了 dask。 docker-compoe.yml 看起来像这样:
docker-compose.yml
version: '3'
services:
jupyter:
build: docker/jupyter/.
ports:
- "8899:8899"
depends_on:
- dask-scheduler
- dask-worker
volumes:
- ./notebooks:/notebooks
dask-scheduler:
build:
docker/dask/.
hostname: dask-scheduler
ports:
- "8786:8786"
- "8787:8787"
volumes:
- ./notebooks:/notebooks
command: ["dask-scheduler"]
dask-worker:
build:
docker/dask/.
depends_on:
- dask-scheduler
volumes:
- ./notebooks:/notebooks
command: ["dask-worker", "tcp://dask-scheduler:8786"]
为了构建两个 dask 容器,我使用这个 Docker 文件:
docker/dask/Dockerfile
FROM python:3.7
RUN apt-get update -y && apt-get install -y python3-pip libsnappy-dev
RUN pip install numpy
RUN pip install dask
RUN pip install distributed
RUN pip install fsspec
RUN pip install fastavro
RUN pip install python-snappy
RUN pip install dask[bag]
RUN pip install dask[dataframe]
RUN pip install jupyter-server-proxy
# Dashboard
EXPOSE 8787
# Scheduler
EXPOSE 8786
在我的笔记本中,我使用以下代码片段连接到调度程序:
from dask.distributed import Client
client = Client(address="dask-scheduler:8786")
client.dashboard_link
=> 'http://dask-scheduler:8787/status'
使用容器的 IP 也不行。
这让我可以进行我要求的计算并且工作正常。但不起作用的是仪表板,它应该在 http://localhost:8787/status 上可用。这只是 returns
404: Not Found
我的问题 1 是:我做错了什么? 我找到了
--仪表板地址
文档中的参数并尝试了各种组合,但这现在对仪表板的输出进行了任何更改。这是我的第二个问题:
为什么参数在调度程序和工作程序中可用
最后我需要做哪些改变才能让它发挥作用?在 Mac OS 版本 2.3.0.3 和引擎 19.03.8
上使用 Docker 桌面社区
感谢任何提示。
调试了很久,终于可以在之前的运行环境下破解了。
给定 bokeh="==2.0.2"
按预期显示仪表板。
但是在我的 Pipefile 中使用最新版本 bokeh="==2.1.0"
显示了相应的错误消息。也许它也是各种包的不同版本的组合。
以防其他人发现:将您的 bokeh 版本修复为 2.0.2 以恢复仪表板。使用没有固定版本的最新版本会破坏它。所以它与 docker 或 docker-compose 无关。
编辑:它现在已在最新的 dask 版本 2.19.0 中修复 - 因此更新您的 dask 依赖项也应该有效。
我想创建一个 docker-compose.yml 包含我们公司的分析工具链。为此,我添加了 dask。 docker-compoe.yml 看起来像这样:
docker-compose.yml
version: '3'
services:
jupyter:
build: docker/jupyter/.
ports:
- "8899:8899"
depends_on:
- dask-scheduler
- dask-worker
volumes:
- ./notebooks:/notebooks
dask-scheduler:
build:
docker/dask/.
hostname: dask-scheduler
ports:
- "8786:8786"
- "8787:8787"
volumes:
- ./notebooks:/notebooks
command: ["dask-scheduler"]
dask-worker:
build:
docker/dask/.
depends_on:
- dask-scheduler
volumes:
- ./notebooks:/notebooks
command: ["dask-worker", "tcp://dask-scheduler:8786"]
为了构建两个 dask 容器,我使用这个 Docker 文件:
docker/dask/Dockerfile
FROM python:3.7
RUN apt-get update -y && apt-get install -y python3-pip libsnappy-dev
RUN pip install numpy
RUN pip install dask
RUN pip install distributed
RUN pip install fsspec
RUN pip install fastavro
RUN pip install python-snappy
RUN pip install dask[bag]
RUN pip install dask[dataframe]
RUN pip install jupyter-server-proxy
# Dashboard
EXPOSE 8787
# Scheduler
EXPOSE 8786
在我的笔记本中,我使用以下代码片段连接到调度程序:
from dask.distributed import Client
client = Client(address="dask-scheduler:8786")
client.dashboard_link
=> 'http://dask-scheduler:8787/status'
使用容器的 IP 也不行。
这让我可以进行我要求的计算并且工作正常。但不起作用的是仪表板,它应该在 http://localhost:8787/status 上可用。这只是 returns
404: Not Found
我的问题 1 是:我做错了什么? 我找到了 --仪表板地址
文档中的参数并尝试了各种组合,但这现在对仪表板的输出进行了任何更改。这是我的第二个问题:
为什么参数在调度程序和工作程序中可用
最后我需要做哪些改变才能让它发挥作用?在 Mac OS 版本 2.3.0.3 和引擎 19.03.8
上使用 Docker 桌面社区感谢任何提示。
调试了很久,终于可以在之前的运行环境下破解了。
给定 bokeh="==2.0.2"
按预期显示仪表板。
但是在我的 Pipefile 中使用最新版本 bokeh="==2.1.0"
显示了相应的错误消息。也许它也是各种包的不同版本的组合。
以防其他人发现:将您的 bokeh 版本修复为 2.0.2 以恢复仪表板。使用没有固定版本的最新版本会破坏它。所以它与 docker 或 docker-compose 无关。
编辑:它现在已在最新的 dask 版本 2.19.0 中修复 - 因此更新您的 dask 依赖项也应该有效。