Utilizzo di S3 Select con Hive per migliorare le prestazioni - 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à.

Utilizzo di S3 Select con Hive per migliorare le prestazioni

Con Amazon EMR 5.18.0 e versioni successive, puoi utilizzare S3 Select con Hive su Amazon EMR. S3 Select consente alle applicazioni il recupero di un solo sottoinsieme di dati da un oggetto. Per Amazon EMR, l'attività di calcolo del filtro di set di dati di grandi dimensioni per l'elaborazione viene "trasferita" dal cluster ad Amazon S3; in tal modo è possibile migliorare le prestazioni in alcune applicazioni e ridurre la quantità di dati trasferiti tra Amazon EMR e Amazon S3.

S3 Select è supportato con tabelle Hive basate su file CSV e JSON e impostando la variabile di configurazione s3select.filter su true durante la sessione Hive. Per maggiori informazioni ed esempi, consulta Specifica di S3 Select nel codice.

S3 Select è adatto alla mia applicazione?

È consigliabile eseguire analisi comparative delle applicazioni con e senza S3 Select per vedere se l'utilizzo di tale caratteristica 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 Amazon S3 Select. Per ulteriori informazioni, 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

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

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

  • Sono supportati solo i file CSV e JSON in formato UTF-8. I file CSV e JSON a più righe non sono supportati.

  • Sono supportati solo i file non compressi, gzip o bzip2.

  • I caratteri di commento nell'ultima riga non sono supportati.

  • Le righe vuote alla fine di un file non vengono elaborate.

  • Hive su Amazon EMR supporta i tipi di dati primitivi supportati da S3 Select. Per ulteriori informazioni, consulta Tipi di dati nella Guida per l'utente di Amazon Simple Storage Service.

Specifica di S3 Select nel codice

Per utilizzare S3 Select nella tabella Hive, crea la tabella specificando com.amazonaws.emr.s3select.hive.S3SelectableTextInputFormat come nome della classe INPUTFORMAT e specifica un valore per la proprietà s3select.format utilizzando la clausola TBLPROPERTIES.

Per impostazione predefinita, S3 Select è disabilitato quando si eseguono query. Abilita S3 Select impostando s3select.filter su true nella sessione Hive, come indicato di seguito. Gli esempi riportati di seguito mostrano come specificare S3 Select quando si crea una tabella da file CSV e JSON sottostanti e quindi si esegue la query della tabella utilizzando una semplice istruzione select.

Esempio Istruzione CREATE TABLE (CREA TABELLA) per una tabella basata su CSV
CREATE TABLE mys3selecttable ( col1 string, col2 int, col3 boolean ) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' STORED AS INPUTFORMAT 'com.amazonaws.emr.s3select.hive.S3SelectableTextInputFormat' OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat' LOCATION 's3://path/to/mycsvfile/' TBLPROPERTIES ( "s3select.format" = "csv", "s3select.headerInfo" = "ignore" );
Esempio Istruzione CREATE TABLE (CREA TABELLA) per una tabella basata su JSON
CREATE TABLE mys3selecttable ( col1 string, col2 int, col3 boolean ) ROW FORMAT SERDE 'org.apache.hive.hcatalog.data.JsonSerDe' STORED AS INPUTFORMAT 'com.amazonaws.emr.s3select.hive.S3SelectableTextInputFormat' OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat' LOCATION 's3://path/to/json/' TBLPROPERTIES ( "s3select.format" = "json" );
Esempio Istruzione SELECT TABLE (SELEZIONA TABELLA)
SET s3select.filter=true; SELECT * FROM mys3selecttable WHERE col2 > 10;