溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

HBase如何使用HashTable/SyncTable工具同步集群數(shù)據(jù)

發(fā)布時間:2021-12-08 14:20:44 來源:億速云 閱讀:340 作者:小新 欄目:大數(shù)據(jù)

這篇文章主要為大家展示了“HBase如何使用HashTable/SyncTable工具同步集群數(shù)據(jù)”,內(nèi)容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領(lǐng)大家一起研究并學(xué)習(xí)一下“HBase如何使用HashTable/SyncTable工具同步集群數(shù)據(jù)”這篇文章吧。

HashTable/SyncTable簡介

HashTable/SyncTable是一種工具,實(shí)現(xiàn)為兩個作為單獨(dú)步驟執(zhí)行的map-reduce作業(yè)。它看起來類似于CopyTable工具,該工具可以執(zhí)行部分或全部表數(shù)據(jù)復(fù)制。與CopyTable不同,它僅在目標(biāo)集群之間復(fù)制分散的數(shù)據(jù),從而在復(fù)制過程中節(jié)省了網(wǎng)絡(luò)和計算資源。

該過程中要執(zhí)行的第一步是HashTable Map-Reduce作業(yè)。這應(yīng)在其數(shù)據(jù)應(yīng)復(fù)制到遠(yuǎn)程對等方(通常是源集群)的集群上運(yùn)行。下面顯示了如何運(yùn)行它的快速示例,本文稍后將給出每個必需參數(shù)的詳細(xì)說明: 

hbase org.apache.hadoop.hbase.mapreduce.HashTable --families=cf my-table /hashes/test-tbl…20/04/28 05:05:48 INFO mapreduce.Job:  map 100% reduce 100%20/04/28 05:05:49 INFO mapreduce.Job: Job job_1587986840019_0001 completed successfully20/04/28 05:05:49 INFO mapreduce.Job: Counters: 68…File Input Format CountersBytes Read=0File Output Format CountersBytes Written=6811788

一旦HashTable的上述命令作業(yè)執(zhí)行完成,已經(jīng)在源HDFS已經(jīng)產(chǎn)生了一些輸出hdfs 的/hashes/my-table 的表目錄:

hdfs dfs -ls -R /hashes/test-tbldrwxr-xr-x   - root supergroup          0 2020-04-28 05:05 /hashes/test-tbl/hashes-rw-r--r--   2 root supergroup          0 2020-04-28 05:05 /hashes/test-tbl/hashes/_SUCCESSdrwxr-xr-x   - root supergroup          0 2020-04-28 05:05 /hashes/test-tbl/hashes/part-r-00000-rw-r--r--   2 root supergroup    6790909 2020-04-28 05:05 /hashes/test-tbl/hashes/part-r-00000/data-rw-r--r--   2 root supergroup      20879 2020-04-28 05:05 /hashes/test-tbl/hashes/part-r-00000/index-rw-r--r--   2 root supergroup         99 2020-04-28 05:04 /hashes/test-tbl/manifest-rw-r--r--   2 root supergroup        153 2020-04-28 05:04 /hashes/test-tbl/partitions

需要這些作為SyncTable運(yùn)行的輸入。SyncTable必須在目標(biāo)對等方啟動。下面的命令為上一個示例中的HashTable的輸出運(yùn)行SyncTable 。它使用本文稍后說明的dryrun選項(xiàng):

hbase org.apache.hadoop.hbase.mapreduce.SyncTable --dryrun --sourcezkcluster=zk1.example.com,zk2.example.com,zk3.example.com:2181:/hbase hdfs://source-cluster-active-nn/hashes/test-tbl test-tbl test-tbl…org.apache.hadoop.hbase.mapreduce.SyncTable$SyncMapper$CounterBATCHES=97148HASHES_MATCHED=97146HASHES_NOT_MATCHED=2MATCHINGCELLS=17MATCHINGROWS=2RANGESNOTMATCHED=2ROWSWITHDIFFS=2SOURCEMISSINGCELLS=1TARGETMISSINGCELLS=1

作為快速參考,您可以僅將兩個示例中的給定參數(shù)替換為實(shí)際環(huán)境值。本文的其余部分將更深入地介紹實(shí)現(xiàn)細(xì)節(jié)。

 

為什么要兩個不同的步驟?

