

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

# Amazon EMR 舊版 AMI 的 Hive 應用程式詳細資訊
<a name="emr-3x-hive"></a>

## 日誌檔
<a name="emr-3x-hive-log-files"></a>

使用 Amazon EMR AMI 版本 2.x 和 3.x ，Hive 日誌會儲存至 `/mnt/var/log/apps/`。為了支援 Hive 並行版本，您執行的 Hive 版本會決定日誌檔名稱，如下表所示。


| Hive 版本 | 日誌檔案名稱 | 
| --- | --- | 
| 0.13.1 | hive.log  從這個版本開始，Amazon EMR 使用的是無版本控制的檔案名稱 `hive.log`。次要版本會共用與主要版本的相同日誌位置。  | 
| 0.11.0 | hive\$10110.log   Hive 0.11.0 次要版本 (例如 0.11.0.1) 會共用與 Hive 0.11.0 相同的日誌檔位置。  | 
| 0.8.1 | hive\$1081.log   Hive 0.8.1 次要版本 (例如 Hive 0.8.1.1) 會共用與 Hive 0.8.1 相同的日誌檔位置。  | 
| 0.7.1 | hive\$107\$11.log   Hive 0.7.1 次要版本 (例如 Hive 0.7.1.3 和 Hive 0.7.1.4) 會共用與 Hive 0.7.1 相同的日誌檔位置。   | 
| 0.7 | hive\$107.log | 
| 0.5 | hive\$105.log | 
| 0.4 | hive.log | 

## 分割輸入功能
<a name="emr-3x-hive-split-input"></a>

為了使用早於 0.13.1 的 Hive 版本 (早於 3.11.0 的 Amazon EMR AMI 版本) 實作分割輸入功能，請使用下列步驟：

```
hive> set hive.input.format=org.apache.hadoop.hive.ql.io.HiveCombineSplitsInputFormat;
hive> set mapred.min.split.size=100000000;
```

Hive 0.13.1 已淘汰此功能。若要取得 Amazon EMR AMI 版本 3.11.0 的相同分割輸入格式功能，請使用下列功能：

```
set hive.hadoop.supports.splittable.combineinputformat=true;
```

## Thrift 服務連接埠
<a name="emr-3x-hive-thrift-service"></a>

 Thrift 是 RPC 架構，其定義精巧二進位序列化格式，此格式會用來保留資料結構以供後續分析之用。一般而言，Hive 會將伺服器設定為在以下連接埠操作。


