View a markdown version of this page

HBase su Amazon S3 (modalità di archiviazione Amazon S3) - Amazon EMR

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

HBase su Amazon S3 (modalità di archiviazione Amazon S3)

Quando esegui HBase su Amazon EMR versione 5.2.0 o successive, puoi abilitare HBase su Amazon S3, che offre i seguenti vantaggi:

  • La directory principale HBase viene archiviata in Amazon S3, inclusi i file dello store HBase e i metadati delle tabelle. Questi dati sono persistenti al di fuori del cluster, sono disponibili tra zone di disponibilità Amazon EC2 e non è necessario eseguire il ripristino utilizzando snapshot o altri metodi.

  • Con i file dello store in Amazon S3 puoi dimensionare il cluster Amazon EMR per i tuoi requisiti di calcolo anziché i requisiti dei dati, con replica 3x in HDFS.

  • Utilizzando Amazon EMR versione 5.7.0 o successive, puoi impostare una replica di lettura al cluster, che consente di mantenere copie di sola lettura dei dati in Amazon S3. Puoi accedere ai dati dalla replica di lettura al cluster per eseguire operazioni di lettura simultaneamente e nel caso in cui il cluster principale diventi indisponibile.

  • Nelle versioni da 6.2.0 a 7.3.0 di Amazon EMR, HFile Tracking persistente utilizza una tabella di sistema HBase chiamata hbase:storefile per tracciare direttamente i percorsi HFile utilizzati per le operazioni di lettura. Questa caratteristica è abilitata per impostazione predefinita e non richiede la migrazione manuale. Nelle versioni successive alla 7.3.0, i percorsi HFile vengono tracciati utilizzando un file tracker, che memorizza i percorsi HFile direttamente in un meta file, all'interno della directory del negozio.

Nota

Gli utenti che utilizzano una versione di Amazon EMR precedente alla 7.4.0 e stanno eseguendo la migrazione a e successive, consulta Migrazione dalle versioni precedenti di HBase EMR-7.4.0 e segui la documentazione di aggiornamento disponibile per garantire una transizione senza intoppi.

La figura seguente mostra i componenti di HBase rilevanti per HBase su Amazon S3.

Architettura di HBase su Amazon S3.

Abilitare HBase su Amazon S3

Puoi abilitare HBase su Amazon S3 utilizzando la console Amazon EMR, l'API Amazon EMR o Amazon EMR. AWS CLI La configurazione è un'opzione durante la creazione del cluster. Quando utilizzi la console, puoi scegliere l'impostazione utilizzando Advanced options (Opzioni avanzate). Quando utilizzi AWS CLI, utilizza l'opzione --configurations per fornire un oggetto di configurazione JSON. Le proprietà dell'oggetto di configurazione specificano la modalità di archiviazione e il percorso della directory principale in Amazon S3. Il percorso Amazon S3 specificato deve trovarsi nella stessa regione del cluster Amazon EMR. Solo un cluster attivo alla volta può utilizzare la stessa directory principale HBase in Amazon S3. Per i passaggi della console e un esempio dettagliato di creazione di cluster utilizzando il, consulta. AWS CLICreazione di un cluster con HBase Un esempio di oggetto di configurazione è mostrato nel seguente snippet JSON.

{ "Classification": "hbase-site", "Properties": { "hbase.rootdir": "s3://amzn-s3-demo-bucket/my-hbase-rootdir"} }, { "Classification": "hbase", "Properties": { "hbase.emr.storageMode":"s3" } }
Nota

Se utilizzi un bucket Amazon S3 come rootdir per HBase, dovrai aggiungere una barra alla fine dell'URI Amazon S3. Per evitare problemi occorre utilizzare, ad esempio, "hbase.rootdir: s3://amzn-s3-demo-bucket/" anziché "hbase.rootdir: s3://amzn-s3-demo-bucket".

Utilizzo della replica di lettura al cluster