該工具的主要目標(biāo)是僅識別和復(fù)制兩個集群之間丟失的數(shù)據(jù)。HashTable充當(dāng)分片/索引工作,分析表數(shù)據(jù)的批處理,并為每個批處理生成哈希索引。這些是作為作業(yè)參數(shù)之一傳遞的hdfs 的/hashes/my-table目錄下文件中寫入的輸出。如前所述,SyncTable作業(yè)需要此輸出。SyncTable以與HashTable使用的批處理大小相同的本地大小在本地掃描目標(biāo)表,并使用HashTable使用的相同函數(shù)為這些批處理計算哈希值。然后比較本地批處理哈希HashTable輸出中的值之一。如果哈希值相等,則意味著在兩個集群中整個批次是相同的,并且不需要在該段上復(fù)制任何內(nèi)容。否則,它將對源集群中的批次打開掃描,檢查目標(biāo)集群中是否已存在每個單元,僅復(fù)制那些有差異的單元。在稀疏,略有不同的數(shù)據(jù)集上,這將導(dǎo)致在兩個集群之間復(fù)制的數(shù)據(jù)少得多。它還將僅需要在源中掃描少量的單元以檢查不匹配。

必要參數(shù)

HashTable僅需要兩個參數(shù):表名稱和將在其中寫入相關(guān)哈希和其他元信息文件的輸出路徑。SyncTable使用HashTable輸出目錄作為輸入,并分別使用源集群和目標(biāo)集群中的表名稱。由于我們使用HashTable/SyncTable在遠(yuǎn)程集群之間移動數(shù)據(jù),因此必須為SyncTable定義sourcezkcluster選項(xiàng)。這應(yīng)該是源集群的Zookeeper仲裁地址。在本文的示例中,我們還直接引用了源集群活動namenode地址,以便SyncTable將直接從源集群讀取哈希輸出文件?;蛘撸梢詫?strong>HashTable輸出手動從源集群復(fù)制到遠(yuǎn)程集群(例如,使用distcp)。

注意:僅從CDH 6.2.1起才支持在不同kerberos領(lǐng)域下使用遠(yuǎn)程集群。

高級選項(xiàng)

這兩個哈希表SyncTable提供可調(diào)節(jié)以獲得最佳效果額外的可選選項(xiàng)。 

HashTable允許分別通過行鍵和修改時間(分別具有startrow/starttime,stoprow/stoptime屬性)來過濾數(shù)據(jù)。數(shù)據(jù)集范圍也可以受版本和列簇屬性限制。所述BATCHSIZE屬性定義了將被散列各部分的尺寸。這直接影響同步性能。在不匹配的情況很少的情況下,將較大的批處理值設(shè)置為更高的性能可能會導(dǎo)致數(shù)據(jù)集的較大部分被忽略,而無需通過SyncTable進(jìn)行掃描。

SyncTable提供了dryrun選項(xiàng),該選項(xiàng)允許預(yù)覽要在目標(biāo)中應(yīng)用的更改。 

SyncTable的默認(rèn)行為是在目標(biāo)端鏡像源數(shù)據(jù),因此目標(biāo)中存在但源中不存在的任何其他單元最終都會在目標(biāo)端被刪除。在Active-Active復(fù)制設(shè)置下同步集群時,這可能是不希望的,在這種情況下,可以將doDeletes選項(xiàng)設(shè)置為false,從而跳過目標(biāo)上刪除的復(fù)制。對于不應(yīng)將其他單元插入目標(biāo)集群的情況,也有一個類似的doPuts標(biāo)志。

輸出分析

HashTable輸出一些帶有SyncTable的元信息的文件,但是這些文件不可讀。它不會對現(xiàn)有數(shù)據(jù)執(zhí)行任何更改,因此相關(guān)信息對于用戶上下文幾乎沒有興趣。 

