

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

# 設定 Tez
<a name="tez-configure"></a>

您可以使用 `tez-site` 組態分類來設定值以自訂 Tez，這樣做就會設定 `tez-site.xml` 組態檔案中的設定。如需詳細資訊，請參閱 Apache Tez 文件中的 [TezConfiguration](https://tez.apache.org/releases/0.8.2/tez-api-javadocs/configs/TezConfiguration.html)。若要讓 Hive 或 Pig 改用 Tez 執行引擎，請使用適當的 `hive-site` 和 `pig-properties` 組態分類。範例如下所示。

## 範例組態
<a name="tez-configure-example"></a>

**Example 範例：自訂 Tez 根記錄層級並設定 Tez 作為 Hive 和 Pig 的執行引擎**  
以下所示的範例 `create-cluster` 命令會建立已安裝 Tez、Hive 和 Pig 的叢集。命令會參考存放於 Amazon S3 的檔案 `myConfig.json`，該檔案會指定將 `tez.am.log.level` 設定為 `DEBUG` 之 `tez-site` 分類的屬性，並使用 `hive-site` 和 `pig-properties` 組態分類將 Hive 和 Pig 的執行引擎設定為 Tez。  
包含 Linux 行接續字元 (\$1) 是為了提高可讀性。它們可以在 Linux 命令中移除或使用。對於 Windows，請將其移除或取代為插入符號 (^)。

```
aws emr create-cluster --release-label emr-7.12.0 \
--applications Name=Tez Name=Hive Name=Pig --ec2-attributes KeyName=myKey \
--instance-type m5.xlarge --instance-count 3 \
--configurations https://s3.amazonaws.com/amzn-s3-demo-bucket/myfolder/myConfig.json --use-default-roles
```
`myConfig.json` 的範例內容如下所示。  

```
[
    {
      "Classification": "tez-site",
      "Properties": {
        "tez.am.log.level": "DEBUG"
      }
    },
    {
      "Classification": "hive-site",
      "Properties": {
        "hive.execution.engine": "tez"
      }
    },
    {
      "Classification": "pig-properties",
      "Properties": {
        "exectype": "tez"
      }
    }
  ]
```

**注意**  
對於 Amazon EMR 版本 5.21.0 及更高版本，您可以覆寫叢集組態，並且為執行中叢集的每個執行個體群組，指定額外組態分類。您可以使用 Amazon EMR 主控台、 AWS Command Line Interface (AWS CLI) 或 AWS SDK 來執行此操作。如需詳細資訊，請參閱[為執行中叢集的執行個體群組提供組態](https://docs.aws.amazon.com/emr/latest/ReleaseGuide/emr-configure-apps-running-cluster.html)。

## Tez 非同步分割開啟
<a name="tez-configure-async"></a>

當資料表路徑中有大量的小型檔案，且查詢嘗試讀取所有檔案時，對應於每個分割的各小型檔案都會合併在單一 Tez *分組分割*之下。然後，單一映射器會處理單一 Tez 分組分割。此執行為同步發生，因此會逐一處理分組分割下的每個分割。這需要 `RecordReader` 物件才能同步處理分割。

Amazon EMR 6.15.0 引入了組態，您可以指定這些組態來非同步開啟 Tez 分組分割中的輸入分割。該功能由 [TEZ-4397](https://issues.apache.org/jira/browse/TEZ-4397) 啟動，但在 OSS Hive 中有迴歸。EMR Hive 已修正 Hive ACID 資料表中的迴歸和其他錯誤。當單一 Tez 分組分割中有大量輸入分割時，此改善可加快讀取查詢的效能。


| 名稱 | 分類 | Description | 
| --- | --- | --- | 
|  `tez.grouping.split.init.threads`  |  `tez-site`  | 指定 Tez 用來預先啟動 `RecordReaders` 和開啟分割的常駐程式執行緒數量。對於 ACID 資料表，`tez.grouping.split.init.threads` 支援的最大值為 `1`。 | 
|  `tez.grouping.split.init.recordreaders`  |  `tez-site`  | 指定要由常駐程式執行緒預先初始化的 `RecordReaders` 數量。當 Tez 分組分割包含大量 `InputSplits` 時，這就很有用。可以使用常駐程式執行緒非同步完成處理這些輸入分割的 `RecordReaders` 初始化 (而不是按順序處理)。 | 

組態備註：


| 主題 | 詳細資訊 | 
| --- | --- | 
| 建議的組態設定 | 建議將上述組態設定設定為 `hive-site`和 中您想要的值`tez-site`。 | 
| 比對值 | 在 `hive-site`和 中，組態設定的值應該相同`tez-site`。 | 
| LLAP 建議 | 不建議在啟用 LLAP 時使用此功能。 | 

### Tez 非同步分割開啟的基準測試
<a name="tez-configure-async-benchmark"></a>

我們使用以下環境和組態來對 Tez 非同步分割開啟能力進行基準測試：
+ **基準測試環境**：Amazon EMR 叢集，具有 1 個使用 m5.16xlarge 的主節點以及 16 個使用 m5.16xlarge 的核心節點。
+ **基準測試組態**：若要模擬基準測試的情境 (其中，大量輸入分割位於單一 Tez 分組分割中)，請將 `tez.grouping.split-count` 設定為 `1`。
+ **用於基準測試的資料表**：該資料表包含 200 個分割區，每個分割區都包含一個檔案。基準測試是在該資料表包含 CSV 檔案以及該資料表包含 parquet 檔案時完成。用於基準測試的 Hive 查詢：從資料表執行 `SELECT COUNT(*)` 十次，並計算平均執行期。
+ **啟用 Tez 非同步分割開啟的組態**：如下所示：
  + `tez.grouping.split.init.threads` = `4`
  + `tez.grouping.split.init.recordreaders` = `10`


| 資料集 | 功能已停用 (基準) | 功能已啟用 | 改進 | 
| --- | --- | --- | --- | 
|  CSV 資料集  |  90.26 秒  | 79.20 秒 | 12.25% | 
|  Parquet 資料集  |  54.67 秒  | 42.23 秒 | 22.75% | 