

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# JupyterHub 配置和管理
<a name="emr-jupyterhub-administer"></a>

JupyterHub 相关组件在运行 Ubuntu 操作系统的名为 `jupyterhub` Docker 容器中运行。有多种方法可用于管理此容器内运行的组件。

**警告**  
在此容器内执行的自定义将在此容器重启后不复存在。建议为容器配置编写脚本或以其它方式实现容器配置的自动化，以便可以更轻松地重现自定义。

## 使用命令行管理
<a name="emr-jupyterhub-administer-cli"></a>

当使用 SSH 连接到主节点后，可以通过使用 Docker 命令行界面 (CLI) 并按名称 (`jupyterhub`) 或 ID 指定容器来发出命令。例如，`sudo docker exec jupyterhub command` 将运行容器内运行的操作系统或应用程序识别的命令。可以使用此方法将用户添加到操作系统和在 Docker 容器内安装其它应用程序和库。例如，默认容器映像包括用于安装软件包的 Conda，因此可能在主节点命令行上运行以下命令以在容器内安装应用程序 Keras：

```
sudo docker exec jupyterhub conda install keras
```

## 通过提交步骤管理
<a name="emr-jupyterhub-administer-steps"></a>

步骤是将工作提交到集群的一种方式。可以在启动集群时提交步骤，也可以将步骤提交给正在运行的集群。可以使用 `command-runner.jar` 将在命令行上运行的命令作为步骤提交。有关更多信息，请参阅《Amazon EMR 管理指南》**中的[使用 CLI 和控制台执行步骤](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-work-with-steps.html)，以及[在 Amazon EMR 集群上运行命令和脚本](emr-commandrunner.md)。

例如，您可以在本地计算机上使用以下 AWS CLI 命令来安装 Keras，方法与在前面的示例中通过主节点的命令行所做的方式相同：

```
aws emr add-steps --cluster-id MyClusterID --steps Name="Command Runner",Jar="command-runner.jar",Args="/usr/bin/sudo","/usr/bin/docker","exec","jupyterhub","conda","install","keras"
```

此外，可以为步骤的序列编写脚本，并将脚本上载到 Amazon S3，然后在创建集群或将脚本作为步骤添加时使用 `script-runner.jar` 运行脚本。有关更多信息，请参阅[在 Amazon EMR 集群上运行命令和脚本](emr-commandrunner.md)。有关示例，请参阅[示例：用于添加多个用户的清除脚本](emr-jupyterhub-pam-users.md#emr-jupyterhub-script-multuser)。

## 使用 REST 进行管理 APIs
<a name="emr-jupyterhub-administer-rest"></a>

Jupyter 和的 HTTP 代理 JupyterHub 提供了 REST APIs ，你可以用它来发送请求。 JupyterHub要向发送请求 JupyterHub，您必须在请求中传递一个 API 令牌。可以从主节点命令行使用 `curl` 命令执行 REST 命令。有关更多信息，请参阅以下资源：
+ 在@@ [ JupyterHub的文档中使用的 REST API](http://jupyterhub.readthedocs.io/en/latest/reference/rest.html) JupyterHub，其中包括生成 API 令牌的说明
+ [Jupyter 笔记本服务器](https://github.com/jupyter/jupyter/wiki/Jupyter-Notebook-Server-API) API 已开启 GitHub
+ [configurable-http-proxy](https://github.com/jupyterhub/configurable-http-proxy)on GitHub

以下示例演示了如何使用的 REST API JupyterHub 来获取用户列表。该命令传递先前生成的管理员令牌，并使用默认端口 9443，将输出通过管道传输到 [jq 以便于查看： JupyterHub](https://stedolan.github.io/jq/)

```
curl -XGET -s -k https://$HOST:9443/hub/api/users \
-H "Authorization: token $admin_token" | jq .
```