Dopo aver configurato un cluster principale utilizzando HBase su Amazon S3, puoi creare e configurare una replica di lettura al cluster che fornisce accesso in sola lettura agli stessi dati del cluster principale. Ciò è utile quando è necessario accesso simultaneo per eseguire query sui dati o accesso ininterrotto se il cluster principale diventa non disponibile. La funzione replica di lettura è disponibile con Amazon EMR versione 5.7.0 e successive.

Il cluster principale e la replica di lettura al cluster vengono impostati nello stesso modo con una differenza importante. Entrambi fanno riferimento allo stesso percorso hbase.rootdir. Tuttavia, la classificazione hbase per la replica di lettura al cluster include la proprietà "hbase.emr.readreplica.enabled":"true".

Il cluster read-replica è progettato per operazioni di sola lettura e su di esso non devono essere eseguite azioni manuali di compattazione o scrittura. Per le versioni di Amazon EMR precedenti alla 7.4.0, si consiglia di disabilitare la compattazione sul cluster read-replica quando si abilita la funzionalità read-replica. Questa precauzione è necessaria perché, con la funzionalità di tracciamento persistente HFile abilitata sul cluster primario, è possibile che il cluster read-replica compatti le tabelle di sistema, causando potenzialmente un problema nel cluster primario. FileNotFoundException La disabilitazione della compattazione sul cluster read-replica previene le incoerenze dei dati tra il cluster primario e quello di replica di lettura.

Ad esempio, data la classificazione JSON per il cluster primario mostrata in precedenza nell'argomento, la configurazione per un cluster read-replica per le versioni EMR precedenti alla 7.4.0 è la seguente:

{ "Classification": "hbase-site", "Properties": { "hbase.rootdir": "s3://amzn-s3-demo-bucket/my-hbase-rootdir", "hbase.regionserver.compaction.enabled": "false" } }, { "Classification": "hbase", "Properties": { "hbase.emr.storageMode":"s3", "hbase.emr.readreplica.enabled":"true" } }

Per le versioni di Amazon EMR successive alla 7.3.0, ora utilizziamo la Monitoraggio dei file di archiviazione funzionalità, quindi non è necessario disabilitare le compattazioni.

Nota

Quando usi Amazon EMR versione 7.12.0 o successiva, utilizza la seguente configurazione di esempio:

{ "Classification": "hbase-site", "Properties": { "hbase.rootdir": "s3://{S3_LOCATION}" } }, { "Classification": "hbase", "Properties": { "hbase.emr.storageMode": "s3", "hbase.emr.readreplica.enabled.v2": "true" } }

Sincronizzazione della replica di lettura quando si aggiungono dati

Poiché la replica di lettura utilizza HBase StoreFiles e i metadati che il cluster primario scrive su Amazon S3, la replica di lettura è aggiornata solo quanto il data store di Amazon S3. Le seguenti indicazioni consentono di ridurre il ritardo tra il cluster principale e la replica di lettura durante la scrittura dei dati.

  • Se possibile, caricare i dati in blocco nel cluster principale. Per ulteriori informazioni, consulta la sezione relativa al Bulk loading (Caricamento in blocco) nella documentazione di Apache HBase.

  • Dopo che i dati vengono aggiunti, i file dello store devono essere scritti al più presto in Amazon S3 mediante uno svuotamento. Eseguire lo svuotamento manualmente o ottimizzare le impostazioni di svuotamento per ridurre il ritardo.

  • Se è possibile che vengano eseguite compattazioni automatiche, eseguire una compattazione manuale per evitare incoerenze quando le compattazioni vengono attivate.

  • Nella replica di lettura al cluster, quando sono state apportate modifiche ai metadati, ad esempio quando si verificano divisioni regione HBase o compattazioni o quando vengono aggiunte o rimosse tabelle, eseguire il comando refresh_meta.

  • Nella replica di lettura al cluster, eseguire il comando refresh_hfiles quando si aggiungono o modificano record in una tabella.

