

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

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

## 支援的 HBase 版本
<a name="emr-3x-hbase-versions"></a>


| HBase 版本 | AMI 版本 | AWS CLI 組態參數 | HBase 版本詳細資訊 | 
| --- | --- | --- | --- | 
| [0.94.18](https://svn.apache.org/repos/asf/hbase/branches/0.94/CHANGES.txt) | 3.1.0 版和更新版本 |  `--ami-version 3.1` `--ami-version 3.2` `--ami-version 3.3` `--applications Name=HBase`  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/emr/latest/ReleaseGuide/emr-3x-hbase.html)  | 
| [0.94.7](https://svn.apache.org/repos/asf/hbase/branches/0.94/CHANGES.txt) | 3.0-3.0.4 |  `--ami-version 3.0` `--applications Name=HBase`  | 
| [0.92](https://svn.apache.org/repos/asf/hbase/branches/0.92/CHANGES.txt) | 2.2 版和更新版本 |  `--ami-version 2.2 or later` `--applications Name=HBase`  | 

## HBase 叢集先決條件
<a name="emr-3x-hbase-prerequisites"></a>

使用 Amazon EMR AMI 版本 2.x 和 3.x 建立的叢集應該符合下列 HBase 要求。
+  AWS CLI （選用） - 若要使用命令列與 HBase 互動，請下載並安裝最新版本的 AWS CLI。如需詳細資訊，請參閱「AWS Command Line Interface 使用者指南」**中的[安裝 AWS Command Line Interface](https://docs.aws.amazon.com/cli/latest/userguide/installing.html)。
+ 至少有兩個執行個體 (選用) - 叢集的主節點會執行 HBase 主伺服器和 Zookeeper，而任務節點會執行 HBase 區域伺服器。如需最佳效能，HBase 叢集應該至少在兩個 EC2 執行個體上執行，但您可以在單一節點執行 HBase 以進行評估。
+ 長時間執行叢集 - HBase 只在長時間執行叢集上執行。在預設情況下，CLI 和 Amazon EMR 主控台會建立長時間執行的叢集。
+ Amazon EC2 金鑰對 (建議使用) - 若要使用 Secure Shell (SSH) 網路通訊協定來與主節點連線並執行 HBase shell 命令，您必須在建立叢集時使用 Amazon EC2 金鑰對。
+ 正確的 AMI 和 Hadoop 版本—目前只在 Hadoop 20.205 或更新版本支援 HBase 叢集。
+ Ganglia (選用)—若要監控 HBase 效能指標，請在建立叢集時安裝 Ganglia。
+ 適用於日誌的 Amazon S3 儲存貯體 (選用) - 適用於 HBase 的日誌在主節點上可供使用。如果您想將這些日誌複製到 Amazon S3，在建立叢集時指定要接收日誌檔案的 S3 儲存貯體。

## 使用 HBase 建立叢集
<a name="emr-3x-hbase-launch"></a>

下表列出使用主控台時可供使用的選項，以使用 Amazon EMR AMI 發行版本來建立含 HBase 的叢集。


| 欄位 | Action | 
| --- | --- | 
| Restore from backup (從備份還原) | 指定是否預先載入 HBase 叢集與存放在 Amazon S3 的資料。 | 
| Backup location (備份位置) | 指定 Amazon S3 中要還原之備份所在的 URI。 | 
| Backup version (備份版本) | 或者，指定在 Backup Location (備份位置) 中要使用的備份版本名稱。如果您將此欄位保留空白，Amazon EMR 會使用備份位置中的最新備份以填入新 HBase 叢集。 | 
| Schedule Regular Backups (排程定期備份) | 指定是否排程自動增量備份。第一種備份是完整備份，會建立基準以供增量備份使用。 | 
| Consistent backup (一致性備份) | 指定備份是否應保持一致。一致性備份是在初始備份階段時暫停寫入操作的備份，以同步到節點。暫停的任何寫入操作會放入佇列中並在同步完成時恢復。 | 
| Backup frequency (備份頻率) | 排定備份間的天/小時/分鐘數。 | 
| Backup location (備份位置) | 備份存放所在的 Amazon S3 URI。每個 HBase 叢集的備份位置應所有不同，以確保差異備份保持正確。 | 
| Backup start time (備份開始時間) | 指定第一個備份應執行的時間。您可以將此值設為 now，其會讓第一個備份在叢集一執行時就立即開始，或以 [ISO 格式](http://www.w3.org/TR/NOTE-datetime)輸入日期和時間。例如，2012-06-15T20:00Z 會將開始時間設為 UTC 2012 年 6 月 15 日下午 8 點。 | 

下列範例 AWS CLI 命令會使用 HBase 和其他應用程式啟動叢集：

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

```
aws emr create-cluster --name "Test cluster" --ami-version 3.3 \
               --applications Name=Hue Name=Hive Name=Pig Name=HBase \
               --use-default-roles --ec2-attributes KeyName=myKey \
               --instance-type c1.xlarge --instance-count 3 --termination-protected
```

在 Hive 和 HBase 叢集之間的連線已建立後 (如之前的程序所示)，您可以透過在 Hive 建立一個外部表格，以存取存放在 HBase 叢集上的資料。

從 Hive 提示時，以下範例會建立外部表格，其會參考存放在 HBase 資料表 (名為 `inputTable`) 的資料。您可以參考在 Hive 陳述式中的 `inputTable` 來查詢和修改 HBase 叢集中存放的資料。

**注意**  
以下範例會使用在 AMI 2.3.3 中的 **protobuf-java-2.4.0a.jar (protobuf-java-2.4.0a.jar)**，但您應修改範例以符合您的版本。若要檢查您所擁有的是哪些版本的通訊協定緩衝區 JAR，在 Hive 命令提示字元執行命令：`! ls /home/hadoop/lib;`。

```
add jar lib/emr-metrics-1.0.jar ;
               add jar lib/protobuf-java-2.4.0a.jar ;
               
               set hbase.zookeeper.quorum=ec2-107-21-163-157.compute-1.amazonaws.com ;
               
               create external table inputTable (key string, value string)
                    stored by 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
                     with serdeproperties ("hbase.columns.mapping" = ":key,f1:col1")
                     tblproperties ("hbase.table.name" = "t1");
               
               select count(*) from inputTable ;
```

## 自訂 HBase 組態
<a name="emr-3x-hbase-customize"></a>

雖然預設設定應該適用於大多數應用程式，但您可以彈性地修改 HBase 組設設定。若要這樣做，請執行以下引導操作指令碼中的其中一種：
+ **configure-hbase-daemons** - 設定主要、regionserver 和 zookeeper 常駐程式的屬性。這些屬性包括堆積大小和選項，可在 HBase 協助程式開始時傳送到 Java 虛擬機器 (JVM)。您將這些屬性設為引導操作中的引數。此引導操作會修改在 HBase 叢集上的 /home/hadoop/conf/hbase-user-env.sh 組態檔案。
+ **configure-hbase** - 設定 HBase 網站特定的設定，例如 HBase 主要伺服器應該連結到的連接埠和用戶端 CLI 用戶端應該重試動作的最大次數。您可以依次設定這些值作為引導操作中的引數，也可以在 Amazon S3 中指定 XML 組態檔案的位置。此引導操作會修改在 HBase 叢集上的 /home/hadoop/conf/hbase-site.xml 組態檔案。

**注意**  
這些指令碼 (例如其他引導操作)，只能在叢集建立時執行；您無法使用他們來變更目前執行中之 HBase 叢集的組態。

當您執行 **configure-hbase (configure-hbase)** 或 **configure-hbase-daemons (configure-hbase-daemons)** 引導操作時，您指定的值會覆寫預設值。您未明確設定的任何值會接收預設值。

使用這些引導操作的設定 HBase 與在 Amazon EMR 中使用引導操作來設定 Hadoop 以及 Hadoop 常駐程式屬性類似。差別是，HBase 沒有根據程序的記憶體選項。而是使用 `--daemon-opts` 引數來設定記憶體選項，其中*協助程式*會被要設定之協助程式的名稱所取代。

### 設定 HBase 常駐程式
<a name="emr-3x-hbase-configure-daemons"></a>

 Amazon EMR 提供的引導操作 (`s3://region.elasticmapreduce/bootstrap-actions/configure-hbase-daemons`)，您可以用來變更 HBase 常駐程式的組態，其中 *region* 是您要將 HBase 叢集啟動至其中的區域。

若要使用 設定 HBase 協助程式 AWS CLI，請在啟動叢集時新增`configure-hbase-daemons`引導操作，以設定一或多個 HBase 協助程式。您可以設定下列屬性：


| 屬性 | Description | 
| --- | --- | 
| hbase-master-opts | 控制 JVM 如何執行主要協助程式的選項。一旦設定，這些值會覆寫預設 HBASE\$1MASTER\$1OPTS 變數。 | 
| regionserver-opts | 控制 JVM 如何執行區域伺服器協助程式的選項。一旦設定，這些值會覆寫預設 HBASE\$1REGIONSERVER\$1OPTS 變數。 | 
| zookeeper-opts | 控制 JVM 如何執行 zookeeper 協助程式的選項。一旦設定，這些值會覆寫預設 HBASE\$1ZOOKEEPER\$1OPTS 變數。 | 

如需有關這些選項的詳細資訊，請參閱 HBase 文件中的 [hbase-env.sh](https://hbase.apache.org/book.html#hbase.env.sh)。

會為 `zookeeper-opts` 和 `hbase-master-opts` 設定值的引導操作如下所示。

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

```
aws emr create-cluster --name "Test cluster" --ami-version 3.3 \
--applications Name=Hue Name=Hive Name=Pig Name=HBase \
--use-default-roles --ec2-attributes KeyName=myKey \
--instance-type c1.xlarge --instance-count 3 --termination-protected \
--bootstrap-actions Path=s3://elasticmapreduce/bootstrap-actions/configure-hbase-daemons,\
Args=["--hbase-zookeeper-opts=-Xmx1024m -XX:GCTimeRatio=19","--hbase-master-opts=-Xmx2048m","--hbase-regionserver-opts=-Xmx4096m"]
```

### 設定 HBase 網站
<a name="emr-3x-hbase-configure-site"></a>

Amazon EMR 提供的引導操作 (`s3://elasticmapreduce/bootstrap-actions/configure-hbase`)，您可以用來變更 HBase 的組態。您可以依次設定組態值作為引導操作中的引數，也可以在 Amazon S3 中指定 XML 組態檔案的位置。如果您只需要設定幾個組態設定，則依次設定組態值非常有用。如果您有許多要進行的變更，或者，如果您想要儲存組態設定以重複使用，則使用 XML 檔案來設定它們很好用。

**注意**  
您可以使用區域字首來為 Amazon S3 儲存貯體名稱加上字首 (例如 `s3://region.elasticmapreduce/bootstrap-actions/configure-hbase`)，其中 *region* 是您要將 HBase 叢集啟動到其中的區域。

此引導操作會修改在 HBase 叢集上的 `/home/hadoop/conf/hbase-site.xml` 組態檔案。此引導操作只在 HBase 叢集啟動時執行。

如需有關您可以設定之 HBase 網站設定的詳細資訊，請參閱 HBase 文件中的[預設組態](http://hbase.apache.org/book.html#config.files)。

設定當啟動 HBase 叢集時的 `configure-hbase` 引導操作，並指定在 `hbase-site.xml` 中要變更的值。

**使用 指定個別 HBase 網站設定 AWS CLI**
+ 為變更 `hbase.hregion.max.filesize` 設定，輸入以下命令並使用 Amazon EC2 金鑰對的名稱來取代 *myKey*。
**注意**  
包含 Linux 行接續字元 (\$1) 是為了提高可讀性。它們可以在 Linux 命令中移除或使用。對於 Windows，請將其移除或取代為插入符號 (^)。

  ```
  aws emr create-cluster --name "Test cluster" --ami-version 3.3 \
  --applications Name=Hue Name=Hive Name=Pig Name=HBase \
  --use-default-roles --ec2-attributes KeyName=myKey \
  --instance-type c1.xlarge --instance-count 3 --termination-protected \
  --bootstrap-actions Path=s3://elasticmapreduce/bootstrap-actions/configure-hbase,Args=["-s","hbase.hregion.max.filesize=52428800"]
  ```

**使用 使用 XML 檔案指定 HBase 網站設定 AWS CLI**

1. 建立 `hbase-site.xml` 自訂版本。自訂檔案必須為有效 XML。若要降低引入錯誤的機率，使用位於 Amazon EMR HBase 主節點 (在 `/home/hadoop/conf/hbase-site.xml`) 的 `hbase-site.xml` 預設複本，並編輯檔案複本，而不是從頭建立一個檔案。您可以為新檔案命名新名稱，或將其保持為 `hbase-site.xml`。

1. 將自訂 `hbase-site.xml` 檔案上傳至 Amazon S3 儲存貯體。它應該已設定許可，以便啟動叢集 AWS 的帳戶可以存取 檔案。如果啟動叢集 AWS 的帳戶也擁有 Amazon S3 儲存貯體，則可以存取。

1. 當您啟動 HBase 叢集並包含自訂 `hbase-site.xml` 檔案的位置時，設定 **configure-hbase** 引導操作。以下範例將 HBase 網站組態值設為檔案 `s3://amzn-s3-demo-bucket/my-hbase-site.xml` 中指定的值。輸入下列命令，將 *myKey* 取代為您的 EC2 金鑰對名稱，並將 *amzn-s3-demo-bucket* 取代為您的 Amazon S3 儲存貯體名稱。
**注意**  
包含 Linux 行接續字元 (\$1) 是為了提高可讀性。它們可以在 Linux 命令中移除或使用。對於 Windows，請將其移除或取代為插入符號 (^)。

   ```
   aws emr create-cluster --name "Test cluster" --ami-version 3.3 \
           --applications Name=Hue Name=Hive Name=Pig Name=HBase \
           --use-default-roles --ec2-attributes KeyName=myKey \
           --instance-type c1.xlarge --instance-count 3 --termination-protected \
           --bootstrap-actions Path=s3://elasticmapreduce/bootstrap-actions/configure-hbase,Args=["--site-config-file","s3://amzn-s3-demo-bucket/config.xml"]
   ```

   如果您指定多個選項來自訂 HBase 操作，您必須使用 `-s` 選項切換來加上每個金鑰值對，如下所示：

   ```
          --bootstrap-actions s3://elasticmapreduce/bootstrap-actions/configure-hbase,Args=["-s","zookeeper.session.timeout=60000"]
   ```

使用代理設定和 SSH 連接開啟，您可以使用 http://*master-public-dns-name*:60010/master-status 開啟瀏覽器視窗來檢視 HBase UI，其中 *master-public-dns-name* 是 HBase 叢集中的主節點公有 DNS 地址。

您可以使用 SSH 來連接至主節點並導覽至 `mnt/var/log/hbase` 目錄以檢視目前 HBase 日誌。這些日誌在叢集終止後即無法使用，除非在叢集啟動時啟用對 Amazon S3 的日誌記錄。

## 備份與還原 HBase
<a name="emr-3x-hbase-backup-restore"></a>

Amazon EMR 提供將 HBase 資料以手動或在自動排程的方式備份至 Amazon S3 的能力。您可以同時執行完整和增量備份。在您擁有 HBase 資料的備份版本後，您可以將該版本恢復至 HBase 叢集。您可恢復為目前正在執行中的 HBase 叢集，或啟動使用備份資料預先填入的新叢集。

在備份過程中，HBase 會繼續執行寫入命令。雖然此可確保您的叢集在整個備份過程仍可供使用，但可能會導致正在備份的資料以及平行執行的任何寫入操作間不一致的風險。若要了解可能產生的不一致，您需要考慮在 HBase 如何在叢集節點之間分配寫入操作。如果寫入操作是在特定節點提取後發生，該資料不會包含在備份存檔。您可能甚至會發現對 HBase 叢集的舊寫入 (傳送至已提取的節點) 可能不在備份封存中，而較新的寫入 (在提取前傳送到節點) 則包含在內。

如果一致性備份是必要的，您必須在節點間的備份程序同步的初始部分時暫停寫入到 HBase。您可以在請求備份時透過指定 `--consistent` 參數來執行此操作。使用此參數，在此期間的寫入會排入佇列並在同步完成時立即執行。您也可以排定重複備份，這可解決在一段時間後任何不一致，因為在某個備份時遺失的資料會在以下傳遞時加以備份。

當您備份 HBase 資料時，您應為每個叢集指定不同的備份目錄。一個簡單的方式是在為備份目錄指定路徑時使用叢集識別符。例如 `s3://amzn-s3-demo-bucket/backups/j-3AEXXXXXX16F2`。這可確保任何未來的增量備份會參考正確的 HBase 叢集。

當您準備好刪除不再需要的舊備份檔案，我們建議您先執行完整的 HBase 資料備份。這可確保所有資料都會保留，並提供基準供未來增量備份使用。完整的備份完成後，您可以導覽至備份位置和手動刪除舊的備份檔案。

HBase 備份程序會將 S3DistCp 用於複製操作，其對臨時檔案儲存空間有特定的限制。

### 使用主控台備份與還原 HBase
<a name="emr-3x-hbase-backup-restore-console"></a>

主控台可讓您啟動新叢集並填入先前 HBase 備份的資料。它還可讓您排定 HBase 資料的週期性增量備份。可以透過 CLI 來使用額外的備份與恢復功能 (例如，能夠將資料恢復到已在執行的叢集，執行手動備份和排程自動完整備份)。

**若要使用主控台將封存 HBase 資料填入新叢集**

1. 導覽至新的 Amazon EMR 主控台，然後從側邊導覽選取**切換至舊主控台**。如需有關切換至舊主控台時預期情況的詳細資訊，請參閱[使用舊主控台](https://docs.aws.amazon.com/emr/latest/ManagementGuide/whats-new-in-console.html#console-opt-in)。

1. 選擇 **Create Cluster** (建立叢集)。

1. 在 **Software Configuration (軟體組態)** 區段中，針對 **Additional Applications (其他應用程式)**，選擇 **HBase (HBase)** 和 **Configure and add (設定和新增)**。

1. 在 **Add Application (新增應用程式)** 對話方塊中，檢查 **Restore From Backup (從備份恢復)**。

1. 對於 **Backup Location (備份位置)**，指定備份 yto 載入到新 HBase 叢集的位置。這應該是表單 `s3://amzn-s3-demo-bucket/backups/` 的 Amazon S3 URL。

1. 對於 **Backup Version (備份版本)**，您可以選擇透過設定值指定要載入的備份版本名稱。如果您不為**備份版本**設定值，Amazon EMR 會在指定的位置中載入最新的備份。

1. 選擇 **Add (新增)** 然後依需要使用其他選項繼續建立叢集。

**若要使用主控台排程 HBase 資料的自動備份**

1. 在 **Software Configuration (軟體組態)** 區段中，針對 **Additional Applications (其他應用程式)**，選擇 **HBase (HBase)** 和 **Configure and add (設定和新增)**。

1. 選擇 **Schedule Regular Backups (排程定期備份)**。

1. 指定備份是否應保持一致。一致性備份是在初始備份階段時暫停寫入操作的備份，以同步到節點。暫停的任何寫入操作會放入佇列中並在同步完成時恢復。

1. 透過輸入 **Backup Frequency (備份頻率)** 的數字並選擇 **Days (天)**、**Hours (小時)** 或 **Minutes (分鐘)** 來設定備份的發生頻率。第一種可執行完整備份的自動備份；Amazon EMR 會根據您指定的排程來節省增量備份。

1. 指定 Amazon S3 中備份應存放的位置。應將每個 HBase 叢集備份到 Amazon S3 中的不同位置，以確保增量備份的正確計算方式。

1. 透過設定 **Backup Start Time (備份開始時間)** 的值來指定第一次備份應發生的時間。您可以將此值設為 `now`，其會讓第一個備份在叢集一執行時就立即開始，或以 [ISO 格式](http://www.w3.org/TR/NOTE-datetime)輸入日期和時間。例如，2013-09-26T20:00Z 會將開始時間設為 UTC 2013 年 9 月 26 日下午 8 點。

1. 選擇**新增**。

1. 然後依需要使用其他選項繼續建立叢集。

## 使用 CloudWatch 監控 HBase
<a name="emr-3x-hbase-cloudwatch"></a>

Amazon EMR 會向 CloudWatch 報告三個您可以使用的指標來監控 HBase 備份。系統會以 5 分鐘的間隔將這些指標推送到 CloudWatch，且無須付費。


| 指標 | Description | 
| --- | --- | 
| HBaseBackupFailed |  最後一個備份是否失敗。根據預設，這設為 0，並在先前的備份嘗試失敗時更新為 1。只會針對 HBase 叢集報告此指標。 使用案例：監控 HBase 備份 單位：*計數*  | 
| HBaseMostRecentBackupDuration |  先前完成備份所需要的時間量。不論最後一個已完成的備份成功還是失敗，都會設定此指標。正在進行備份時，此指標會傳回備份開始之後的分鐘數。只會針對 HBase 叢集報告此指標。 使用案例：監控 HBase 備份 單位：*分鐘*  | 
| HBaseTimeSinceLastSuccessfulBackup |  在叢集上開始最後一個成功 HBase 備份之後所經歷的分鐘數。只會針對 HBase 叢集報告此指標。 使用案例：監控 HBase 備份 單位：*分鐘*  | 

## 設定 Ganglia for HBase
<a name="emr-3x-ganglia-for-hbase"></a>

您會使用 **configure-hbase-for-ganglia (configure-hbase-for-ganglia)** 引導操作來設定 Ganglia for HBase。此引導操作會將 HBase 設定為將指標發佈至 Ganglia。

您必須在啟動叢集時設定 HBase 和 Ganglia；無法將 Ganglia 報告新增到執行中的叢集。

Ganglia 也會在 `/mnt/var/log/ganglia/rrds` 中的伺服器上存放日誌檔。如果您將叢集設定為將日誌檔案保留到 Amazon S3 儲存貯體中，那麼 Ganglia 日誌檔案也會保留在該處。

若要使用 Ganglia for HBase 啟動叢集，請如下例所示使用 **configure-hbase-for-ganglia (configure-hbase-for-ganglia)** 引導操作。

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

```
aws emr create-cluster --name "Test cluster" --ami-version 3.3 \
--applications Name=Hue Name=Hive Name=Pig Name=HBase Name=Ganglia \
--use-default-roles --ec2-attributes KeyName=myKey \
--instance-type c1.xlarge --instance-count 3 --termination-protected \
--bootstrap-actions Path=s3://elasticmapreduce/bootstrap-actions/configure-hbase-for-ganglia
```

在設定好 Ganglia 並啟動叢集後，您可以使用主節點上執行的圖形介面存取 Ganglia 圖表和報告。