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

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.

  • In Amazon EMR versione 6.2.0 e successive, 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. Questa caratteristica è abilitata per impostazione predefinita e non richiede la migrazione manuale.

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 di Amazon EMR, la AWS CLI o l'API di Amazon EMR. 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 le fasi della console e un esempio di creazione cluster dettagliato utilizzando AWS CLI, consulta Creazione di un cluster con HBase. Un esempio di oggetto di configurazione è mostrato nel seguente snippet JSON.

{ "Classification": "hbase-site", "Properties": { "hbase.rootdir": "s3://my-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://my-bucket/" anziché "hbase.rootdir: s3://my-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".

Ad esempio, data la classificazione JSON per il cluster principale come mostrato in precedenza nell'argomento, la configurazione di una replica di lettura al cluster è la seguente:

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

Sincronizzazione della replica di lettura quando si aggiungono dati

Poiché la replica di lettura utilizza file e metadati dello store HBase che il cluster principale scrive in Amazon S3, la replica di lettura è attuale tanto quanto il datastore 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 funzione è abilitata per impostazione predefinita su Amazon EMR 6.2.0 e versioni successive e non richiede alcuna procedura di migrazione manuale.

Nota

Il tracciamento HFile persistente utilizzando la tabella di sistema Storefile di HBase non supporta la funzionalità di replica della regione HBase. Per ulteriori informazioni sulla replica della regione HBase, consultaLetture ad alta disponibilità coerenti con la tempistica.

Disabilitare il tracciamento HFile persistente

Il tracciamento HFile persistente è abilitato per impostazione predefinita a partire da EMR rilascio 6.2.0. 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 aggiornata man mano che vengono creati nuovi HFile. Tuttavia, se la tabella Storefile non è sincronizzata con i file di dati per qualsiasi motivo, è possibile utilizzare i seguenti comandi 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'

Considerazioni operative

I server della regione HBase utilizzano BlockCache per archiviare letture di dati in memoria e BucketCache per archiviare letture di dati su disco locale. Inoltre, i server della regione utilizzano MemStore per archiviare scritture di dati in memoria e log write-ahead per archiviare scritture di dati in HDFS prima che i dati vengano scritti in file dello store HBase in Amazon S3. 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 mancato riscontro nella cache comporta che il record venga letto da StoreFile in Amazon S3, con una latenza notevolmente più elevata e una deviazione standard più alta rispetto alla lettura da HDFS. 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 l'archiviazione dell'istanza EC2 del server della regione, puoi scegliere un tipo di istanza EC2 con un archivio istanza sufficiente e aggiungere archiviazione ad Amazon EBS per tenere contro delle dimensioni della cache richieste. Puoi anche incrementare le dimensioni BucketCache sulle instance store e i volumi EBS collegati utilizzando la proprietà hbase.bucketcache.size. L'impostazione predefinita è 8192 MB.

Per le operazioni di scrittura, la frequenza degli svuotamenti MemStore e il numero di StoreFile presenti durante compattamenti minori e maggiori possono contribuire in modo significativo a un incremento dei tempi di risposta del server della regione. Per prestazioni ottimali, valutare se incrementare le dimensioni dello svuotamento MemStore e del moltiplicatore blocco HRegion, con conseguente aumento del tempo trascorso tra compattamenti maggiori, ma anche del ritardo in consistenza 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, compattazioni HBase e server della regione garantiscono prestazioni ottimali quando il numero di StoreFile da compattare è inferiore.

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 Descrizione

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 Descrizione

hbase.bucketcache.size

8,192

La quantità di spazio su disco, in MB, riservata su archivi istanza Amazon EC2 del server della regione e volumi EBS per l'archiviazione BucketCache. L'impostazione si applica a tutte le istanze del server della regione. Dimensioni BucketCache più grandi corrispondono generalmente a prestazioni migliori

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 limite superiore MemStore in corrispondenza del quale gli aggiornamenti vengono bloccati. Se il MemStore supera hbase.hregion.memstore.flush.size moltiplicato per questo valore, gli aggiornamenti vengono bloccati. Svuotamenti e compattazioni MemStore possono verificarsi per sbloccare gli aggiornamenti.

hbase.hstore.blockingStoreFiles

10

Il numero massimo di StoreFile contenuti in uno store prima che gli aggiornamenti vengono 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 arrestare un cluster Amazon EMR senza perdere i dati che non sono stati scritti in Amazon S3 occorre svuotare la cache MemStore in Amazon S3 per scrivere nuovi file dello store. 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 per la 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'

In seguito, puoi eseguire uno script della shell fornito sul cluster Amazon EMR per svuotare la cache di MemStore. Puoi aggiungerlo come una fase o eseguirlo direttamente utilizzando la AWS CLI sul cluster. Poiché lo script disabilita tutte le tabelle HBase, il MemStore in ciascun server regione viene svuotato in 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 lo stesso percorso Amazon S3 del cluster precedente nella AWS Management Console o utilizzando la proprietà di configurazione hbase.rootdir.