Sincronizzazione dei dati con una replica di lettura HBase

Tracciamento HFile persistente

Il tracciamento HFile persistente utilizza una tabella di sistema HBase chiamata hbase:storefile per tracciare direttamente i percorsi HFile utilizzati per le operazioni di lettura. I nuovi percorsi HFile vengono aggiunti alla tabella come i dati aggiuntivi vengono aggiunti ad HBase. Questo rimuove le operazioni di rinomina come meccanismo di commit nelle operazioni HBase del percorso di scrittura critico e ottimizza il tempo di ripristino quando si apre una regione HBase leggendo dalla tabella di sistema hbase:storefile anziché dall'elenco delle directory del file system. Questa funzionalità è abilitata di default nelle versioni di Amazon EMR da 6.2.0 a 7.3.0 e non richiede alcuna procedura di migrazione manuale.

Nota

Il tracciamento HFile persistente che utilizza la tabella di sistema Storefile di HBase non supporta la funzionalità di replica della regione HBase. Per ulteriori informazioni sulla replica delle regioni HBase, consulta High Available Reads. Timeline-consistent

Disabilitare il tracciamento HFile persistente

Il tracciamento persistente di HFile è abilitato per impostazione predefinita a partire dalla versione 6.2.0 di Amazon EMR. Per disabilitare il tracciamento HFile persistente, specifica la seguente override di configurazione durante l'avvio di un cluster:

{ "Classification": "hbase-site", "Properties": { "hbase.storefile.tracking.persist.enabled":"false", "hbase.hstore.engine.class":"org.apache.hadoop.hbase.regionserver.DefaultStoreEngine" } }
Nota

Durante la riconfigurazione del cluster Amazon EMR, tutti i gruppi di istanze devono essere aggiornati.

Sincronizzazione manuale della tabella Storefile

La tabella storefile viene mantenuta aggiornata man mano che vengono create nuove istanze HFile. Tuttavia, se la tabella storefile non è sincronizzata con i file di dati per qualsiasi motivo, i comandi seguenti possono essere utilizzati per sincronizzare manualmente i dati:

Sincronizza la tabella Storefile in una regione online:

hbase org.apache.hadoop.hbase.client.example.RefreshHFilesClient <table>

Sincronizza la tabella Storefile in una regione offline:

  • Rimuove lo znode della tabella Storefile.

    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]
  • Assegna la regione (da eseguire in "hbase shell").

    hbase cli> assign '<region name>'
  • Se l'assegnazione ha esito negativo.

    hbase cli> disable '<table name>' hbase cli> enable '<table name>'

Ridimensionamento della tabella Storefile

La tabella Storefile è suddivisa in quattro regioni per impostazione predefinita. Se la tabella Storefile presenta ancora un'ingente mole di scrittura, può essere ulteriormente divisa in modalità manuale.

Per dividere una regione critica specifica, utilizza il seguente comando (da eseguire in "hbase shell").

hbase cli> split '<region name>'

Per dividere la tabella, utilizza il seguente comando (da eseguire in "hbase shell").

hbase cli> split 'hbase:storefile'

Monitoraggio dei file di archiviazione

Per impostazione predefinita, utilizziamo l'FileBasedStoreFileTrackerimplementazione. Questa implementazione crea nuovi file direttamente nella directory del negozio, evitando la necessità di operazioni di ridenominazione. Mantiene un elenco di istanze hfile salvate in memoria, supportato da meta file in ogni directory di archiviazione. Ogni volta che viene eseguito il commit di un nuovo hfile, l'elenco dei file tracciati nell'archivio specificato viene aggiornato e viene scritto un nuovo meta file con il contenuto dell'elenco e scartando il meta file precedente, che contiene un elenco obsoleto. Ulteriori informazioni su Store File Tracking sono disponibili su Store File Tracking nella guida di riferimento di Apache HBase.

