Ottimizzazione delle prestazioni per le operazioni Amazon EMR in DynamoDB - 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à.

Ottimizzazione delle prestazioni per le operazioni Amazon EMR in DynamoDB

Le operazioni Amazon EMR su una tabella DynamoDB vengono conteggiate come operazioni di lettura e sono soggette alle impostazioni di velocità effettiva assegnata della tabella. Amazon EMR implementa una propria logica per provare a bilanciare il carico sulla tabella DynamoDB e ridurre al minimo la possibilità di superare la velocità effettiva assegnata. Al termine di ogni query Hive, Amazon EMR restituisce informazioni sul cluster utilizzato per elaborare la query, incluso il numero di volte in cui la velocità effettiva assegnata è stata superata. È possibile utilizzare queste informazioni, oltre alle CloudWatch metriche sul throughput di DynamoDB, per gestire meglio il carico sulla tabella DynamoDB nelle richieste successive.

Nelle operazioni con le tabelle DynamoDB, le prestazioni delle query di Hive sono influenzate dai fattori indicati di seguito.

Unità di capacità di lettura assegnate

Quando esegui query Hive su una tabella DynamoDB, devi accertarti di aver assegnato una quantità sufficiente di unità di capacità di lettura.

Ad esempio, supponiamo che tu disponga di 100 unità di capacità di lettura assegnate per la tabella DynamoDB. Questo ti consentirà di eseguire 100 operazioni di lettura, o 409.600 byte, al secondo. Se la tabella contiene 20 GB di dati (21.474.836.480 byte) e la tua query Hive esegue una scansione completa della tabella, puoi stimare la durata dell'esecuzione della query:

21.474.836.480 / 409.600 = 52.429 secondi = 14,56 ore

Il solo modo per ridurre il tempo necessario sarebbe modificare le unità di capacità di lettura nella tabella DynamoDB di origine. L'aggiunta di più nodi al cluster Amazon EMR non è utile.

Nell'output Hive, la percentuale di completamento viene aggiornata quando terminano uno o più processi del mappatore. Per una tabella DynamoDB di grandi dimensioni con una bassa capacità di lettura assegnata, l'output della percentuale di completamento potrebbe non essere aggiornato per molto tempo; in questo caso, il processo sembrerà essere completo allo 0% per diverse ore. Per uno stato più dettagliato dell'avanzamento del processo, accedi alla console di Amazon EMR, dalla quale potrai visualizzare lo stato delle singole attività del mappatore e statistiche per le letture di dati.

Puoi anche accedere all'interfaccia Hadoop sul nodo master e vedere le statistiche di Hadoop. Ti sarà mostrato lo stato della singola attività del mappatore e alcune statistiche di lettura dei dati. Per ulteriori informazioni, consulta la sezione relativa alle Interfacce Web ospitate sul nodo master nella Guida alla gestione di Amazon EMR.

Impostazione della percentuale di lettura

Per impostazione predefinita, Amazon EMR gestisce il carico di richieste sulla tabella DynamoDB, in base alla velocità effettiva corrente assegnata. Tuttavia, se Amazon EMR restituisce informazioni sul processo in cui è incluso un elevato numero di risposte di superamento della velocità effettiva assegnata, puoi modificare la velocità di lettura di default utilizzando il parametro dynamodb.throughput.read.percent durante la configurazione della tabella Hive. Per ulteriori informazioni su come impostare il parametro della percentuale di lettura, consulta Opzioni Hive.

Impostazione della percentuale di scrittura

Per impostazione predefinita, Amazon EMR gestisce il carico di richieste sulla tabella DynamoDB, in base alla velocità effettiva corrente assegnata. Tuttavia, se Amazon EMR restituisce informazioni sul processo in cui è incluso un elevato numero di risposte di superamento della velocità effettiva assegnata, puoi modificare la velocità di scrittura di default utilizzando il parametro dynamodb.throughput.write.percent durante la configurazione della tabella Hive. Per ulteriori informazioni su come impostare il parametro della percentuale di scrittura, consulta Opzioni Hive.

Impostazione della durata dei nuovi tentativi

Per impostazione predefinita, Amazon EMR esegue nuovamente una query Hive se questa non ha restituito un risultato entro due minuti, l'intervallo predefinito per i nuovi tentativi. Puoi modificare questo intervallo impostando il parametro dynamodb.retry.duration quando esegui una query Hive. Per ulteriori informazioni su come impostare il parametro della percentuale di scrittura, consulta Opzioni Hive.

Numero di attività di mappatura