SyncTable是真正將修改應(yīng)用到目標(biāo)上的步驟,在實(shí)際更改目標(biāo)集群數(shù)據(jù)之前,請先查看其摘要,這一點(diǎn)很重要(請參見上述dryrun選項(xiàng))。它在映射的末尾發(fā)布一些相關(guān)的計數(shù)器以Reduce執(zhí)行。查看上例中的值,我們可以看到有哈希的97148個分區(qū)(由BATCHES計數(shù)器報告),SyncTable僅檢測到其中兩個分區(qū)的差異(根據(jù)HASHES_MATCHEDHASHES_NOT_MACTHED計數(shù)器)。另外,內(nèi)兩個分區(qū)具有不同的散列,  17個單元2行中是匹配的(分別由MATCHING_CELLSMATCHING_ROWS報告),但是在這兩個分區(qū)上也有2行是分歧的(根據(jù)RANGESNOTMATCHEDROWSWITHDIFFS)。最后,SOURCEMISSINGCELLSTARGETMISSINGCELLS會詳細(xì)告訴我們單元僅存在于源集群還是目標(biāo)集群上。在此示例中,源集群具有不在目標(biāo)上的一個單元,但是目標(biāo)也具有不在源上的單元。由于SyncTable是在未指定dryrun選項(xiàng)并將doDeletes選項(xiàng)設(shè)置為false的情況下運(yùn)行的,作業(yè)已刪除目標(biāo)集群中的多余單元,并將源中找到的多余單元添加到了目標(biāo)集群。假設(shè)在兩個集群上均未發(fā)生寫操作,則隨后在目標(biāo)集群中運(yùn)行完全相同的SyncTable命令將不會顯示任何差異:

hbase org.apache.hadoop.hbase.mapreduce.SyncTable --sourcezkcluster=zk1.example.com,zk2.example.com,zk3.example.com:2181:/hbase hdfs://nn:9000/hashes/test-tbl test-tbl test-tbl…org.apache.hadoop.hbase.mapreduce.SyncTable$SyncMapper$CounterBATCHES=97148HASHES_MATCHED=97148…
 

適用場景

數(shù)據(jù)同步

乍一看,HashTable/SyncTable似乎與CopyTable工具重疊,但是在某些特定情況下,這兩種工具都更適合。作為第一個比較示例,使用HashTable/SyncTable初始化包含100,004行且總數(shù)據(jù)大小為5.17GB的表的初始加載僅需幾分鐘即可完成SyncTable 

...20/04/29 03:48:00 INFO mapreduce.Job: Running job: job_1587985272792_001120/04/29 03:48:09 INFO mapreduce.Job: Job job_1587985272792_0011 running in uber mode : false20/04/29 03:48:09 INFO mapreduce.Job:  map 0% reduce 0%20/04/29 03:54:08 INFO mapreduce.Job:  map 100% reduce 0%20/04/29 03:54:09 INFO mapreduce.Job: Job job_1587985272792_0011 completed successfully…org.apache.hadoop.hbase.mapreduce.SyncTable$SyncMapper$CounterBATCHES=97148EMPTY_BATCHES=97148HASHES_NOT_MATCHED=97148RANGESNOTMATCHED=97148ROWSWITHDIFFS=100004TARGETMISSINGCELLS=749589TARGETMISSINGROWS=100004

即使在如此小的數(shù)據(jù)集上,CopyTable的執(zhí)行速度也更快(大約3分鐘,而SyncTable則需要6分鐘才能復(fù)制整個數(shù)據(jù)集):

...20/04/29 05:12:07 INFO mapreduce.Job: Running job: job_1587986840019_000520/04/29 05:12:24 INFO mapreduce.Job: Job job_1587986840019_0005 running in uber mode : false20/04/29 05:12:24 INFO mapreduce.Job:  map 0% reduce 0%20/04/29 05:13:16 INFO mapreduce.Job:  map 25% reduce 0%20/04/29 05:13:49 INFO mapreduce.Job:  map 50% reduce 0%20/04/29 05:14:37 INFO mapreduce.Job:  map 75% reduce 0%20/04/29 05:15:14 INFO mapreduce.Job:  map 100% reduce 0%20/04/29 05:15:14 INFO mapreduce.Job: Job job_1587986840019_0005 completed successfully…HBase CountersBYTES_IN_REMOTE_RESULTS=2787236791BYTES_IN_RESULTS=5549784428MILLIS_BETWEEN_NEXTS=130808NOT_SERVING_REGION_EXCEPTION=0NUM_SCANNER_RESTARTS=0NUM_SCAN_RESULTS_STALE=0REGIONS_SCANNED=4REMOTE_RPC_CALLS=1334REMOTE_RPC_RETRIES=0ROWS_FILTERED=0ROWS_SCANNED=100004RPC_CALLS=2657RPC_RETRIES=0

