

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

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

JupyterHub 和相關元件在名為 `jupyterhub` 的 Docker 容器內執行，該容器執行 Ubuntu 作業系統。您可使用多種方法來管理容器內執行的元件。

**警告**  
如果容器重新啟動，您在容器內執行的自訂項目可能不會保留。我們建議您編寫指令碼或自動化容器組態，如此您便可更容易的重現自訂項目。

## 使用命令列進行管理
<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)。如需範例，請參閱 [範例：新增多個使用者的 Bash 指令碼](emr-jupyterhub-pam-users.md#emr-jupyterhub-script-multuser)。

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

適用於 JupyterHub 的 Jupyter、JupyterHub 和 HTTP 代理提供您用於傳送請求的 REST API。若要傳送請求至 JupyterHub，您必須與請求一起傳遞 API 字符。您可以從主節點命令列使用 `curl` 命令來執行 REST 命令。如需詳細資訊，請參閱下列資源：
+ JupyterHub 文件中的[使用 JupyterHub 的 REST API](http://jupyterhub.readthedocs.io/en/latest/reference/rest.html)，其中包含產生 API 字符的說明。
+ GitHub 上的 [Jupyter 筆記本伺服器 API](https://github.com/jupyter/jupyter/wiki/Jupyter-Notebook-Server-API)
+ GitHub 上的 [configurable-http-proxy](https://github.com/jupyterhub/configurable-http-proxy)

以下範例示範了如何使用適用於 JupyterHub 的 REST API 以取得使用者清單。該指令會傳遞先前產生的管理字符，並針對 JupyterHub 使用預設的 9443 連接埠，將輸出透過管道傳送到 [jq](https://stedolan.github.io/jq/)，以便於檢視：

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