L'implementazione del FileBasedStoreFile tracker è abilitata per impostazione predefinita, a partire dalla versione 7.4.0 di Amazon EMR:

{ "Classification": "hbase-site", "Properties": { hbase.store.file-tracker.impl: "org.apache.hadoop.hbase.regionserver.storefiletracker.FileBasedStoreFileTracker" } }

Per disabilitare l' FileBasedStoreFileTracker implementazione, specifica il seguente override di configurazione all'avvio di un cluster:

{ "Classification": "hbase-site", "Properties": { hbase.store.file-tracker.impl: "org.apache.hadoop.hbase.regionserver.storefiletracker.DefaultStoreFileTracker" } }
Nota

Durante la riconfigurazione del cluster Amazon EMR, tutti i gruppi di istanze devono essere aggiornati.

Configurazione della politica di lettura S3A per HBase

A partire dalla versione 7.10 di Amazon EMR, HBase su Amazon S3 utilizza il client di file system S3A. Per impostazione predefinita, la proprietà fs.s3a.experimental.input.fadvise è impostata su normal. In questa modalità, S3A si adatta automaticamente tra policy di lettura sequenziale e casuale in base al modello di accesso osservato del flusso di input.

HBase su Amazon S3 si basa su letture sequenziali per compattazioni, scansioni e carichi di massa. In alcuni casi, la modalità normale potrebbe passare alla politica di lettura casuale. Ciò può accadere anche se le letture successive rimangono sequenziali. In questo caso, le prestazioni di lettura per compattazioni, scansioni e carichi di massa possono peggiorare in modo significativo.

Versioni interessate

Questo problema si applica alle versioni 7.10, 7.11, 7.12 e 7.13 di Amazon EMR con HBase.

Se riscontri uno dei seguenti sintomi, imposta la policy di lettura di S3A su: sequential

  • Compattazioni lente

  • Un numero crescente di HFile

  • Operazioni di svuotamento bloccate con conseguenti errori RegionTooBusyException

  • Operazioni di scansione e caricamento in blocco più lente rispetto alle versioni precedenti di Amazon EMR

Specifica la seguente configurazione quando crei il cluster:

[ { "Classification": "hbase-site", "Properties": { "fs.s3a.experimental.input.fadvise": "sequential" } } ]

Applica questa proprietà hbase-site.xml a tutti i nodi. La modifica ha effetto dopo il riavvio dei processi del server primario e regionale HBase.

Cluster-wide configurazione consigliata

Si consiglia di impostare l'impostazione fs.s3a.experimental.input.fadvise a sequential livello di cluster per tutti i carichi di lavoro HBase nelle versioni interessate. Se si applica l'impostazione solo a singoli comandi, il peggioramento delle prestazioni per le compattazioni e le scansioni persiste.

Configurazione della politica di lettura per le operazioni di caricamento in blocco

Se è necessario migliorare solo le prestazioni di caricamento in blocco senza modificare la configurazione a livello di cluster, è possibile passare la proprietà direttamente al comando. completebulkload

Per utilizzare la politica di lettura sequenziale per una singola operazione di caricamento in blocco:

sudo -u hbase hbase completebulkload \ -Dfs.s3a.experimental.input.fadvise=sequential \ s3://amzn-s3-demo-bucket/path/to/hfiles table_name

In alternativa, è possibile utilizzare EMRFS per l'operazione di caricamento in blocco:

sudo -u hbase hbase completebulkload \ -Dfs.s3.impl=com.amazon.ws.emr.hadoop.fs.EmrFileSystem \ s3://amzn-s3-demo-bucket/path/to/hfiles table_name

Considerazioni operative