現(xiàn)在,讓我們再次使用這兩種工具來處理數(shù)據(jù)集上的稀疏差異。所有這些示例上使用的test-tbl表在源集群中具有四個區(qū)域。在上一示例中將所有原始數(shù)據(jù)集復(fù)制到目標(biāo)集群之后,我們僅在源端添加了四行,每個現(xiàn)有區(qū)域都添加了一行,然后再次運(yùn)行HashTable/SyncTable同步兩個集群:

20/04/29 05:29:23 INFO mapreduce.Job: Running job: job_1587985272792_001320/04/29 05:29:39 INFO mapreduce.Job: Job job_1587985272792_0013 running in uber mode : false20/04/29 05:29:39 INFO mapreduce.Job:  map 0% reduce 0%20/04/29 05:29:53 INFO mapreduce.Job:  map 50% reduce 0%20/04/29 05:30:42 INFO mapreduce.Job:  map 100% reduce 0%20/04/29 05:30:42 INFO mapreduce.Job: Job job_1587985272792_0013 completed successfully…org.apache.hadoop.hbase.mapreduce.SyncTable$SyncMapper$CounterBATCHES=97148HASHES_MATCHED=97144HASHES_NOT_MATCHED=4MATCHINGCELLS=42MATCHINGROWS=5RANGESNOTMATCHED=4ROWSWITHDIFFS=4TARGETMISSINGCELLS=4TARGETMISSINGROWS=4

我們可以看到,只有四個分區(qū)不匹配,SyncTable的速度要快得多(大約需要一分鐘才能完成)。使用CopyTable執(zhí)行相同的同步顯示以下結(jié)果:

20/04/29 08:32:38 INFO mapreduce.Job: Running job: job_1587986840019_000820/04/29 08:32:52 INFO mapreduce.Job: Job job_1587986840019_0008 running in uber mode : false20/04/29 08:32:52 INFO mapreduce.Job:  map 0% reduce 0%20/04/29 08:33:38 INFO mapreduce.Job:  map 25% reduce 0%20/04/29 08:34:15 INFO mapreduce.Job:  map 50% reduce 0%20/04/29 08:34:48 INFO mapreduce.Job:  map 75% reduce 0%20/04/29 08:35:31 INFO mapreduce.Job:  map 100% reduce 0%20/04/29 08:35:32 INFO mapreduce.Job: Job job_1587986840019_0008 completed successfully…HBase CountersBYTES_IN_REMOTE_RESULTS=2762547723BYTES_IN_RESULTS=5549784600MILLIS_BETWEEN_NEXTS=340672NOT_SERVING_REGION_EXCEPTION=0NUM_SCANNER_RESTARTS=0NUM_SCAN_RESULTS_STALE=0REGIONS_SCANNED=4REMOTE_RPC_CALLS=1323REMOTE_RPC_RETRIES=0ROWS_FILTERED=0ROWS_SCANNED=100008RPC_CALLS=2657RPC_RETRIES=0

即使只復(fù)制四個單元格,CopyTable花費(fèi)的時間與復(fù)制整個數(shù)據(jù)集所花費(fèi)的時間相同。對于這個非常小的數(shù)據(jù)集和一個空閑的集群,這仍然可以實(shí)現(xiàn),但是在具有較大數(shù)據(jù)集的生產(chǎn)用例下,并且許多向其寫入數(shù)據(jù)的客戶端應(yīng)用程序也可能使用目標(biāo)集群,與SyncTable相比,CopyTable的性能下降會更高。

值得一提的是,還有其他工具/功能可以結(jié)合使用以用于目標(biāo)集群的初始加載(目標(biāo)根本沒有數(shù)據(jù)),例如快照導(dǎo)出,批量加載,甚至是原始副本的直接副本。源集群中的表目錄。對于要復(fù)制大量數(shù)據(jù)的初始負(fù)載,先制作表快照,然后再使用ExportSnapshot工具,將勝過SyncTableCopyTable等在線復(fù)制工具。

檢查復(fù)制完整性

