

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

# Configurazione di un metastore esterno per Hive
<a name="emr-metastore-external-hive"></a>

Per impostazione predefinita, Hive registra le informazioni del metastore in un database MySQL sul file system del nodo primario. Il metastore contiene una descrizione della tabella e dei dati sottostanti su cui è costruita, compresi i nomi delle partizioni, i tipi di dati e così via. Quando un cluster termina, tutti i nodi del cluster vengono chiusi, incluso il nodo primario. Quando ciò accade, i dati locali vengono persi perché i file system dei nodi utilizzano una memorizzazione effimera. Se occorre che il metastore persista, è necessario creare un *metastore esterno* esistente all'esterno del cluster.

Sono disponibili due opzioni per il metastore esterno:
+ AWS Glue Data Catalog (solo Amazon EMR versione 5.8.0 o successiva).

  Per ulteriori informazioni, consulta [Utilizzo del AWS Glue Data Catalog come metastore per Hive](emr-hive-metastore-glue.md).
+ Amazon RDS o Amazon Aurora.

  Per ulteriori informazioni, consulta [Utilizzo di un database MySQL o Amazon Aurora esterno](emr-hive-metastore-external.md).

**Nota**  
Se usi Hive 3 e riscontri troppe connessioni al metastore di Hive, configura il parametro `datanucleus.connectionPool.maxPoolSize` per avere un valore inferiore o aumentare il numero di connessioni che il server di database è in grado di gestire. L'aumento del numero di connessioni è dovuto al modo in cui Hive calcola il numero massimo di connessioni JDBC. Per calcolare il valore ottimale per le prestazioni, consulta [Proprietà di configurazione di Hive](https://cwiki.apache.org/confluence/display/Hive/Configuration+Properties#ConfigurationProperties-datanucleus.connectionPool.maxPoolSize.1).

# Utilizzo del AWS Glue Data Catalog come metastore per Hive
<a name="emr-hive-metastore-glue"></a>

Utilizzando Amazon EMR versione 5.8.0 o successiva, puoi configurare Hive per utilizzare AWS Glue Data Catalog come metastore. Si consiglia questa configurazione quando si richiede un metastore persistente o un metastore condiviso da diversi cluster, servizi e applicazioni o account AWS .

