

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à.

# Miglioramento delle prestazioni Hive
<a name="emr-hive-s3-performance"></a>

Amazon EMR offre funzioni che aiutano a ottimizzare le prestazioni quando si usa Hive per eseguire query e leggere e scrivere i dati salvati in Amazon S3.

S3 Select può migliorare le prestazioni delle query per i file CSV e JSON in alcune applicazioni mediante il pushdown dell'elaborazione ad Amazon S3.

Il committer ottimizzato EMRFS S3 è un'alternativa alla [OutputCommitter](https://hadoop.apache.org/docs/current/api/org/apache/hadoop/mapreduce/OutputCommitter.html)classe, che elimina le operazioni di elenco e ridenominazione per migliorare le prestazioni durante la scrittura di file Amazon S3 utilizzando EMRFS.

**Topics**
+ [Abilitazione del committer ottimizzato EMRFS S3 di Hive](hive-optimized-committer.md)
+ [Utilizzo di S3 Select con Hive per migliorare le prestazioni](emr-hive-s3select.md)
+ [Ottimizzazione MSCK](emr-msck-optimization.md)

# Abilitazione del committer ottimizzato EMRFS S3 di Hive
<a name="hive-optimized-committer"></a>

Il committer ottimizzato EMRFS S3 di Hive è un modo alternativo con cui EMR Hive scrive i file per le query di inserimento quando si utilizza EMRFS. Il committer elimina le operazioni di elenco e rinominazione eseguite su Amazon S3 e migliora le prestazioni dell'applicazione. La funzione è disponibile a partire da EMR 5.34 e EMR 6.5.

## Abilitazione del committer
<a name="enabling-hive-committer"></a>

Se desideri abilitare EMR Hive in modo da utilizzare `HiveEMRFSOptimizedCommitter` per eseguire il commit dei dati come impostazione predefinita per tutte le tabelle gestite da Hive e le tabelle esterne, utilizza la configurazione `hive-site` seguente nei cluster EMR 6.5.0 o EMR 5.34.0.

```
[
   {
      "classification": "hive-site",
      "properties": {
         "hive.blobstore.use.output-committer": "true"
      }
   }
]
```

**Nota**  
Non attivare questa funzione quando `hive.exec.parallel` è impostato su `true`.

## Limitazioni
<a name="hive-committer-limitations"></a>

Ai tag si applicano le seguenti limitazioni di base:
+ L'abilitazione di Hive per unire automaticamente file di piccole dimensioni non è supportata. La logica di commit Hive predefinita verrà utilizzata anche quando il committer ottimizzato è abilitato.
+ Le tabelle Hive ACID non sono supportate. La logica di commit Hive predefinita verrà utilizzata anche quando il committer ottimizzato è abilitato.
+ Il sistema di denominazione dei file per i file scritti viene modificata da quella di Hive `<task_id>_<attempt_id>_<copy_n>` a `<task_id>_<attempt_id>_<copy_n>_<query_id>`. Ad esempio, un file denominato 

  `s3://warehouse/table/partition=1/000000_0` verrà modificato in `s3://warehouse/table/partition=1/000000_0-hadoop_20210714130459_ba7c23ec-5695-4947-9d98-8a40ef759222-1`. L'`query_id` di seguito è una combinazione di nome utente, marca temporale e UUID.
+ Quando le partizioni personalizzate sono su file system diversi (HDFS, S3), questa funzione viene disabilitata automaticamente. La logica di commit Hive predefinita verrà utilizzata quando abilitata.

# Utilizzo di S3 Select con Hive per migliorare le prestazioni
<a name="emr-hive-s3select"></a>

**Importante**  
Amazon S3 Select non è più disponibile per i nuovi clienti. I clienti esistenti di Amazon S3 Select possono continuare a utilizzare la funzionalità come di consueto. [Ulteriori informazioni](https://aws.amazon.com/blogs/storage/how-to-optimize-querying-your-data-in-amazon-s3/) 

Con Amazon EMR 5.18.0 e versioni successive, puoi utilizzare [S3 Select](https://aws.amazon.com/blogs/aws/s3-glacier-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](#emr-hive-s3select-specify).

## S3 Select è adatto alla mia applicazione?
<a name="emr-hive-s3select-apps"></a>

È 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](https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-glacier-select-sql-reference-data-types.html) 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
<a name="emr-hive-s3select-considerations"></a>
+ 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. CSVsMultilinea e JSON 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](https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-glacier-select-sql-reference-data-types.html) nella *Guida per l'utente di Amazon Simple Storage Service*.

## Specifica di S3 Select nel codice
<a name="emr-hive-s3select-specify"></a>

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.

**Example 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"
);
```

**Example 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"
);
```

**Example Istruzione SELECT TABLE (SELEZIONA TABELLA)**  

```
SET s3select.filter=true;
SELECT * FROM mys3selecttable WHERE col2 > 10;
```

# Ottimizzazione MSCK
<a name="emr-msck-optimization"></a>

Hive archivia un elenco di partizioni per ogni tabella nel suo metastore. Tuttavia, quando le partizioni vengono aggiunte o rimosse direttamente dal file system, il metastore Hive non riconosce queste modifiche. Il [comando MSCK](https://cwiki.apache.org/confluence/display/hive/languagemanual+ddl#LanguageManualDDL-RecoverPartitions(MSCKREPAIRTABLE)) aggiorna i metadati delle partizioni nel metastore Hive per le partizioni che sono state aggiunte o rimosse direttamente dal file system. La sintassi per il comando è:

```
MSCK [REPAIR] TABLE table_name [ADD/DROP/SYNC PARTITIONS];
```

Hive implementa questo comando come segue:

1. Hive recupera tutte le partizioni per la tabella dal metastore. Dall'elenco dei percorsi delle partizioni che non esistono nel file system crea quindi un elenco di partizioni da eliminare dal metastore.

1. Hive raccoglie i percorsi delle partizioni presenti nel file system, li confronta con l'elenco delle partizioni del metastore e genera un elenco di partizioni che devono essere aggiunte al metastore.

1. Hive aggiorna il metastore utilizzando la modalità `ADD`, `DROP` o `SYNC`.

**Nota**  
Quando ci sono numerose partizioni nel metastore, l'esecuzione del passaggio per verificare se una partizione non esiste nel file system richiede molto tempo perché la chiamata API `exists` del file system deve essere effettuata per ogni partizione.

In Amazon EMR 6.5.0, Hive ha introdotto un flag chiamato `hive.emr.optimize.msck.fs.check`. Se abilitato, questo flag fa sì che Hive controlli la presenza di una partizione dall'elenco dei percorsi delle partizioni del file system generato nel passaggio 2 precedente invece di effettuare chiamate API del file system. In Amazon EMR 6.8.0, Hive ha abilitato questa ottimizzazione per impostazione predefinita, eliminando la necessità di impostare il flag `hive.emr.optimize.msck.fs.check`.