

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

# 使用外部 MySQL 資料庫或 Amazon Aurora
<a name="emr-hive-metastore-external"></a>

若要使用外部 MySQL 資料庫或 Amazon Aurora 作為 Hive 中繼存放區，請於 Hive 為中繼存放區覆寫預設組態值，以在 Amazon RDS MySQL 執行個體或 Amazon Aurora PostgreSQL 執行個體上指定外部資料庫位置。

**注意**  
Hive 不支援也無法避免對中繼存放區資料表的同時寫入存取權。如果您在兩個叢集間共用中繼存放區資訊，您必須確保不會同時寫入同一個表格中繼存放區，除非您寫入的是相同中繼存放區資料表中的不同分割區。

下列程序說明如何為 Hive 中繼存放區位置覆寫預設組態值，並使用重新設定的中繼存放區位置來啟動叢集。

**若要建立位於 EMR 叢集之外的中繼存放區**

1. 建立 MySQL 或 Aurora PostgreSQL 資料庫。如果您使用 PostgreSQL，則必須在佈建叢集之後進行設定。建立叢集時僅支援 MySQL。如需有關 Aurora MySQL 和 Aurora PostgreSQL 之間差異的資訊，請參閱 [Amazon Aurora MySQL 概觀](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/Aurora.AuroraMySQL.Overview.html)和[使用 Amazon Aurora PostgreSQL](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/Aurora.AuroraPostgreSQL.html)。如需有關如何建立 Amazon RDS 資料庫的一般資訊，請參閱 [https://aws.amazon.com/rds/](https://aws.amazon.com/rds/)。

1. 修改您的安全群組以允許資料庫與 **ElasticMapReduce-Master (ElasticMapReduce-Master)** 安全群組之間的 JDBC 連線。如需有關如何修改存取安全群組的資訊，請參閱[使用 Amazon EMR 受管安全群組](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-man-sec-groups.html)。

1. 在 `hive-site.xml` 中設定 JDBC 設定值：
**重要**  
如果您是將敏感資訊 (例如，密碼) 提供到 Amazon EMR 組態 API，將會對許可不足的那些帳戶顯示此資訊。如果您擔心這個資訊可能向其他使用者顯示，透過建立可明確拒絕對 `elasticmapreduce:DescribeCluster` API 金鑰之許可的使用者，使用管理帳戶建立叢集並限制其他使用者 (IAM 使用者或具有委派登入資料的使用者) 存取叢集上的服務。

   1. 建立名為 `hiveConfiguration.json` 的組態檔案，內含對 `hive-site.xml` 的編輯，如下所示。

       使用執行資料庫的 Amazon RDS 執行個體之 DNS 地址取代 *hostname*，並且使用資料庫的登入資料取代 *username* 和 *password*。如需有關連線至 MySQL 和 Aurora 資料庫執行個體的詳細資訊，請參閱《Amazon RDS 使用者指南》**中的[連線至執行 MySQL 資料庫引擎的資料庫執行個體](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_ConnectToInstance.html)和[連線至 Athena 資料庫叢集](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Aurora.Connect.html)。`javax.jdo.option.ConnectionURL` 是用於 JDBC 中繼存放區的 JDBC 連線字串。`javax.jdo.option.ConnectionDriverName` 是 JDBC 中繼存放區的驅動程式類別名稱。

      MySQL JDBC 驅動器由 Amazon EMR 安裝。

      值屬性不能包含空格或歸位。它應該顯示在單一列。

      ```
      [
          {
            "Classification": "hive-site",
            "Properties": {
              "javax.jdo.option.ConnectionURL": "jdbc:mysql://hostname:3306/hive?createDatabaseIfNotExist=true",
              "javax.jdo.option.ConnectionDriverName": "org.mariadb.jdbc.Driver",
              "javax.jdo.option.ConnectionUserName": "username",
              "javax.jdo.option.ConnectionPassword": "password"
            }
          }
        ]
      ```

   1. 當您建立叢集時，請參考 `hiveConfiguration.json` 檔案，如下列 AWS CLI 命令所示。在這個命令中，檔案會存放在本機，您也可以將檔案上傳到 Amazon S3 並加以參考 (例如 `s3://DOC-EXAMPLE-BUCKET/hiveConfiguration.json`)。
**注意**  
包含 Linux 行接續字元 (\$1) 是為了提高可讀性。它們可以在 Linux 命令中移除或使用。對於 Windows，請將其移除或取代為插入符號 (^)。

      ```
      aws emr create-cluster --release-label emr-7.12.0 --instance-type m5.xlarge --instance-count 2 \
      --applications Name=Hive --configurations file://hiveConfiguration.json --use-default-roles
      ```

1. 連接至您的叢集主節點。

   有關如何連接到主節點的資訊，請參閱《Amazon EMR 管理指南》**中的[使用 SSH 連接到主節點](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-connect-master-node-ssh.html)。

1. 透過輸入類似如下的命令來建立您的 Hive 資料表，以便在 Amazon S3 上指定位置：

   ```
   CREATE EXTERNAL TABLE IF NOT EXISTS table_name
   (
   key int,
   value int
   )
   LOCATION s3://DOC-EXAMPLE-BUCKET/hdfs/
   ```

1. 將您的 Hive 指令碼新增至執行中叢集。

Hive 叢集會使用位於 Amazon RDS 的中繼存放區來執行。透過指定中繼存放區位置來啟動所有額外的 Hive 叢集，其會共用此中繼存放區。