

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

# 在 EMR Studio 中安裝和使用核心和程式庫
<a name="emr-managed-notebooks-installing-libraries-and-kernels"></a>

每個 EMR 筆記本都附帶一組預先安裝的程式庫和核心。如果叢集可存取核心和程式庫所在的儲存庫，則可以在 EMR 叢集中安裝其他程式庫和核心。例如，對於私有子網路中的叢集，您可能需要設定網路位址轉譯 (NAT)，並提供叢集存取公用 PyPI 儲存庫以安裝程式庫的路徑。如需有關針對不同網路組態來設定外部存取的詳細資訊，請參閱《Amazon VPC 使用者指南》**中的[案例和範例](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_Scenarios.html)。

**注意**  
EMR Notebooks 可在 主控台中做為 EMR Studio Workspaces 使用。主控台中的**建立工作區**按鈕可讓您建立新的筆記本。若要存取或建立工作區，EMR Notebooks 使用者需要其他 IAM 角色許可。如需詳細資訊，請參閱 [主控台中的 Amazon EMR Notebooks 是 Amazon EMR Studio Workspaces](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-managed-notebooks-migration.html) 和 [Amazon EMR 主控台](https://docs.aws.amazon.com/emr/latest/ManagementGuide/whats-new-in-console.html)。<a name="emr-managed-notebooks-serverless"></a>

EMR Serverless 應用程式隨附下列預先安裝的 Python 和 PySpark 程式庫：
+ **Python 程式庫** – ggplot、matplotlib、numpy、pandas、plotly、bokeh、scikit-learn、scipy、scipy
+ **PySpark 程式庫** - ggplot、matplotlib、numpy、pandas、plotly、bokeh、scikit-learn、scipy、scipy

## 在叢集主節點上安裝核心和 Python 程式庫
<a name="emr-managed-notebooks-cluster-kernel"></a>

使用 Amazon EMR 版本 5.30.0 及更新版本 (不包括 6.0.0)，您可以在叢集的主節點上安裝額外的 Python 程式庫和核心。安裝完成後，任何執行附接至叢集的 EMR 筆記本之使用者都可以使用這些核心和程式庫。以這種方式安裝的 Python 程式庫僅適用於在主節點上執行的程序。這些程式庫不會安裝在核心或任務節點上，也無法用於在這些節點上執行的執行程式。

**注意**  
對於 Amazon EMR 版本 5.30.1、5.31.0 和 6.1.0 版，必須採取其他步驟，才能在叢集的主節點上安裝核心和程式庫。  
若要啟用此功能，請執行下列操作：  
請確定附接至 EMR Notebooks 服務角色的許可政策允許執行下列動作：  
`elasticmapreduce:ListSteps`  
如需詳細資訊，請參閱 [EMR Notebooks 的服務角色](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-managed-notebooks-service-role.html)。
使用 AWS CLI 在設定 EMR 筆記本的叢集上執行步驟，如下列範例所示。必須使用步驟名稱 `EMRNotebooksSetup`。將 *us-east-1* 取代為叢集所在的區域。如需詳細資訊，請參閱[使用 AWS CLI將步驟新增至叢集](https://docs.aws.amazon.com/emr/latest/ManagementGuide/add-step-cli.html)。  

   ```
   aws emr add-steps --cluster-id MyClusterID --steps Type=CUSTOM_JAR,Name=EMRNotebooksSetup,ActionOnFailure=CONTINUE,Jar=s3://us-east-1.elasticmapreduce/libs/script-runner/script-runner.jar,Args=["s3://awssupportdatasvcs.com/bootstrap-actions/EMRNotebooksSetup/emr-notebooks-setup.sh"]
   ```

可以使用 `pip` 或 `conda` 在主節點的 `/emr/notebook-env/bin` 目錄中安裝核心和程式庫。

**Example - 安裝 Python 程式庫**  
從 Python3 核心中，在筆記本儲存格內以命令的形式執行 `%pip` magic 來安裝 Python 程式庫。  

```
%pip install pmdarima
```
可能需要重新啟動核心才能使用已更新的套件。也可以使用 [https://ipython.readthedocs.io/en/stable/interactive/magics.html#cellmagic-sh](https://ipython.readthedocs.io/en/stable/interactive/magics.html#cellmagic-sh) Spark magic 來調用 `pip`。  

```
%%sh
/emr/notebook-env/bin/pip install -U matplotlib
/emr/notebook-env/bin/pip install -U pmdarima
```
使用 PySpark 核心時，可以使用 `pip` 命令在叢集上安裝程式庫，或在 PySpark 筆記本中使用筆記本範圍的程式庫。  
若要從終端在叢集上執行 `pip` 命令，請先使用 SSH 連線到主節點，如下列命令所示。  

```
sudo pip3 install -U matplotlib
sudo pip3 install -U pmdarima
```
或者，可以使用筆記本範圍程式庫。使用筆記本範圍程式庫時，您的程式庫安裝僅限於工作階段的範圍，並發生在所有 Spark 執行程式上。如需詳細資訊，請參閱[使用筆記本範圍程式庫](#emr-managed-notebooks-custom-libraries-limitations)。  
如果想在 PySpark 核心內封裝多個 Python 程式庫，也可建立獨立的 Python 虛擬環境。如需範例，請參閱[使用 Virtualenv](https://spark.apache.org/docs/latest/api/python/tutorial/python_packaging.html#using-virtualenv)。  
若要在工作階段中建立 Python 虛擬環境，請在筆記本的第一個儲存格中使用 `%%configure` magic 命令的 Spark 屬性 `spark.yarn.dist.archives`，如下列範例所示。  

```
%%configure -f
{
   "conf": {
   "spark.yarn.appMasterEnv.PYSPARK_PYTHON":"./environment/bin/python",
   "spark.yarn.appMasterEnv.PYSPARK_DRIVER_PYTHON":"./environment/bin/python",
   "spark.yarn.dist.archives":"s3://amzn-s3-demo-bucket/prefix/my_pyspark_venv.tar.gz#environment",
   "spark.submit.deployMode":"cluster"
   }
}
```
您可以同樣地建立 Spark 執行程式環境。  

```
%%configure -f
{
   "conf": {
   "spark.yarn.appMasterEnv.PYSPARK_PYTHON":"./environment/bin/python",
   "spark.yarn.appMasterEnv.PYSPARK_DRIVER_PYTHON":"./environment/bin/python",
   "spark.executorEnv.PYSPARK_PYTHON":"./environment/bin/python",
   "spark.yarn.dist.archives":"s3://amzn-s3-demo-bucket/prefix/my_pyspark_venv.tar.gz#environment",
   "spark.submit.deployMode":"cluster"
   }
}
```
也可以使用 `conda` 來安裝 Python 程式庫。不需要 sudo 存取權即可使用 `conda`。必須使用 SSH 連接到主節點，然後從終端執行 `conda`。如需詳細資訊，請參閱[使用 SSH 連線至 Amazon EMR 叢集主節點](emr-connect-master-node-ssh.md)。

**Example – 安裝核心**  
以下示例演示在連接到叢集的主節點時，使用終端命令安裝 Kotlin 核心：  

```
sudo /emr/notebook-env/bin/conda install kotlin-jupyter-kernel -c jetbrains
```
這些指示不會安裝核心相依項。如果您的核心具有第三方相依項，可能需要採取額外的設定步驟，才能將核心與筆記本搭配使用。

## 筆記本範圍程式庫的考量與限制
<a name="emr-managed-notebooks-custom-libraries-limitations"></a>

使用筆記本範圍程式庫時，請考慮以下事項：
+ 筆記本範圍程式庫適用於您使用 Amazon EMR 5.26.0 及更新版本所建立的叢集。
+ 筆記本範圍程式庫旨在與 PySpark 核心一起使用。
+ 任何使用者都可以從筆記本儲存格中安裝額外的筆記本範圍資料庫。這些資料庫僅供該筆記本使用者在單一筆記本工作階段期間使用。如果其他使用者需要相同的程式庫，或者相同的使用者需要在不同的階段作業中使用相同的程式庫，則必須重新安裝該程式庫。
+ 只能解除安裝使用 `install_pypi_package` API 安裝的程式庫。無法解除安裝叢集上預先安裝的任何程式庫。
+ 如果叢集上安裝不同版本的相同程式庫，並做為筆記本範圍的程式庫，則筆記本範圍的程式庫版本會覆寫叢集程式庫版本。

## 使用筆記本範圍程式庫
<a name="emr-managed-notebooks-work-with-libraries"></a>

若要安裝程式庫，您的 Amazon EMR 叢集必須能夠存取程式庫所在的 PyPI 儲存庫。

以下範例示範如何使用 PySpark 核心和 API 從筆記本儲存格內列出、安裝和解除安裝程式庫的簡易命令。如需其他範例，請參閱 AWS 大數據部落格[上的使用 EMR Notebooks 在執行中的叢集上安裝 Python 程式](https://aws.amazon.com/blogs/big-data/install-python-libraries-on-a-running-cluster-with-emr-notebooks/)庫文章。

**Example – 列出目前的程式庫**  
以下指令列出可用於目前 Spark 筆記本工作階段的 Python 套件。這會列出安裝在叢集上和筆記本範圍的程式庫。  

```
sc.list_packages()
```

**Example – 安裝 Celery 程式庫**  
下列指令會將 [Celery](https://pypi.org/project/celery/) 程式庫安裝為筆記本範圍的程式庫。  

```
sc.install_pypi_package("celery")
```
安裝程式庫之後，下列指令會確認可在 Spark 驅動程式和執行器上使用該程式庫。  

```
import celery
sc.range(1,10000,1,100).map(lambda x: celery.__version__).collect()
```

**Example – 安裝 Arrow 程式庫，指定版本和儲存庫**  
以下指令會將 [Arrow](https://pypi.org/project/arrow/) 程式庫安裝為筆記本範圍的程式庫，並指定程式庫版本和儲存庫 URL。  

```
sc.install_pypi_package("arrow==0.14.0", "https://pypi.org/simple")
```

**Example – 解除安裝程式庫**  
下列指令會解除安裝 Arrow 程式庫，並將其做為筆記本範圍的程式庫從目前工作階段中移除。  

```
sc.uninstall_package("arrow")
```