I server regionali HBase vengono utilizzati BlockCache per archiviare le letture dei dati in memoria e BucketCache per archiviare le letture dei dati su disco locale. Inoltre, i server regionali utilizzano MemStore per archiviare le scritture di dati in memoria e utilizzano i log write-ahead per archiviare le scritture dei dati in HDFS prima che i dati vengano scritti su HBase in Amazon S3. StoreFiles Le prestazioni di lettura del cluster fanno riferimento alla frequenza con cui un record può essere recuperato dalle cache in memoria o su disco. Un errore nella cache comporta la lettura del record da Amazon S3, che presenta una latenza e una deviazione standard significativamente più elevate rispetto alla lettura da HDFS. StoreFile Inoltre, le frequenze di richiesta massime per Amazon S3 sono inferiori rispetto a quelle che possono essere ottenute dalla cache locale, pertanto il caching dei dati può essere importante per i carichi di lavoro gravosi in lettura. Per maggiori informazioni sulle prestazioni di Amazon S3, consulta la sezione Ottimizzazione delle prestazioni nella Guida per l'utente di Amazon Simple Storage Service.

Per migliorare le prestazioni, ti consigliamo di memorizzare nella cache la massima quantità di set di dati possibile nello storage dell'istanza EC2. Poiché BucketCache utilizza lo storage di istanze EC2 del server regionale, puoi scegliere un tipo di istanza EC2 con un archivio di istanze sufficiente e aggiungere lo storage Amazon EBS per soddisfare le dimensioni di cache richieste. Puoi anche aumentare le BucketCache dimensioni degli archivi di istanze collegati e dei volumi EBS utilizzando la proprietà. hbase.bucketcache.size L'impostazione predefinita è 8192 MB.

Per quanto riguarda le scritture, la frequenza degli MemStore svuotamenti e il numero di quelli StoreFiles presenti durante le compattazioni minori e maggiori possono contribuire in modo significativo a un aumento dei tempi di risposta dei server regionali. Per ottenere prestazioni ottimali, è consigliabile aumentare le dimensioni del moltiplicatore di blocco MemStore flush e HRegion, in modo da aumentare il tempo trascorso tra le compattazioni principali, ma anche aumentare il ritardo di coerenza se si utilizza una replica di lettura. In alcuni casi, è possibile migliorare le prestazioni utilizzando dimensioni dei blocchi di file più grandi (ma inferiori a 5 GB) per attivare la funzionalità di caricamento in più parti Amazon S3 in EMRFS. La dimensione predefinita del blocco di Amazon EMR è 128 MB. Per ulteriori informazioni, consulta Configurazione HDFS. Raramente vediamo clienti che superano le dimensioni dei blocchi da 1 GB mentre eseguono il benchmarking delle prestazioni con scarichi e compattazioni. Inoltre, le compattazioni HBase e i server regionali offrono prestazioni ottimali quando è necessario compattarne un numero inferiore. StoreFiles

Il rilascio delle tabelle su Amazon S3 può richiedere molto tempo perché è necessario rinominare directory di grandi dimensioni. Valuta se disabilitare le tabelle anziché rilasciarle.

Esiste un processo di pulitura HBase che rimuove vecchi file WAL e file dello store. Con Amazon EMR versione 5.17.0 e successive, il processo di eliminazione è abilitato a livello globale e le seguenti proprietà di configurazione possono essere utilizzate per controllare il comportamento di tale processo.

Proprietà di configurazione Valore predefinito Description

hbase.regionserver.hfilecleaner.large.thread.count

1

Il numero di thread allocato per pulire HFile di grandi dimensioni scaduti.

hbase.regionserver.hfilecleaner.small.thread.count

1

Il numero di thread allocato per pulire HFile di piccole dimensioni scaduti.

hbase.cleaner.scan.dir.concurrent.size

Impostato su un quarto di tutti i core disponibili.

Il numero di thread per eseguire una scansione delle directory oldWALs.

hbase.oldwals.cleaner.thread.size

2

Il numero di thread per pulire i WALs nella directory oldWALs.

