Uso di pushdown S3 Select con Presto per migliorare le prestazioni - Amazon EMR

Uso di pushdown S3 Select con Presto per migliorare le prestazioni

Con Amazon EMR 5.18.0 e versioni successive, puoi utilizzare Pushdown S3 Select con Presto on Amazon EMR. Questa funzione consente a Presto di "eseguire il pushdown" dell'attività di calcolo delle operazioni di proiezione (ad esempio, SELECT) e le operazioni di predicato (ad esempio, WHERE) ad Amazon S3. Ciò consente alle query di recuperare solo i dati richiesti da Amazon S3, cosa che può migliorare le prestazioni e ridurre la quantità di dati trasferiti tra Amazon EMR e Amazon S3 in alcune applicazioni.

Pushdown S3 Select è adatto alla mia applicazione?

È consigliabile eseguire analisi comparative delle applicazioni con e senza pushdown S3 Select per vedere se l'utilizzo di tale funzionalità può risultare idoneo per l'applicazione.

Per determinare se l'applicazione è idonea per l'uso di S3 Select, utilizza le seguenti linee guida:

  • La query filtra più di metà del set di dati originale.

  • I predicati del filtro della query utilizzano colonne che dispongono di un tipo di dati supportato da Presto e S3 Select. I tipi di dati timestamp, reali e doppi non sono supportati da pushdown S3 Select. Ti consigliamo di usare il tipo di dati decimale per i dati numerici. Per ulteriori informazioni sui tipi di dati supportati per S3 Select, consulta Tipi di dati nella Guida per l'utente di Amazon Simple Storage Service.

  • La connessione di rete tra Amazon S3 e il cluster Amazon EMR ha una buona velocità di trasferimento e larghezza di banda disponibile. Amazon S3 non comprime le risposte HTTP, pertanto è probabile che le dimensioni della risposta aumentino per file di input compressi.

Considerazioni e limitazioni

  • Sono supportati solo gli oggetti archiviati in formato CSV. Gli oggetti possono essere decompressi o facoltativamente compressi con gzip o bzip2.

  • La proprietà AllowQuotedRecordDelimiters non è supportata. Se questa proprietà è specificata, la query ha esito negativo.

  • La crittografia lato server con chiavi di crittografia fornite dal cliente (SSE-C) e la crittografia lato client di Amazon S3 non sono supportate.

  • Pushdown S3 Select non è un'alternativa per l'uso di formati di file compressi o basati su colonne, ad esempio ORC o Parquet.

Abilitare Pushdown S3 Select con PrestoDB o Trino

Per abilitare pushdown S3 Select con PrestoDB su Amazon EMR, utilizza la classificazione di configurazione presto-connector-hive per impostare hive.s3select-pushdown.enabled su true come illustrato nell'esempio seguente. Per ulteriori informazioni, consulta Configurazione delle applicazioni. Imposta anche il valore hive.s3select-pushdown.max-connections. Per la maggior parte delle applicazioni, l'impostazione di 500 dovrebbe essere adeguata. Per ulteriori informazioni, consulta Comprensione e ottimizzazione di hive.s3select-pushdown.max-connections di seguito.

Per PrestoSQL su EMR versioni 6.1.0 - 6.3.0, sostituisci presto-connector-hive nell'esempio sottostante con prestosql-connector-hive.

Amazon EMR versione 6.4.0 e successive utilizza il nuovo nome Trino anziché PrestoSQL. Se usi Trino, sostituisci presto-connector-hive nell'esempio sottostante con trino-connector-hive

[ { "classification": "presto-connector-hive", "properties": { "hive.s3select-pushdown.enabled": "true", "hive.s3select-pushdown.max-connections": "500" } } ]

Comprensione e ottimizzazione di hive.s3select-pushdown.max-connections

Per impostazione predefinita, Presto usa EMRFS come file system. L'impostazione fs.s3.maxConnections nella classificazione di configurazione emrfs-site specifica il numero massimo consentito di connessioni client ad Amazon S3 tramite EMRFS per Presto. Per impostazione predefinita, questo è 500. Pushdown S3 Select ignora EMRFS durante l'accesso ad Amazon S3 per le operazioni di predicato. In questo caso, il valore di hive.s3select-pushdown.max-connections determina il numero massimo di connessioni client consentite per tali operazioni dai nodi di lavoro. Tuttavia, tutte le richieste ad Amazon S3 avviate da Presto che non vengono spinte verso il basso, ad esempio le operazioni GET, continuano ad essere regolate dal valore di fs.s3.maxConnections.

Se l'applicazione riceve l'errore di timeout in attesa di connessione dal pool, aumentare il valore di hive.s3select-pushdown.max-connections e di fs.s3.maxConnections.