我一直在使用PaperMill定期执行我的python笔记本。要执行计算密集型笔记本,我需要连接到在 EMR 集群中运行的远程内核。
对于 Jupyter 笔记本,我可以通过使用jupyter notebook --gateway-url=http://my-gateway-server:8888
启动 jupyter 服务器来做到这一点,并且我能够在远程内核上执行我的代码。但是我如何让我的本地python代码(通过PaperMill(使用远程内核呢?在内核管理器中进行哪些更改以连接到远程内核?
我能找到的一个相关的SO答案就在这里。这建议将端口转发到远程服务器,并使用来自服务器的连接文件初始化 KernelManager。我无法做到这一点,因为blockingkernelmanager
不再在Ipython.zmp中,我也更喜欢像jupyter那样的HTTP连接。
黑客方法 - 设置一个 shell 脚本来执行以下操作:
- 使用
hadoop
用户在 EMR 主节点上创建 python 环境 - 在您的环境中安装 Sparkmagic 并按照 sparkmagic 的 README.md 文件中的说明配置所有内核
- 将笔记本复制到主节点/直接从 s3 位置使用它
-
与造纸厂一起运行:
Papermill S3://path/to/notebook/input.ipynbs3://path/to/notebook/output.ipynb -p param=1
如果您的集群主节点每次都相同,则步骤 1 和 2 是一次性要求。
稍微好一点的方法:
- 在 Jupyter 本身中设置一个远程内核:远程内核 通过
- 选择此远程内核,将造纸厂作为普通笔记本执行
我正在将这两种方法用于不同的用例,它们现在似乎工作正常。