

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

# 使用 Apache Hive 和 Hadoop 创建自定义插件
<a name="samples-hive"></a>

Amazon MWAA 将 `plugins.zip` 的内容提取到 `/usr/local/airflow/plugins`。这可以用来向容器中添加二进制文件。此外，Apache Airflow 会在*启动*时执行 `plugins` 文件夹中的 Python 文件内容，使您能够设置和修改环境变量。以下示例将引导您完成在 Amazon MWAA 环境中使用 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](https://peps.python.org/pep-0619/) 中将本页上的代码示例与 **Apache Airflow v2** 一起使用，在 [Python 3.11](https://peps.python.org/pep-0664/) 中与 **Apache Airflow v3** 一起使用。

## 先决条件
<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 会将 plugins.zip 的内容提取到每个 Amazon MWAA 计划程序和工作线程容器上的 `/usr/local/airflow/plugins`。这用于向环境中添加二进制文件。以下步骤介绍如何组装自定义插件所需的文件。

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` 目录中将其本地另存为 `hive_plugin.py`。

   ```
   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. 复制以下文本的内容，并在 `hive_plugin` 目录中将其本地另存为 `.airflowignore`。

   ```
   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` 文件夹，请参阅 [添加或更新 DAG](configuring-dag-folder.md)。
+ 要了解如何将本示例中的 `plugins.zip` 文件上传到 Amazon S3 存储桶，请参阅 [安装自定义插件](configuring-dag-import-plugins.md)。