本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
HBase 在 Amazon S3 (Amazon S3 儲存模式) 上
當您HBase在 Amazon 5.2.0 EMR版或更新版本上執行 時,您可以在 Amazon S3 HBase上啟用 ,其提供下列優點:
HBase 根目錄儲存在 Amazon S3 中,包括HBase存放區檔案和資料表中繼資料。此資料持續存在於叢集之外,可在 Amazon EC2可用區域使用,您不需要使用快照或其他方法復原。
使用 Amazon S3 中的儲存檔案,您可以根據運算需求調整 Amazon EMR叢集的大小,而不是資料需求,並在 中使用 3 倍複寫HDFS。
使用 Amazon 5.7EMR.0 版或更新版本,您可以設定僅供讀取複本叢集,這可讓您在 Amazon S3 中維護資料的唯讀複本。您可以在主叢集無法使用時,從僅供讀取複本叢集存取資料來同時執行讀取操作。
在 Amazon 6.2.0 版及更新EMR版本中,持久性HFile追蹤使用稱為 HBase的系統資料表
hbase:storefile
直接追蹤用於讀取操作的HFile路徑。此功能預設為啟用,無需執行手動遷移。
下圖顯示 Amazon S3 HBase上與 相關的HBase元件。
在 Amazon S3 HBase上啟用
您可以使用 Amazon 主控台、 或 Amazon 在 Amazon S3 HBase上啟用 EMR API。 EMR AWS CLI組態在叢集建立期間是一個選項。如果您選擇使用主控台,請前往 Advanced options (進階選項) 選擇該設定。當您使用 時 AWS CLI,請使用 --configurations
選項來提供JSON組態物件。組態物件屬性指定了 Amazon S3 中的儲存模式的和根目錄位置。您指定的 Amazon S3 位置應與 Amazon EMR叢集位於相同的區域。一次只能有一個作用中叢集可以使用 Amazon S3 中的相同HBase根目錄。如需使用 的主控台步驟和詳細的 create-cluster 範例 AWS CLI,請參閱 使用 建立叢集 HBase。範例組態物件會顯示在下列程式碼JSON片段中。
{ "Classification": "hbase-site", "Properties": { "hbase.rootdir": "
s3://amzn-s3-demo-bucket/my-hbase-rootdir
"} }, { "Classification": "hbase", "Properties": { "hbase.emr.storageMode":"s3
" } }
注意
如果您使用 Amazon S3 儲存貯體做為 rootdir
的 HBase,則必須在 Amazon S3 的結尾加上斜線URI。例如,您必須使用 "hbase.rootdir: s3://amzn-s3-demo-bucket/"
而不是 "hbase.rootdir: s3://amzn-s3-demo-bucket"
,以避免問題。
使用僅供讀取複本叢集
在 Amazon S3 HBase上使用 設定主要叢集後,您可以建立和設定僅供讀取複本叢集,以提供與主要叢集相同資料的唯讀存取權。如果主叢集無法使用,而您需要同時存取查詢資料或不中斷存取時,這非常有用。僅供讀取複本功能適用於 Amazon 5.7.0 版及更新EMR版本。
主叢集和僅供讀取複本叢集是以相同方法設定,但僅有一處重要的不同。兩個都指向相同的 hbase.rootdir
位置。不過,僅供讀取複本叢集的 hbase
分類包含了 "hbase.emr.readreplica.enabled":"true"
屬性。
例如,由於主要叢集的JSON分類如主題前面所示,僅供讀取複本叢集的組態如下所示:
{ "Classification": "hbase-site", "Properties": { "hbase.rootdir": "
s3://amzn-s3-demo-bucket/my-hbase-rootdir
"} }, { "Classification": "hbase", "Properties": { "hbase.emr.storageMode":"s3
", "hbase.emr.readreplica.enabled":"true" } }
在您新增資料時同步僅供讀取複本
由於僅供讀取複本使用主要叢集寫入 Amazon S3 的 HBase StoreFiles 和中繼資料,因此僅供讀取複本僅與 Amazon S3 資料存放區一樣為最新版本。當您寫入資料時,以下指導有助於降低主叢集和僅供讀取複本之間的時間延遲。
盡可能在主叢集上大量載入資料。如需詳細資訊,請參閱 Apache HBase 文件中的大量載入
。 在新增資料後,將儲存檔案寫入至 Amazon S3 的排清應盡快進行。手動排清或調整排清設定以盡量減少延遲。
如果壓縮可能會自動執行,請執行手動壓縮以避免壓縮觸發時間不一致。
在僅供讀取複本叢集上,當任何中繼資料變更時 - 例如,發生HBase區域分割或壓縮,或新增或移除資料表時 - 執行
refresh_meta
命令。在僅供讀取複本叢集上,當表格中新增或變更記錄時,請執行
refresh_hfiles
命令。
持續HFile追蹤
持續HFile追蹤使用稱為 HBase的系統資料表hbase:storefile
,直接追蹤用於讀取操作的HFile路徑。當其他資料新增至 時,新HFile路徑會新增至資料表HBase。這會移除重命名操作作為關鍵寫入路徑HBase操作中的遞交機制,並透過從hbase:storefile
系統資料表讀取而非檔案系統目錄清單來改善開啟HBase區域的復原時間。此功能預設為在 Amazon 6.2.0 版及更新EMR版本上啟用,不需要任何手動遷移步驟。
注意
使用 HBase Storefile 系統資料表的持續HFile追蹤不支援HBase區域複寫功能。如需HBase區域複寫的詳細資訊,請參閱時間軸一致性高可用讀取
停用持續HFile追蹤
持久性HFile追蹤預設為從 Amazon 6.2.0 EMR版開始啟用。若要停用持續HFile追蹤,請在啟動叢集時指定下列組態覆寫:
{ "Classification": "hbase-site", "Properties": { "hbase.storefile.tracking.persist.enabled":"false", "hbase.hstore.engine.class":"org.apache.hadoop.hbase.regionserver.DefaultStoreEngine" } }
注意
重新設定 Amazon EMR叢集時,必須更新所有執行個體群組。
手動同步 Storefile 資料表
HFiles 建立新的 Storefile 資料表時,會保持最新狀態。但是,如果 storefile 資料表因任何原因與資料檔案不同步,可以使用下列命令來手動同步資料:
同步線上區域的 storefile 資料表:
hbase org.apache.hadoop.hbase.client.example.RefreshHFilesClient <table>
同步離線區域的 storefile 資料表:
移除 storefile 資料表 znode。
echo "ls /hbase/storefile/loaded" | sudo -u hbase hbase zkcli [<tableName>, hbase:namespace] # The TableName exists in the list echo "delete /hbase/storefile/loaded/<tableName>" | sudo -u hbase hbase zkcli # Delete the Table ZNode echo "ls /hbase/storefile/loaded" | sudo -u hbase hbase zkcli [hbase:namespace]
指派區域 (在 'hbase shell' 中執行)。
hbase cli> assign '<region name>'
如果指派失敗。
hbase cli> disable '<table name>' hbase cli> enable '<table name>'
擴展 Storefile 資料表
依預設,storefile 資料表分成四個區域。如果 storefile 資料表仍處於繁重的寫入負載下,則可以手動進一步分割此資料表。
若要分割特定的熱區域,請使用下列命令 (在 'hbase shell' 中執行)。
hbase cli> split '<region name>'
若要分割資料表,請使用下列命令 (在 'hbase shell' 中執行)。
hbase cli> split 'hbase:storefile'
營運考量事項
HBase 區域伺服器用於 BlockCache 將資料讀取儲存在記憶體中 BucketCache ,以及將資料讀取儲存在本機磁碟上。此外,區域伺服器會使用 MemStore 來存放記憶體內資料寫入,並使用預先寫入日誌在資料寫入 Amazon S3 HBase StoreFiles HDFS之前存放資料寫入。叢集的讀取效能與從內部記憶體或磁碟快取擷取記錄的頻率有關。快取遺失會導致記錄從 Amazon S3 StoreFile 中的 讀取,相較於從 讀取,其延遲和標準差明顯較高HDFS。此外,Amazon S3 所能達成的最大請求率低於本機快取的最大請求率,因此快取資料對於大量讀取的工作負載可能很重要。如需有關 Amazon S3 效能的詳細資訊,請參閱《Amazon Simple Storage Service 使用者指南》中的效能優化。
為了改善效能,我們建議您盡可能在EC2執行個體儲存中快取您的資料集。由於 BucketCache 使用區域伺服器的EC2執行個體儲存體,因此您可以選擇具有足夠EC2執行個體儲存體的執行個體類型,並新增 Amazon EBS儲存體以容納所需的快取大小。您也可以使用 hbase.bucketcache.size
屬性來增加連接執行個體存放區和EBS磁碟區BucketCache 的大小。預設設定為 8,192 MB。
對於寫入,在次要和主要壓縮期間排 MemStore 清的頻率和 StoreFiles 存在的次數可能會大幅增加區域伺服器回應時間。為了獲得最佳效能,請考慮增加MemStore 排清和HRegion區塊乘數的大小,這會增加主要壓縮之間的經過時間,但如果您使用僅供讀取複本,也會增加延遲一致性。在某些情況下,您可能會使用較大的檔案區塊大小 (但小於 5 GB) 來觸發 中的 Amazon S3 分段上傳功能,進而獲得更好的效能EMRFS。Amazon EMR的區塊大小預設為 128 MB。如需詳細資訊,請參閱HDFS 組態。我們很少看到超過 1 GB 區塊大小的客戶,同時透過排清和壓縮對效能進行基準測試。此外,當 StoreFiles 需要HBase壓縮的次數較少時,壓縮和區域伺服器會以最佳方式執行。
由於大型目錄需要重新命名,資料表可能需要很長的時間才能在 Amazon S3 上刪除。考慮停用表格,而不是刪除。
有一個HBase更乾淨的程序可清除舊WAL檔案和存放檔案。使用 Amazon EMR5.17.0 版及更新版本時,全球都會啟用清除程式,並且可以使用下列組態屬性來控制清除程式行為。
組態屬性 | 預設值 | 描述 |
---|---|---|
|
1 |
配置來清除過期大型 的執行緒數目HFiles。 |
|
1 |
配置來清除過期小型 的執行緒數目HFiles。 |
|
設定為所有可用核心的四分之一。 |
要掃描 oldWALs 目錄的執行緒數目。 |
|
2 |
清除 oldWALs 目錄WALs下 的執行緒數目。 |
使用 Amazon EMR 5.17.0 及更早版本,更乾淨的操作可能會影響執行繁重工作負載時的查詢效能,因此建議您僅在離峰時間啟用更乾淨的 。清除程式具有下列 HBase Shell 命令:
cleaner_chore_enabled
查詢清理工具是否已啟用。cleaner_chore_run
手動執行清理工具以移除檔案。cleaner_chore_switch
啟用或停用清理工具,並傳回清理工具之前的狀態。例如,cleaner_chore_switch true
啟用清理工具。
Amazon S3 效能調校HBase上的 屬性
當您HBase在 Amazon S3 上使用 時,可調整下列參數來調整工作負載的效能。
組態屬性 | 預設值 | 描述 |
---|---|---|
|
8,192 |
區域伺服器上 Amazon EC2執行個體存放區和 BucketCache 儲存EBS磁碟區預留的磁碟空間量,以 MB 為單位。該設定會套用於所有區域伺服器執行個體。較大的 BucketCache 大小通常對應於改善的效能 |
|
134217728 |
Memstore 排清至 Amazon S3 的資料限制 (位元組) 已觸發。 |
|
4 |
決定封鎖更新 MemStore 上限的乘數。如果 MemStore 超過此值的 |
|
10 |
在封鎖更新之前,儲存體中 StoreFiles 可以存在的最大數量。 |
|
10737418240 |
在區域分割之前的大小上限。 |
關閉和還原叢集而不遺失資料
若要關閉 Amazon EMR叢集,而不會遺失尚未寫入 Amazon S3 的資料,您應該將 MemStore 快取排清至 Amazon S3 以寫入新的存放區檔案。首先,您需要停用所有資料表。當您新增步驟到叢集時,可以使用以下步驟組態。如需詳細資訊,請參閱 Amazon AWS CLI 管理指南 中的使用 和 主控台的步驟。 EMR
Name="Disable all tables",Jar="command-runner.jar",Args=["/bin/bash","/usr/lib/hbase/bin/disable_all_tables.sh"]
或者,您也可以直接執行下列 bash 命令。
bash /usr/lib/hbase/bin/disable_all_tables.sh
停用所有資料表後,請使用 HBase shell 和下列命令排清hbase:meta
資料表。
flush 'hbase:meta'
然後,您可以執行 Amazon EMR叢集上提供的 Shell 指令碼來排清MemStore 快取。您可以新增它作為步驟,或使用叢集上的 AWS CLI來直接執行。指令碼會停用所有HBase資料表,這會導致每個區域伺服器中的 MemStore排清至 Amazon S3。如果該指令碼成功完成,則該資料將保留在 Amazon S3 中,且叢集可以終止。
若要重新啟動具有相同HBase資料的叢集,請在 或使用 AWS Management Console hbase.rootdir
組態屬性,指定與上一個叢集相同的 Amazon S3 位置。