| Hive 版本 | 連接埠號碼 | 
| --- | --- | 
| Hive 0.13.1 | 10000 | 
| Hive 0.11.0 | 10004 | 
| Hive 0.8.1 | 10003 | 
| Hive 0.7.1 | 10002 | 
| Hive 0.7 | 10001 | 
| Hive 0.5 | 10000 | 

 如需 thrift 服務的詳細資訊，請參閱 [http://wiki.apache.org/thrift/](http://wiki.apache.org/thrift/)。

## 使用 Hive 來復原分割區
<a name="emr-3x-hive-recover-partition"></a>

Amazon EMR 包括以 Hive 查詢語言的陳述式，其會將資料表分割區從位於 Amazon S3 中的資料表資料中恢復。此如下列範例所示：

```
CREATE EXTERNAL TABLE (json string) raw_impression 
PARTITIONED BY (dt string) 
LOCATION 's3://elastic-mapreduce/samples/hive-ads/tables/impressions';
ALTER TABLE logs RECOVER PARTITIONS;
```

分割區目錄和資料必須在資料表定義中指定的位置且必須根據 Hive 慣例命名：例如 `dt=2009-01-01`。

**注意**  
在 Hive 0.13.1 之後，系統原生會使用 `msck repair table` 支援此功能，因此 `recover partitions` 不受支援。如需詳細資訊，請參閱 [https://cwiki.apache.org/confluence/display/Hive/LanguageManual\$1DDL](https://cwiki.apache.org/confluence/display/Hive/LanguageManual+DDL)。

## 將 Hive 變數傳遞到指令碼
<a name="emr-3x-hive-pass-variable"></a>

若要使用 將變數傳遞至 Hive 步驟 AWS CLI，請輸入下列命令，將 *myKey* 取代為您的 EC2 金鑰對名稱，並將 *amzn-s3-demo-bucket* 取代為您的儲存貯體名稱。在這個範例中，`SAMPLE` 是一個變動值，前綴為 `-d` 變數。此變數會在 Hive 指令碼定義為：`${SAMPLE}`。

**注意**  
包含 Linux 行接續字元 (\$1) 是為了提高可讀性。它們可以在 Linux 命令中移除或使用。對於 Windows，請將其移除或取代為插入符號 (^)。

```
aws emr create-cluster --name "Test cluster" --ami-version 3.9 \
--applications Name=Hue Name=Hive Name=Pig \
--use-default-roles --ec2-attributes KeyName=myKey \
--instance-type m3.xlarge --instance-count 3 \
--steps Type=Hive,Name="Hive Program",ActionOnFailure=CONTINUE,\
Args=[-f,s3://elasticmapreduce/samples/hive-ads/libs/response-time-stats.q,-d,\
INPUT=s3://elasticmapreduce/samples/hive-ads/tables,-d,OUTPUT=s3://amzn-s3-demo-bucket/hive-ads/output/,\
-d,SAMPLE=s3://elasticmapreduce/samples/hive-ads/]
```

## 指定外部中繼存放區位置
<a name="emr-3x-hive-external-metastore"></a>

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

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

1. 使用 Amazon RDS 建立 MySQL 或 Aurora 資料庫。

   有關如何建立 Amazon RDS 資料庫的詳細資訊，請參閱 [Amazon RDS 入門](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_GettingStarted.html)。

1. 修改您的安全群組以允許資料庫與 **ElasticMapReduce-Master (ElasticMapReduce-Master)** 安全群組之間的 JDBC 連線。

   有關如何修改存取安全群組的詳細資訊，請參閱《Amazon RDS 使用者指南》**中的 [Amazon RDS 安全群組](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Overview.RDSSecurityGroups.html)。

1. 在 `hive-site.xml` 中設定 JDBC 設定值：

   1. 建立內含以下項目的 `hive-site.xml` 組態檔：

      ```
      <configuration>
        <property>
          <name>javax.jdo.option.ConnectionURL</name>
          <value>jdbc:mariadb://hostname:3306/hive?createDatabaseIfNotExist=true</value>
          <description>JDBC connect string for a JDBC metastore</description>
        </property>
        <property>
          <name>javax.jdo.option.ConnectionUserName</name>
          <value>hive</value>
          <description>Username to use against metastore database</description>
        </property>
        <property>
          <name>javax.jdo.option.ConnectionPassword</name>
          <value>password</value>
          <description>Password to use against metastore database</description>
        </property>
      </configuration>
      ```

      *hostname* 是執行資料庫之 Amazon RDS 執行個體的 DNS 地址。*username* 和 *password* 是您資料庫的登入資料。如需有關連線至 MySQL 和 Aurora 資料庫執行個體的詳細資訊，請參閱《Amazon RDS 使用者指南》**中的[連線至執行 MySQL 資料庫引擎的 DB 執行個體](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_ConnectToInstance.html)和[連線至 Aurora DB 叢集](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Aurora.Connecting.html)。

      JDBC 驅動器由 Amazon EMR 安裝。
**注意**  
值屬性不得包含空格或歸位。它應該顯示在單一列。

   1. 將 `hive-site.xml` 檔案儲存至 Amazon S3 上的位置 (例如 `s3://amzn-s3-demo-bucket/hive-site.xml`)。

1. 建立叢集，指定自訂 `hive-site.xml` 檔案的 Amazon S3 位置。

   下列範例命令示範執行此操作的 AWS CLI 命令。
**注意**  
包含 Linux 行接續字元 (\$1) 是為了提高可讀性。它們可以在 Linux 命令中移除或使用。對於 Windows，請將其移除或取代為插入符號 (^)。

   ```
   aws emr create-cluster --name "Test cluster" --ami-version 3.10 \
   --applications Name=Hue Name=Hive Name=Pig \
   --use-default-roles --ec2-attributes KeyName=myKey \
   --instance-type m3.xlarge --instance-count 3 \
   --bootstrap-actions Name="Install Hive Site Configuration",\
   Path="s3://region.elasticmapreduce/libs/hive/hive-script",\
   Args=["--base-path","s3://elasticmapreduce/libs/hive","--install-hive-site",\
   "--hive-site=s3://amzn-s3-demo-bucket/hive-site.xml","--hive-versions","latest"]
   ```

## 使用 JDBC 連線至 Hive
<a name="emr-3x-hive-jdbc"></a>

若要透過 JDBC 連接到 Hive 需要下載 JDBC 驅動程式並安裝 SQL 用戶端。以下範例示範如何使用 SQL Workbench/J 以使用 JDBC 連接到 Hive。

**下載 JDBC 驅動程式**

1. 下載和擷取您希望存取之 Hive 版本的適合驅動程式。Hive 的版本差異取決於您建立 Amazon EMR 叢集時選擇的 AMI。
   + Hive 0.13.1 JDBC 驅動程式：[https://amazon-odbc-jdbc-drivers.s3.amazonaws.com/public/AmazonHiveJDBC\$11.0.4.1004.zip](https://amazon-odbc-jdbc-drivers.s3.amazonaws.com/public/AmazonHiveJDBC_1.0.4.1004.zip)
   + Hive 0.11.0 JDBC 驅動程式：[https://mvnrepository.com/artifact/org.apache.hive/hive-jdbc/0.11.0](https://mvnrepository.com/artifact/org.apache.hive/hive-jdbc/0.11.0)
   + Hive 0.8.1 JDBC 驅動程式：[https://mvnrepository.com/artifact/org.apache.hive/hive-jdbc/0.8.1](https://mvnrepository.com/artifact/org.apache.hive/hive-jdbc/0.8.1)

1. 安裝 SQL Workbench/J。如需更多資訊，請參閱 SQL Workbench/J 手冊使用者手冊中的[安裝和啟動 SQL Workbench/J](http://www.sql-workbench.net/manual/install.html)。

1. 建立到叢集主節點的 SSH 通道。根據 Hive 版本不同，連線的連接埠也有所不同。下表提供的範例命令適用於 Linux `ssh` 使用者和 Windows 使用者的 PuTTY 命令  
**Linux SSH 命令**    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/emr/latest/ReleaseGuide/emr-3x-hive.html)  
**Windows PuTTY 通道設定**    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/emr/latest/ReleaseGuide/emr-3x-hive.html)

1. 將 JDBC 驅動程式新增到 SQL Workbench。

   1. 在 **Select Connection Profile (選取連線設定檔)** 對話方塊中，選擇 **Manage Drivers (管理驅動程式)**。

   1. 選擇 **Create a new entry (建立新項目)** (空白頁面) 圖示。

   1. 在 **Name (名稱)**欄位中，輸入 **Hive JDBC**。

   1. 針對 **Library (程式庫)**，按一下 **Select the JAR file(s) (選取 JAR 檔案)** 圖示。

   1. 如下表所示，選取 JAR 檔案。  
****    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/emr/latest/ReleaseGuide/emr-3x-hive.html)

   1. 在 **Please select one driver (請選擇一個驅動程式)** 對話方塊中，根據以下表格選取驅動程式，然後按一下 ** OK (確認)**。    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/emr/latest/ReleaseGuide/emr-3x-hive.html)

1. 當您返回 **Select Connection Profile (選取連線設定檔)** 對話方塊中，確認 **Driver (驅動程式)** 欄位設定為 ** Hive JDBC (Hive JDBC)**，並根據以下表格在 **URL (URL)** 欄位中提供 JDBC 連線字串。    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/emr/latest/ReleaseGuide/emr-3x-hive.html)

   如果您的叢集使用 AMI 版本 3.3.1 或更高版本，在**選取連線設定檔**對話方塊的**使用者名稱**欄位中輸入 **hadoop**。