Con Amazon EMR versione 5.17.0 e precedenti, l'operazione del processo di eliminazione può influenzare le prestazioni delle query durante l'esecuzione di carichi di lavoro gravosi, pertanto ti consigliamo di abilitare il processo di eliminazione solo durante gli orari non di punta. Il processo di pulitura dispone dei seguenti comandi shell HBase:

  • cleaner_chore_enabled esegue la query se il processo di pulitura è abilitato.

  • cleaner_chore_run esegue manualmente il processo di pulitura per rimuovere file.

  • cleaner_chore_switch abilita o disabilita il processo di pulitura e restituisce lo stato precedente del processo di pulitura. Ad esempio, cleaner_chore_switch true abilita il processo di pulitura.

Proprietà per l'ottimizzazione delle prestazioni HBase su Amazon S3

I seguenti parametri possono essere regolati per ottimizzare le prestazioni del carico di lavoro durante l'utilizzo di HBase su Amazon S3.

Proprietà di configurazione Valore predefinito Description

hbase.bucketcache.size

8,192

La quantità di spazio su disco, in MB, riservata agli archivi di istanze Amazon EC2 del server regionale e ai volumi EBS per lo storage. BucketCache L'impostazione si applica a tutte le istanze del server della regione. BucketCache Dimensioni maggiori corrispondono generalmente a prestazioni migliorate

hbase.hregion.memstore.flush.size

134217728

Il limite di dati, in byte, in corrispondenza del quale viene attivato uno svuotamento memstore in Amazon S3.

hbase.hregion.memstore.block.multiplier

4

Un moltiplicatore che determina il MemStore limite massimo al quale gli aggiornamenti vengono bloccati. Se i MemStore valori superati vengono hbase.hregion.memstore.flush.size moltiplicati per questo valore, gli aggiornamenti vengono bloccati. MemStore possono verificarsi arrossamenti e compattazioni per sbloccare gli aggiornamenti.

hbase.hstore.blockingStoreFiles

10

Il numero massimo di tali aggiornamenti può esistere in un negozio prima StoreFiles che gli aggiornamenti vengano bloccati.

hbase.hregion.max.filesize

10737418240

Le dimensioni massime di una regione prima che venga divisa.

Chiusura e ripristino di un cluster senza perdita di dati

Per chiudere un cluster Amazon EMR senza perdere i dati che non sono stati scritti su Amazon S3, è necessario MemStore svuotare la cache su Amazon S3 per scrivere nuovi file di archivio. In primo luogo, dovrai disabilitare tutte le tabelle. La seguente configurazione di fase può essere utilizzata quando si aggiunge una fase al cluster. Per ulteriori informazioni, consulta Utilizzo di fasi mediante la AWS CLI e la console nella Guida alla gestione di Amazon EMR.

Name="Disable all tables",Jar="command-runner.jar",Args=["/bin/bash","/usr/lib/hbase/bin/disable_all_tables.sh"]

In alternativa, puoi eseguire direttamente il seguente comando bash.

bash /usr/lib/hbase/bin/disable_all_tables.sh

Dopo aver disattivato tutte le tabelle, svuotare la tabella hbase:meta utilizzando la shell HBase e il seguente comando.

flush 'hbase:meta'

Quindi, puoi eseguire uno script di shell fornito nel cluster Amazon EMR per svuotare la cache. MemStore Puoi aggiungerlo come una fase o eseguirlo direttamente utilizzando la AWS CLI sul cluster. Lo script disabilita tutte le tabelle HBase, facendo sì che i server di ciascuna MemStore regione vengano scaricati su Amazon S3. Se lo script viene completato correttamente, i dati vengono mantenuti in Amazon S3 e il cluster può essere terminato.

Per riavviare un cluster con gli stessi dati HBase, specifica la stessa posizione Amazon S3 del cluster precedente nella o utilizzando la proprietà di configurazione. Console di gestione AWS hbase.rootdir