

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

# 使用 Apache Hive 和 Hadoop 建立自訂外掛程式
<a name="samples-hive"></a>

Amazon MWAA 會將 的內容擷取`plugins.zip`至 `/usr/local/airflow/plugins`。這可用於將二進位檔新增至您的容器。此外，Apache Airflow 會在*啟動*時在 `plugins` 資料夾中執行 Python 檔案的內容，讓您能夠設定和修改環境變數。下列範例會逐步解說在 Amazon Managed Workflows for Apache Airflow 環境上使用 Apache Hive 和 Hadoop 建立自訂外掛程式的步驟，並可與其他自訂外掛程式和二進位檔結合使用。

**Topics**
+ [版本](#samples-hive-version)
+ [先決條件](#samples-hive-prereqs)
+ [權限](#samples-hive-permissions)
+ [要求](#samples-hive-dependencies)
+ [下載相依性](#samples-hive-install)
+ [自訂外掛程式](#samples-hive-plugins-code)
+ [Plugins.zip](#samples-hive-pluginszip)
+ [範例程式碼](#samples-hive-code)
+ [Airflow 組態選項](#samples-hive-airflow-config)
+ [後續步驟？](#samples-hive-next-up)

## 版本
<a name="samples-hive-version"></a>

您可以在 Python 3.10 中使用 **Apache Airflow v2** 和 Python 3.1[1](https://peps.python.org/pep-0664/) ****中使用此頁面的程式碼範例。 [https://peps.python.org/pep-0619/](https://peps.python.org/pep-0619/)

## 先決條件
<a name="samples-hive-prereqs"></a>

若要使用此頁面上的範例程式碼，您需要下列項目：
+ [Amazon MWAA 環境](get-started.md)。

## 權限
<a name="samples-hive-permissions"></a>

使用此頁面上的程式碼範例不需要額外的許可。

## 要求
<a name="samples-hive-dependencies"></a>

若要使用此頁面上的範例程式碼，請將下列相依性新增至您的 `requirements.txt`。若要進一步了解，請參閱 [安裝 Python 相依性](working-dags-dependencies.md)。

```
-c https://raw.githubusercontent.com/apache/airflow/constraints-2.0.2/constraints-3.7.txt
apache-airflow-providers-amazon[apache.hive]
```

## 下載相依性
<a name="samples-hive-install"></a>

Amazon MWAA 會在每個 Amazon MWAA 排程器和工作者容器`/usr/local/airflow/plugins`上，將 plugins.zip 的內容擷取至 。這是用來將二進位檔新增至您的環境。下列步驟說明如何組合自訂外掛程式所需的檔案。

1. 在命令提示字元中，導覽至您要建立外掛程式的目錄。例如：

   ```
   cd plugins
   ```

1. 從[鏡像](https://www.apache.org/dyn/closer.cgi/hadoop/common/hadoop-3.3.0/hadoop-3.3.0.tar.gz)下載 [Hadoop](https://hadoop.apache.org/)，例如：

   ```
   wget https://downloads.apache.org/hadoop/common/hadoop-3.3.0/hadoop-3.3.0.tar.gz
   ```

1. 從[鏡像](https://www.apache.org/dyn/closer.cgi/hive/)下載 [Hive](https://hive.apache.org/)，例如：

   ```
   wget https://downloads.apache.org/hive/hive-3.1.2/apache-hive-3.1.2-bin.tar.gz
   ```

1. 建立目錄。例如：

   ```
   mkdir hive_plugin
   ```

1. 擷取 Hadoop。

   ```
   tar -xvzf hadoop-3.3.0.tar.gz -C hive_plugin
   ```

1. 擷取 Hive。

   ```
   tar -xvzf apache-hive-3.1.2-bin.tar.gz -C hive_plugin
   ```

## 自訂外掛程式
<a name="samples-hive-plugins-code"></a>

Apache Airflow 會在啟動時執行外掛程式資料夾中 Python 檔案的內容。這用於設定和修改環境變數。下列步驟說明自訂外掛程式的範例程式碼。

1. 在您的命令提示字元中，導覽至 `hive_plugin`目錄。例如：

   ```
   cd hive_plugin
   ```

1. 複製下列程式碼範例的內容，並在本機儲存為 `hive_plugin.py` `hive_plugin`目錄中的 。

   ```
   from airflow.plugins_manager import AirflowPlugin
   import os
   os.environ["JAVA_HOME"]="/usr/lib/jvm/jre"
   os.environ["HADOOP_HOME"]='/usr/local/airflow/plugins/hadoop-3.3.0'
   os.environ["HADOOP_CONF_DIR"]='/usr/local/airflow/plugins/hadoop-3.3.0/etc/hadoop'
   os.environ["HIVE_HOME"]='/usr/local/airflow/plugins/apache-hive-3.1.2-bin'
   os.environ["PATH"] = os.getenv("PATH") + ":/usr/local/airflow/plugins/hadoop-3.3.0:/usr/local/airflow/plugins/apache-hive-3.1.2-bin/bin:/usr/local/airflow/plugins/apache-hive-3.1.2-bin/lib" 
   os.environ["CLASSPATH"] = os.getenv("CLASSPATH") + ":/usr/local/airflow/plugins/apache-hive-3.1.2-bin/lib" 
   class EnvVarPlugin(AirflowPlugin):                
       name = 'hive_plugin'
   ```

1. 處理下列文字的內容，並在本機儲存為 `.airflowignore` `hive_plugin`目錄中的 。

   ```
   hadoop-3.3.0
   apache-hive-3.1.2-bin
   ```

## Plugins.zip
<a name="samples-hive-pluginszip"></a>

下列步驟說明如何建立 `plugins.zip`。此範例的內容可以與其他外掛程式和二進位檔合併為單一`plugins.zip`檔案。

1. 在您的命令提示字元中，導覽至上一個步驟的 `hive_plugin` 目錄。例如：

   ```
   cd hive_plugin
   ```

1. 壓縮`plugins`資料夾中的內容。

   ```
   zip -r ../hive_plugin.zip ./
   ```

## 範例程式碼
<a name="samples-hive-code"></a>

下列步驟說明如何建立 DAG 程式碼來測試自訂外掛程式。

1. 在命令提示中，導覽至存放 DAG 程式碼的目錄。例如：

   ```
   cd dags
   ```

1. 複製下列程式碼範例的內容，並在本機儲存為 `hive.py`。

   ```
   from airflow import DAG
   from airflow.operators.bash_operator import BashOperator
   from airflow.utils.dates import days_ago
   
   with DAG(dag_id="hive_test_dag", schedule_interval=None, catchup=False, start_date=days_ago(1)) as dag:
       hive_test = BashOperator(
           task_id="hive_test",
           bash_command='hive --help'
       )
   ```

## Airflow 組態選項
<a name="samples-hive-airflow-config"></a>

如果您使用的是 Apache Airflow v2，請將 新增`core.lazy_load_plugins : False`為 Apache Airflow 組態選項。若要進一步了解，請參閱[使用組態選項載入 2 中的外掛程式](configuring-env-variables.md#configuring-2.0-airflow-override)。

## 後續步驟？
<a name="samples-hive-next-up"></a>
+ 了解如何在此範例中將`requirements.txt`檔案上傳至 中的 Amazon S3 儲存貯體[安裝 Python 相依性](working-dags-dependencies.md)。
+ 了解如何在此範例中將 DAG 程式碼上傳至 Amazon S3 儲存貯體中的 `dags` 資料夾[新增或更新 DAGs](configuring-dag-folder.md)。
+ 進一步了解如何在此範例中將`plugins.zip`檔案上傳至 中的 Amazon S3 儲存貯體[安裝自訂外掛程式](configuring-dag-import-plugins.md)。