I daemon di mappatura che Hadoop avvia per elaborare le richieste di esportazione ed esecuzione di query sui dati archiviati in DynamoDB hanno una velocità di lettura massima di 1 MiB al secondo per limitare la capacità di lettura utilizzata. Se disponi di ulteriore velocità effettiva assegnata disponibile su DynamoDB, puoi migliorare le prestazioni delle operazioni di query ed esportazione di Hive aumentando il numero di daemon del mappatore. A questo scopo, puoi aumentare il numero di istanze EC2 nel cluster o il numero di daemon del mappatore in esecuzione su ciascuna istanza EC2.

Puoi aumentare il numero di istanze EC2 in un cluster arrestando il cluster corrente e riavviandolo con un numero maggiore di istanze EC2. Puoi specificare il numero di istanze EC2 nella finestra di dialogo Configure EC2 Instances (Configura istanze EC2) se avvii il cluster dalla console di Amazon EMR o con l'opzione ‑‑num-instances se lo avvii dalla CLI.

Il numero di attività di mappatura eseguite su un'istanza dipende dal tipo di istanza EC2. Per ulteriori informazioni sui tipi di istanze EC2 supportate e sul numero di mappatori fornito da ognuno, consulta Configurazione attività, dove troverai una sezione relativa alla configurazione delle attività per ognuna delle configurazioni supportate.

In alternativa, puoi aumentare il numero dei daemon di mappatura modificando il parametro di configurazione mapreduce.tasktracker.map.tasks.maximum di Hadoop con un valore superiore. Questo metodo presenta il vantaggio di offrirti un numero maggiore di mappatori senza aumentare né il numero, né le dimensioni delle istanze EC2, con conseguente risparmio di denaro. Lo svantaggio è che un'impostazione troppo elevata in questo valore può provocare l'esaurimento della memoria nelle istanze EC2 del tuo cluster. Per impostare mapreduce.tasktracker.map.tasks.maximum, avvia il cluster e specifica un valore per mapreduce.tasktracker.map.tasks.maximum come proprietà della classificazione di configurazione mapred-site. Questo viene mostrato nell'esempio seguente. Per ulteriori informazioni, consulta Configurazione delle applicazioni.

{ "configurations": [ { "classification": "mapred-site", "properties": { "mapred.tasktracker.map.tasks.maximum": "10" } } ] }

Richieste di dati in parallelo

Molteplici richieste di dati, sia da parte di più utenti sia da più applicazioni verso un'unica tabella, possono far esaurire il throughput di lettura assegnato e rallentare le prestazioni.

Durata dei processi

La consistenza dei dati in DynamoDB dipende dall'ordine delle operazioni di lettura e scrittura di ciascun nodo. Quando una query Hive è in avanzamento, un'altra applicazione potrebbe caricare nuovi dati nella tabella DynamoDB oppure modificare o eliminare dati esistenti. In questo caso, i risultati della query Hive potrebbe non riflettere le modifiche effettuate ai dati durante l'esecuzione della query.

Evitare di superare la velocità effettiva

Quando esegui query Hive su DynamoDB, fai attenzione a non superare la velocità effettiva assegnata, perché in questo modo si esaurisce la capacità necessaria per le chiamate dell'applicazione a DynamoDB::Get. Per evitare che ciò accada, dovresti monitorare regolarmente il volume di lettura e la limitazione delle chiamate alle applicazioni controllando i log e DynamoDB::Get monitorando le metriche su Amazon. CloudWatch

Ora delle richieste

Le prestazioni possono essere migliorate pianificando query Hive che accedono a una tabella DynamoDB quando la richiesta nella tabella DynamoDB è minore. Ad esempio, se la maggior parte degli utenti dell'applicazione vive a San Francisco, è possibile scegliere di esportare i dati ogni giorno alle ore 4:00 (PST), quando la maggior parte degli utenti è inattiva e non aggiorna i registri del database DynamoDB.

Tabelle basate sul tempo

Se i dati vengono organizzati in una serie di tabelle DynamoDB basate sul tempo, ad esempio una tabella al giorno, puoi esportare i dati quando la tabella non è più attiva. Puoi utilizzare questa tecnica per eseguire il backup dei dati su Amazon S3 in modo regolare.

Dati archiviati

Se prevedi di eseguire molte query Hive sui dati archiviati in DynamoDB e la tua applicazione è in grado di tollerare i dati archiviati, potrebbe essere una buona idea esportare i dati su HDFS o Amazon S3 ed eseguire le query Hive su una copia dei dati, anziché su DynamoDB. In questo modo, le operazioni di lettura e il throughput assegnato vengono conservati.