AWS Glue è un servizio di estrazione, trasformazione e caricamento (ETL) completamente gestito che rende semplice ed economico classificare i dati, pulirli, arricchirli e spostarli in modo affidabile tra vari archivi di dati. Il AWS Glue Data Catalog fornisce un repository di metadati unificato su una varietà di fonti di dati e formati di dati, che si integra con Amazon EMR, Amazon RDS, Amazon Redshift, Redshift Spectrum, Athena e qualsiasi applicazione compatibile con il metastore Apache Hive. AWS I Glue crawler possono dedurre automaticamente lo schema dai dati di origine in Amazon S3 e archiviare i metadati associati nel Data Catalog. Per ulteriori informazioni sul Data Catalog, consulta [Populating the AWS Glue Data Catalog](https://docs.aws.amazon.com/glue/latest/dg/populate-data-catalog.html) nella *AWS Glue Developer Guide*.

Per AWS Glue si applicano costi separati. È prevista una tariffa mensile per l'archiviazione e l'accesso ai metadati nel Data Catalog, una tariffa oraria fatturata al minuto per i job di AWS Glue ETL e il runtime del crawler e una tariffa oraria fatturata al minuto per ogni endpoint di sviluppo assegnato. Il Data Catalog consente di archiviare fino a un milione di oggetti senza costi aggiuntivi. Se intendi archiviare più di un milione di oggetti, ti verrà addebitato 1 USD per ogni 100.000 oggetti oltre il milione. Un oggetto nel Data Catalog può essere una tabella, una partizione o un database. Per ulteriori informazioni, consulta [Prezzi di Glue](https://aws.amazon.com/glue/pricing).

**Importante**  
Se hai creato tabelle utilizzando Amazon Athena o Amazon Redshift Spectrum prima del 14 agosto 2017, i database e le tabelle vengono archiviati in un catalogo gestito da Athena, separato dal Glue Data Catalog. AWS Per integrare Amazon EMR con queste tabelle, devi eseguire l'upgrade al AWS Glue Data Catalog. Per ulteriori informazioni, consulta [l'aggiornamento al AWS Glue Data Catalog](https://docs.aws.amazon.com/athena/latest/ug/glue-upgrade.html) nella Guida per l'utente di *Amazon Athena*.

## Specificare AWS Glue Data Catalog come metastore
<a name="emr-hive-glue-configure"></a>

Puoi specificare il AWS Glue Data Catalog come metastore utilizzando Console di gestione AWS AWS CLI, o l'API Amazon EMR. Quando si utilizza la CLI o l'API, è possibile utilizzare la classificazione di configurazione per Hive per specificare un Data Catalog. Inoltre, con Amazon EMR 5.16.0 e versioni successive, puoi utilizzare la classificazione di configurazione per specificare un catalogo dati in un altro. Account AWS Quando utilizzi la console, puoi specificare il Data Catalog utilizzando **Advanced Options (Opzioni avanzate)** o **Quick Options (Opzioni rapide)**.

------
#### [ Console ]

**Per specificare AWS Glue Data Catalog come metastore Hive con la console**

1. [Accedi a e apri Console di gestione AWS la console Amazon EMR su https://console.aws.amazon.com /emr.](https://console.aws.amazon.com/emr)

1. In **EMR su EC2**, nel riquadro di navigazione a sinistra, scegli **Cluster** e quindi seleziona **Crea cluster**.

1. **In **Application bundle**, scegli **Core Hadoop** o Custom. **HBase**** Se personalizzi il cluster, assicurati di selezionare Hive o HCatalog come una delle tue applicazioni.

1. In **Impostazioni Catalogo dati AWS Glue**, seleziona la casella di controllo **Utilizza per i metadati delle tabelle Hive**.

1. Scegli qualsiasi altra opzione applicabile al cluster. 

1. Per avviare il cluster, scegli **Create cluster** (Crea cluster).

------
#### [ CLI ]

**Per specificare il AWS Glue Data Catalog come metastore Hive con AWS CLI**

Per ulteriori informazioni sulla specificazione di una classificazione di configurazione utilizzando l'API AWS CLI ed EMR, vedere. [Configurazione delle applicazioni](emr-configure-apps.md)
+ Specificare il valore per `hive.metastore.client.factory.class` utilizzando la classificazione di configurazione `hive-site` come mostrato nell'esempio seguente.

  ```
  [
    {
      "Classification": "hive-site",
      "Properties": {
        "hive.metastore.client.factory.class": "com.amazonaws.glue.catalog.metastore.AWSGlueDataCatalogHiveClientFactory"
      }
    }
  ]
  ```

  Nelle versioni di rilascio EMR 5.28.0, 5.28.1, 5.29.0 o 6.x, se stai creando un cluster utilizzando AWS Glue Data Catalog come metastore, imposta su. `hive.metastore.schema.verification` `false` Ciò impedisce a Hive e di convalidare lo schema del metastore HCatalog rispetto a MySQL. Senza questa configurazione, il gruppo di istanze primario verrà sospeso dopo la riconfigurazione su Hive o. HCatalog 

  ```
  [
    {
      "Classification": "hive-site",
      "Properties": {
        "hive.metastore.client.factory.class": "com.amazonaws.glue.catalog.metastore.AWSGlueDataCatalogHiveClientFactory",
        "hive.metastore.schema.verification": "false"
      }
    }
  ]
  ```

  Se disponi già di un cluster nelle versioni di rilascio EMR 5.28.0, 5.28.1 o 5.29.0, puoi impostare il gruppo di istanze primarie `hive.metastore.schema.verification` su `false` con le seguenti informazioni:

  ```
     
      Classification = hive-site
      Property       = hive.metastore.schema.verification
      Value          = false
  ```

  Per specificare un Data Catalog in un AWS account diverso, aggiungete la `hive.metastore.glue.catalogid` proprietà come mostrato nell'esempio seguente. Sostituisci `acct-id` con l'account AWS di Data Catalog.

  ```
  [
    {
      "Classification": "hive-site",
      "Properties": {
        "hive.metastore.client.factory.class": "com.amazonaws.glue.catalog.metastore.AWSGlueDataCatalogHiveClientFactory",
        "hive.metastore.schema.verification": "false",
        "hive.metastore.glue.catalogid": "acct-id"
      }
    }
  ]
  ```

------

## autorizzazioni IAM
<a name="emr-hive-glue-permissions"></a>

Il profilo dell'istanza EC2 per un cluster deve disporre delle autorizzazioni IAM per le azioni AWS Glue. Inoltre, se abiliti la crittografia per gli oggetti di AWS Glue Data Catalog, al ruolo deve essere consentito anche di crittografare, decrittografare e generare ciò che AWS KMS key viene utilizzato per la crittografia.

### Autorizzazioni per le azioni AWS Glue
<a name="emr-hive-glue-permissions-actions"></a>

Se utilizzi il profilo dell'istanza EC2 di default per Amazon EMR, non è richiesta alcuna operazione. La politica `AmazonElasticMapReduceforEC2Role` gestita allegata a `EMR_EC2_DefaultRole` consente tutte le azioni AWS Glue necessarie. Tuttavia, se si specificano un profilo e le autorizzazioni dell'istanza EC2 personalizzati, è necessario configurare le azioni AWS Glue appropriate. Utilizza la policy `AmazonElasticMapReduceforEC2Role` gestita come punto di partenza. Per ulteriori informazioni, consulta [Ruolo di servizio per le istanze EC2 del cluster (profilo dell'istanza EC2)](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-iam-role-for-ec2.html) nella *Guida alla gestione di Amazon EMR*.

### Autorizzazioni per la crittografia e la decrittografia di Glue Data Catalog AWS
<a name="emr-hive-glue-permissions-encrypt"></a>

Il tuo profilo dell'istanza ha bisogno dell'autorizzazione per crittografare e decrittare i dati utilizzando la tua chiave. *Non* è necessario configurare queste autorizzazioni se si applicano entrambe le seguenti istruzioni:
+ È possibile abilitare la crittografia per gli oggetti di AWS Glue Data Catalog utilizzando le chiavi gestite per AWS Glue.
+ Utilizzi un cluster che è Account AWS uguale al AWS Glue Data Catalog.

In caso contrario, devi aggiungere la istruzione seguente alla policy delle autorizzazioni collegata al profilo dell'istanza EC2. 

Per ulteriori informazioni sulla crittografia del AWS Glue Data Catalog, [consulta Encrypting your data catalog](https://docs.aws.amazon.com/glue/latest/dg/encrypt-glue-data-catalog.html) nella *AWS Glue Developer Guide*.

### Autorizzazioni basate su risorse
<a name="emr-hive-glue-permissions-resource"></a>

Se utilizzi AWS Glue insieme a Hive, Spark o Presto in Amazon EMR, AWS Glue supporta politiche basate sulle risorse per controllare l'accesso alle risorse del Data Catalog. Queste risorse includono tabelle, database, connessioni e funzioni definite dall'utente. Per ulteriori informazioni, consulta [Policy sulle risorse AWS Glue](https://docs.aws.amazon.com/glue/latest/dg/glue-resource-policies.html) nella *Guida per gli sviluppatori di AWS Glue*.

Quando si utilizzano policy basate sulle risorse per limitare l'accesso a AWS Glue dall'interno di Amazon EMR, il principio specificato nella politica delle autorizzazioni deve essere il ruolo ARN associato al profilo dell'istanza EC2 specificato al momento della creazione di un cluster. Ad esempio, per una politica basata sulle risorse allegata a un catalogo, puoi specificare il ruolo ARN per il ruolo di servizio predefinito per le istanze EC2 del cluster, *EMR\$1EC2\$1DefaultRole* come`Principal`, utilizzando il formato mostrato nell'esempio seguente:

```
arn:aws:iam::acct-id:role/EMR_EC2_DefaultRole
```

*acct-id*Può essere diverso dall'ID dell'account AWS Glue. Ciò consente l'accesso da cluster EMR in account diversi. Puoi specificare più entità principali, ognuna da un account diverso.

## Considerazioni sull'utilizzo di AWS Glue Data Catalog
<a name="emr-hive-glue-considerations-hive"></a>

Considerate i seguenti elementi quando utilizzate AWS Glue Data Catalog come metastore con Hive:
+ L'aggiunta di ausiliari JARs utilizzando la shell Hive non è supportata. Come soluzione alternativa, utilizzate la classificazione di `hive-site` configurazione per impostare la `hive.aux.jars.path` proprietà, che aggiunge elementi ausiliari al classpath di JARs Hive.
+ Le [transazioni Hive](https://cwiki.apache.org/confluence/display/Hive/Hive+Transactions) non sono supportate.
+ La ridenominazione delle tabelle dall'interno di AWS Glue non è supportata.
+ Quando si crea una tabella Hive senza specificare una `LOCATION`, i dati nella tabella vengono archiviati nella posizione specificata dalla proprietà `hive.metastore.warehouse.dir`. Per impostazione predefinita, questa è una posizione in HDFS. Se un altro cluster necessita di accedere alla tabella, non ci riuscirà a meno che non disponga di autorizzazioni adeguate per il cluster che ha creato la tabella. Inoltre, poiché l'archiviazione HDFS è transitoria, se il cluster viene terminato, i dati della tabella vanno persi e la tabella deve essere ricreata. Ti consigliamo di specificare `LOCATION` a in Amazon S3 quando crei una tabella Hive utilizzando Glue. AWS In alternativa, puoi utilizzare la classificazione di configurazione `hive-site` per specificare una posizione in Amazon S3 per `hive.metastore.warehouse.dir`, che si applica a tutte le tabelle Hive. Se una tabella viene creata in una posizione HDFS e il cluster che l'ha creata è ancora in esecuzione, puoi aggiornare la posizione della tabella su Amazon S3 da Glue. AWS Per ulteriori informazioni, consulta [Working with Tables on the AWS Glue Console](https://docs.aws.amazon.com/glue/latest/dg/console-tables.html) nella *AWS Glue Developer Guide*. 
+ I valori delle partizioni contenenti virgolette e apostrofi non sono supportati, ad esempio `PARTITION (owner="Doe's").`.
+ Le [statistiche di colonna](https://cwiki.apache.org/confluence/display/Hive/StatsDev#StatsDev-ColumnStatistics) sono supportate per emr-5.31.0 e versioni successive.
+ L'utilizzo dell'[autorizzazione Hive](https://cwiki.apache.org/confluence/display/Hive/LanguageManual+Authorization) non è supportato. In alternativa, puoi prendere in considerazione l'utilizzo di [Policy basate sulle risorse AWS Glue](https://docs.aws.amazon.com/glue/latest/dg/glue-resource-policies.html). Per ulteriori informazioni, consulta [Use Resource-Based Policies per Amazon EMR Access to AWS](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-iam-roles-glue.html) Glue Data Catalog.
+ I [vincoli Hive](https://cwiki.apache.org/confluence/display/Hive/LanguageManual+DDL#LanguageManualDDL-Constraints) non sono supportati.
+ L'[ottimizzazione basata sui costi in Hive](https://cwiki.apache.org/confluence/display/Hive/Cost-based+optimization+in+Hive) non è supportata.
+ L'impostazione di `hive.metastore.partition.inherit.table.properties` non è supportata. 
+ L'utilizzo delle seguenti costanti metastore non è supportato: `BUCKET_COUNT, BUCKET_FIELD_NAME, DDL_TIME, FIELD_TO_DIMENSION, FILE_INPUT_FORMAT, FILE_OUTPUT_FORMAT, HIVE_FILTER_FIELD_LAST_ACCESS, HIVE_FILTER_FIELD_OWNER, HIVE_FILTER_FIELD_PARAMS, IS_ARCHIVED, META_TABLE_COLUMNS, META_TABLE_COLUMN_TYPES, META_TABLE_DB, META_TABLE_LOCATION, META_TABLE_NAME, META_TABLE_PARTITION_COLUMNS, META_TABLE_SERDE, META_TABLE_STORAGE, ORIGINAL_LOCATION`.
+ Quando si utilizza un'espressione predicato, i valori espliciti devono trovarsi sul lato destro dell'operatore di confronto, altrimenti le query potrebbero avere esito negativo.
  + **Corretto**: `SELECT * FROM mytable WHERE time > 11`
  + **Errato**: `SELECT * FROM mytable WHERE 11 > time`
+ Le versioni 5.32.0 e 6.3.0 e successive di Amazon EMR supportano l'uso di funzioni definite dall'utente () nelle espressioni dei predicati. UDFs Quando usi versioni precedenti, le tue query potrebbero fallire a causa del modo in cui Hive tenta di ottimizzare la relativa esecuzione.
+ Le [tabelle temporali](https://cwiki.apache.org/confluence/display/Hive/LanguageManual+DDL#LanguageManualDDL-TemporaryTables) non sono supportate.
+ Consigliamo di creare tabelle utilizzando applicazioni tramite Amazon EMR anziché crearle direttamente utilizzando AWS Glue. La creazione di una tabella tramite AWS Glue può causare la mancanza di campi obbligatori e causare eccezioni nelle query.
+ In EMR 5.20.0 o versioni successive, il pruning delle partizioni parallele viene abilitato automaticamente per Spark e Hive quando AWS Glue Data Catalog viene utilizzato come metastore. Questa modifica riduce significativamente i tempi di pianificazione delle query eseguendo più richieste in parallelo per recuperare le partizioni. Il numero totale di segmenti che è possibile eseguire contemporaneamente è compreso tra 1 e 10. Il valore di default è 5, che è l'impostazione consigliata. Puoi modificare questa impostazione specificando la proprietà `aws.glue.partition.num.segments` nella classificazione di configurazione `hive-site`. Se si verifica una limitazione, è possibile disattivare la funzione modificando il valore su 1. Per ulteriori informazioni, consulta [Struttura del segmento AWS Glue](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-api-catalog-partitions.html#aws-glue-api-catalog-partitions-Segment).

# Utilizzo di un database MySQL o Amazon Aurora esterno
<a name="emr-hive-metastore-external"></a>

Per utilizzare un database MySQL esterno o Amazon Aurora come metastore Hive, sovrascrivi i valori di configurazione predefiniti per il metastore in Hive per specificare la posizione del database esterno, su un'istanza Amazon RDS MySQL o Amazon Aurora Postgre. SQLinstance

**Nota**  
Hive non supporta né impedisce l'accesso in scrittura simultaneo alle tabelle dei metastore. Se si condividono le informazioni del metastore tra due cluster, è necessario assicurarsi di non scrivere contemporaneamente sulla stessa tabella del metastore, a meno che non si scriva su partizioni diverse della stessa tabella del metastore.

La procedura seguente mostra come sovrascrivere i valori di configurazione predefiniti per la posizione del metastore Hive e avviare un cluster utilizzando la posizione del metastore riconfigurato.

**Per creare un metastore situato al di fuori del cluster EMR**

1. Creare un database MySQL o Aurora. Se si utilizza PostgreSQL, è necessario configurarlo dopo aver eseguito il provisioning del cluster. Solo MySQL è supportato durante la creazione del cluster. Per informazioni sulle differenze tra Aurora MySQL e Aurora PostgreSQL, consulta [Panoramica di Amazon Aurora MySQL](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/Aurora.AuroraMySQL.Overview.html) e [Utilizzo di Amazon Aurora PostgreSQL](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/Aurora.AuroraPostgreSQL.html). Per informazioni su come creare un database Amazon RDS in generale, consulta [https://aws.amazon.com/rds/](https://aws.amazon.com/rds/).

1. Modifica i gruppi di sicurezza per consentire le connessioni JDBC tra il database e il gruppo di sicurezza **ElasticMapReduce-Master**. Per ulteriori informazioni su come modificare i gruppi di sicurezza per l'accesso, consulta [Utilizzo dei gruppi di sicurezza gestiti da Amazon EMR](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-man-sec-groups.html).

1. Impostare i valori di configurazione JDBC in `hive-site.xml`:
**Importante**  
Se si forniscono informazioni sensibili, come password, all'API di configurazione di Amazon EMR, queste informazioni vengono visualizzate per gli account che dispongono di autorizzazioni sufficienti. Se si teme che queste informazioni possano essere visualizzate ad altri utenti, creare il cluster con un account amministrativo e limitare gli altri utenti (utenti IAM o con credenziali delegate) ad accedere ai servizi del cluster creando un ruolo che nega esplicitamente le autorizzazioni alla chiave API `elasticmapreduce:DescribeCluster`.

   1. Creare un file di configurazione denominato `hiveConfiguration.json` contenente modifiche apportate a `hive-site.xml` come mostrato nel seguente esempio.

       Sostituiscilo *hostname* con l'indirizzo DNS dell'istanza Amazon RDS che esegue il database *username* e *password* con le credenziali del database. Per ulteriori informazioni sulla connessione a istanze database MySQL e Aurora, consulta [Connessione a un'istanza database che esegue il motore del database di MySQL](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_ConnectToInstance.html) e [Connessione a un cluster Athena DB](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Aurora.Connect.html) nella *Guida per l'utente di Amazon RDS*. `javax.jdo.option.ConnectionURL` è la stringa di connessione JDBC per un metastore JDBC. `javax.jdo.option.ConnectionDriverName` è il nome della classe del driver per un metastore JDBC.

      I driver MySQL JDBC sono installati da Amazon EMR. 

      La proprietà value non può contenere spazi o ritorni a capo. Deve essere visualizzato tutto su una riga.

      ```
      [
          {
            "Classification": "hive-site",
            "Properties": {
              "javax.jdo.option.ConnectionURL": "jdbc:mysql://hostname:3306/hive?createDatabaseIfNotExist=true",
              "javax.jdo.option.ConnectionDriverName": "org.mariadb.jdbc.Driver",
              "javax.jdo.option.ConnectionUserName": "username",
              "javax.jdo.option.ConnectionPassword": "password"
            }
          }
        ]
      ```

   1. Fai riferimento al `hiveConfiguration.json` file quando crei il cluster, come mostrato nel comando seguente. AWS CLI In questo comando, il file è memorizzato in locale ed è anche possibile caricare il file da Amazon S3 e farvi riferimento, per esempio `s3://DOC-EXAMPLE-BUCKET/hiveConfiguration.json`.
**Nota**  
I caratteri di continuazione della riga Linux (\$1) sono inclusi per la leggibilità. Possono essere rimossi o utilizzati nei comandi Linux. Per Windows, rimuovili o sostituiscili con un accento circonflesso (^).

      ```
      aws emr create-cluster --release-label emr-7.12.0 --instance-type m5.xlarge --instance-count 2 \
      --applications Name=Hive --configurations file://hiveConfiguration.json --use-default-roles
      ```

1. Effettua la connessione al nodo primario del cluster. 

   Per informazioni su come connettersi al nodo master, consulta la sezione [Connect to the primary node using SSH](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-connect-master-node-ssh.html) (Connessione al nodo primario tramite SSH) nella *Guida alla gestione di Amazon EMR*.

1. Crea le tabelle Hive specificando il percorso su Amazon S3 immettendo un comando simile al seguente:

   ```
   CREATE EXTERNAL TABLE IF NOT EXISTS table_name
   (
   key int,
   value int
   )
   LOCATION s3://DOC-EXAMPLE-BUCKET/hdfs/
   ```

1. Aggiungere lo script Hive al cluster in esecuzione.

Il cluster Hive viene eseguito utilizzando il metastore situato in Amazon RDS. Avviare tutti i cluster Hive aggiuntivi che condividono questo metastore specificando la posizione del metastore. 