Quando si esegue su EC2, spesso non si riesce a vincere quando si tratta di tipi di istanza. Uno dei tipi più convenienti disponibili è c1.xlarge. Ha abbastanza CPU per gestire le compattazioni, una discreta quantità di disco e un elevato I/O di rete. Tuttavia, abbiamo scoperto che la memoria relativamente bassa di 7 GB su c1.xlarge porta spesso a problemi di stabilità nei cluster HBase altamente simultanei. Sebbene ci siano altre opzioni più costose, questo tutorial HBase ti aiuterà a ottenere il massimo dai tuoi RegionServer c1.xlarge.
1. Riduci il numero di regioni per RegionServer
Idealmente dovresti avere meno di 100 regioni per RegionServer . Il memstore è diviso per l'uso da tutte le regioni attive e ciascuna regione aggiunge (per impostazione predefinita) 2 MB di memoria per MSLAB. Ridurre questo numero aiuterà le cose a funzionare senza intoppi, e non solo dal punto di vista della memoria.
2. Ruba memoria da altri servizi
Sicuramente non dovresti eseguire un TaskTracker con il tuo RegionServer su questi tipi di istanza, ma molto probabilmente stai eseguendo un DataNode locale. Una configurazione tipica richiede 1 GB di memoria per un DataNode, ma abbiamo scoperto che in molti casi non è necessario molto. Verifica le tue metriche prima di implementarlo, ma eravamo assolutamente al sicuro riducendo l'heap di DataNode a 400 MB . Questo bel pezzo da 624 MB aiuterà HBase ad andare un po' più in là.
3. Regola o disattiva MSLAB
Se dopo aver rubato memoria e ridotto le regioni hai ancora problemi, puoi fare un ulteriore passo avanti. Come ho già detto, la funzione MSLAB aggiunge 2 MB di sovraccarico dell'heap per impostazione predefinita per ciascuna regione. Puoi ridurre questo buffer con hbase.hregion.memstore.mslab.chunksize
. Più basso si va, meno efficace è, ma anche meno sovraccarico di memoria. Disabilitalo del tutto con hbase.hregion.memstore.mslab.enabled
.
4. Sii aggressivo riguardo alla memorizzazione nella cache e al batch
Memorizzazione nella cache (Scan#setCaching(int)
) e batch (Scan#setBatch(int)
) sono ottimi per limitare l'effetto della latenza di rete su scansioni di grandi dimensioni. Sfortunatamente richiedono anche più memoria sia sul lato client che sul lato server. Tieni presente il compromesso di velocità, ma goditi un po' più di stabilità regolandoli al minimo , il più vicino possibile al valore 1.
Il RegionServer deve inoltre disporre di memoria sufficiente per gestire tutte le scritture simultanee. Se si esegue un batch pesante delle scritture o si inviano valori di celle molto grandi, è probabile che si verifichino OutOfMemoryExceptions. Riduci anche il batching qui o trova un modo per ridurre le dimensioni dei valori delle celle.
5. Controllare il carico da Hadoop
Se stai eseguendo lavori hadoop sui tuoi dati HBase, stai fondamentalmente eseguendo molte scansioni di grandi dimensioni. In un lavoro HBase MapReduce, ogni regione diventa un mappatore. Se si dispone di più di 1 regione per RegionServer, è probabile che a un certo punto alcuni mappatori eseguano la scansione simultanea dello stesso RegionServer. Ognuna di queste scansioni richiede memoria, disco e risorse della CPU e quando si accumulano più copie può causare un po' di dolore.
Abbassamento di hbase.regionserver.handler.count
aiuterà a limitare il numero di connessioni attive che occupano memoria, ma potresti comunque avere un problema se tutti i gestori gestiscono scansioni di aree complete di grandi dimensioni. Utilizzando la nostra estensione TableInputFormat, puoi controllare facilmente quanti mappatori simultanei vengono eseguiti su un singolo RegionServer , fornendo un utilizzo della memoria più prevedibile.
Se stai scrivendo su HBase da un riduttore, vorrai controllare anche il partizionamento lì. Questo è facilmente implementabile utilizzando il Partitioner
di Hadoop interfaccia, con HBaseAdmin
di HBase interfaccia che fornisce la regione alle mappature di RegionServer.
Eseguire HBase con poca memoria è difficile, ma non impossibile
Con questi suggerimenti in mano, dovresti essere sulla buona strada per sopravvivere alle operazioni nel tuo ambiente con poca memoria. Può essere frustrante lottare per ogni megabyte di memoria in un'era di RAM estremamente economica e veloce. Ma segui questi suggerimenti e il tuo CFO ti ringrazierà per aver sfruttato al meglio questo tipo di istanza conveniente. Per coloro che hanno un po' più di libertà finanziaria, esploreremo l'impatto dei nuovi tipi di istanze I2 di Amazon in un post futuro . Quindi resta sintonizzato!
Questo articolo è apparso originariamente su dev.hubspot.com