當(dāng)對可能的復(fù)制問題進(jìn)行故障排除時,HashTable/SyncTable的另一個常見用途是監(jiān)視集群之間的復(fù)制狀態(tài)。在這種情況下,它可以用作VerifyReplication工具的替代方法。通常,在檢查兩個集群之間的狀態(tài)時,要么根本沒有不匹配,要么是暫時的臨時問題導(dǎo)致較大數(shù)據(jù)集的一小部分不同步。在前面的示例中,我們一直在測試環(huán)境中使用兩個簇上應(yīng)有100,008行具有匹配值的行。使用dryrun選項(xiàng)在目標(biāo)集群上運(yùn)行SyncTable將使我們確定所有差異:

20/05/04 10:47:25 INFO mapreduce.Job: Running job: job_1588611199158_000420/05/04 10:48:48 INFO mapreduce.Job:  map 100% reduce 0%20/05/04 10:48:48 INFO mapreduce.Job: Job job_1588611199158_0004 completed successfullyHBase CountersBYTES_IN_REMOTE_RESULTS=3753476784BYTES_IN_RESULTS=5549784600ROWS_SCANNED=100008org.apache.hadoop.hbase.mapreduce.SyncTable$SyncMapper$CounterBATCHES=97148HASHES_MATCHED=97148...

Unlike SyncTable we must run the VerifyReplication tool on the source cluster. We pass the peer id as one of its parameters so that it can find the remote cluster to scan for comparison:20/05/04 11:01:58 INFO mapreduce.Job: Running job: job_1588611196128_000120/05/04 11:04:39 INFO mapreduce.Job:  map 100% reduce 0%20/05/04 11:04:39 INFO mapreduce.Job: Job job_1588611196128_0001 completed successfullyHBase CountersBYTES_IN_REMOTE_RESULTS=2761955495BYTES_IN_RESULTS=5549784600

org.apache.hadoop.hbase.mapreduce.replication.VerifyReplication$Verifier$CountersGOODROWS=100008...

SyncTable毫無區(qū)別地查找源分區(qū)和目標(biāo)分區(qū)之間的所有哈希匹配,因此避免了再次掃描遠(yuǎn)程源集群的需要。對兩個集群中的每個單元,VerifyReplication都會進(jìn)行一個一對一的比較,即使處理如此小的數(shù)據(jù)集,這也可能已經(jīng)帶來了很高的網(wǎng)絡(luò)成本。

在源集群中添加另一行,然后再次執(zhí)行檢查。使用VerifyReplication:

20/05/05 11:14:05 INFO mapreduce.Job: Running job: job_1588611196128_0004…20/05/05 11:16:32 INFO mapreduce.Job:  map 100% reduce 0%20/05/05 11:16:32 INFO mapreduce.Job: Job job_1588611196128_0004 completed successfully…org.apache.hadoop.hbase.mapreduce.replication.VerifyReplication$Verifier$CountersBADROWS=1GOODROWS=100008ONLY_IN_SOURCE_TABLE_ROWS=1…

在使用SyncTable之前,我們必須再次使用HashTable在源上重新生成哈希,因?yàn)楝F(xiàn)在有了一個新的單元格:

20/05/04 11:31:48 INFO mapreduce.Job: Running job: job_1588611196128_000320/05/04 11:33:15 INFO mapreduce.Job: Job job_1588611196128_0003 completed successfully...現(xiàn)在是SyncTable:20/05/07 05:47:51 INFO mapreduce.Job: Running job: job_1588611199158_0014

20/05/07 05:49:20 INFO mapreduce.Job: Job job_1588611199158_0014 completed successfullyorg.apache.hadoop.hbase.mapreduce.SyncTable$SyncMapper$CounterBATCHES=97148HASHES_NOT_MATCHED=97148MATCHINGCELLS=749593MATCHINGROWS=100008RANGESMATCHED=97147RANGESNOTMATCHED=1ROWSWITHDIFFS=1TARGETMISSINGCELLS=1TARGETMISSINGROWS=1

我們可以看到,由于兩個遠(yuǎn)程集群之間進(jìn)行了額外的掃描和單元比較,因此執(zhí)行時間增加了。同時,VerifyReplication的執(zhí)行時間幾乎沒有變化。

以上是“HBase如何使用HashTable/SyncTable工具同步集群數(shù)據(jù)”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對大家有所幫助,如果還想學(xué)習(xí)更多知識,歡迎關(guān)注億速云行業(yè)資訊頻道!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI