Deployment di Apache Hive su Dataproc

Last reviewed 2023-05-08 UTC

Questo documento descrive come eseguire il deployment dell'architettura in Utilizzare Apache Hive su Dataproc.

Questo documento è rivolto ai cloud architect e ai data engineer che interessato al deployment di Apache Hive su Dataproc e Hive Metastore in in Cloud SQL.

Architettura

In questa guida al deployment eseguirai il deployment di tutte le risorse di computing dei servizi in Nella stessa regione Google Cloud per ridurre al minimo la latenza di rete e i costi di trasporto della rete.

Il seguente diagramma mostra il ciclo di vita di una query Hive.

Diagramma di un'architettura a una singola regione.

Nel diagramma, il client Hive invia una query, che viene elaborata, recuperata e viene restituito. L'elaborazione avviene nel server Hive. I dati vengono da un magazzino Hive memorizzato in un bucket regionale in di archiviazione ideale in Cloud Storage.

Obiettivi

  • Creare un'istanza MySQL su Cloud SQL per il metastore Hive.
  • Eseguire il deployment dei server Hive su Dataproc.
  • Installa il Proxy Cloud SQL sulle istanze del cluster Dataproc.
  • Carica i dati Hive in Cloud Storage.
  • Eseguire query Hive su più cluster Dataproc.

Costi

Questo deployment utilizza i seguenti componenti fatturabili di Google Cloud:

  • Dataproc
  • Cloud Storage
  • Cloud SQL

Puoi utilizzare lo Calcolatore prezzi per generare una stima dei costi in base all'utilizzo previsto.

I nuovi utenti Google Cloud potrebbero essere idonei per un prova gratuita.

Al termine del deployment, potrai evitare la fatturazione continua eliminando le risorse che hai creato. Per maggiori informazioni, vedi Pulizia.

Prima di iniziare

  1. Nella pagina del selettore progetti della console Google Cloud, seleziona o crea un progetto Google Cloud.

    Vai al selettore progetti

  2. Verifica che la fatturazione sia attivata per il tuo progetto Google Cloud. Scopri come fare a verifica se la fatturazione è abilitata su un progetto.

inizializza l'ambiente

  1. Avvia un'istanza di Cloud Shell:

    Vai a Cloud Shell

  2. In Cloud Shell imposta la zona Compute Engine predefinita sulla zona dove creerai i tuoi cluster Dataproc.

    export PROJECT=$(gcloud info --format='value(config.project)')
    export REGION=REGION
    export ZONE=ZONE
    gcloud config set compute/zone ${ZONE}

    Sostituisci quanto segue:

    • REGION: la regione in cui vuoi creare il cluster, ad esempio us-central1.
    • ZONE: la zona in cui vuoi creare il cluster, ad esempio us-central1-a.
  3. Abilita le API Admin Dataproc e Cloud SQL esegui questo comando in Cloud Shell:

    gcloud services enable dataproc.googleapis.com sqladmin.googleapis.com

(Facoltativo) Creazione del bucket del warehouse

Se non hai un bucket Cloud Storage per archiviare i dati Hive, crea un bucket di warehouse (puoi eseguire i comandi seguenti in Cloud Shell) sostituendo BUCKET_NAME con un nome di bucket univoco:

export WAREHOUSE_BUCKET=BUCKET_NAME
gcloud storage buckets create gs://${WAREHOUSE_BUCKET} --location=${REGION}

Creazione dell'istanza Cloud SQL

In questa sezione creerai una nuova istanza Cloud SQL che in seguito utilizzato per ospitare il metastore Hive.

In Cloud Shell, crea una nuova istanza Cloud SQL:

gcloud sql instances create hive-metastore \
    --database-version="MYSQL_5_7" \
    --activation-policy=ALWAYS \
    --zone ${ZONE}

Il completamento di questo comando potrebbe richiedere alcuni minuti.

Creazione di un cluster Dataproc

Crea il primo cluster Dataproc, sostituendo CLUSTER_NAME con un nome come hive-cluster :

gcloud dataproc clusters create CLUSTER_NAME \
    --scopes sql-admin \
    --region ${REGION} \
    --initialization-actions gs://goog-dataproc-initialization-actions-${REGION}/cloud-sql-proxy/cloud-sql-proxy.sh \
    --properties "hive:hive.metastore.warehouse.dir=gs://${WAREHOUSE_BUCKET}/datasets" \
    --metadata "hive-metastore-instance=${PROJECT}:${REGION}:hive-metastore" \
    --metadata "enable-cloud-sql-proxy-on-workers=false"

Note:

  • Devi fornire i sql-admin ambito di accesso per consentire alle istanze del cluster di accedere all'API Cloud SQL Admin.
  • Inserisci l'azione di inizializzazione in uno script che memorizzi in un nel bucket Cloud Storage, utilizzandolo come riferimento --initialization-actions flag. Consulta: Azioni di inizializzazione: considerazioni e linee guida importanti per saperne di più.
  • Tu fornisci l'URI del bucket del warehouse Hive nella hive:hive.metastore.warehouse.dir proprietà. Questa operazione configura Hive di lettura e scrittura nella posizione corretta. Questa proprietà deve contenere almeno una directory (ad esempio, gs://my-bucket/my-directory); Hive non funzionerà correttamente se questa proprietà è impostata sul nome di un bucket senza una directory (ad esempio, gs://my-bucket).
  • Devi specificare enable-cloud-sql-proxy-on-workers=false per garantire che Il proxy Cloud SQL viene eseguito solo su nodi master, e questo è sufficiente per il servizio metastore Hive per funzionare ed evita il carico non necessario in Cloud SQL.
  • Sei tu a fornire il proxy Cloud SQL azione di inizializzazione che Dataproc esegue automaticamente su tutte le istanze del cluster. L'azione svolge le seguenti operazioni:

    • Installa il proxy Cloud SQL.
    • Stabilisce una connessione sicura a Cloud SQL specificata nel parametro dei metadati hive-metastore-instance.
    • Crea l'utente hive e il database del metastore Hive.

    Puoi vedere codice completo per l'azione di inizializzazione del proxy Cloud SQL su GitHub.

  • Questo deployment utilizza un'istanza Cloud SQL con indirizzo IP pubblico. Se ma utilizzi un'istanza con solo un indirizzo IP privato, puoi forzare il proxy a utilizzare l'indirizzo IP privato passando il parametro --metadata "use-cloud-sql-private-ip=true".

Creazione di una tabella Hive

In questa sezione, caricherai un set di dati di esempio nel bucket di warehouse, creerai un nuova tabella Hive ed eseguire alcune query HiveQL su quel set di dati.

  1. Copia il set di dati di esempio nel bucket del warehouse:

    gcloud storage cp gs://hive-solution/part-00000.parquet \
    gs://${WAREHOUSE_BUCKET}/datasets/transactions/part-00000.parquet

    Il set di dati di esempio viene compresso Pacchino e contiene migliaia di record di transazioni bancarie fittizi con tre colonne: data, importo e tipo di transazione.

  2. Crea una tabella Hive esterna per il set di dati:

    gcloud dataproc jobs submit hive \
        --cluster CLUSTER_NAME \
        --region ${REGION} \
        --execute "
          CREATE EXTERNAL TABLE transactions
          (SubmissionDate DATE, TransactionAmount DOUBLE, TransactionType STRING)
          STORED AS PARQUET
          LOCATION 'gs://${WAREHOUSE_BUCKET}/datasets/transactions';"

Esecuzione di query Hive

All'interno di Dataproc, puoi utilizzare diversi strumenti per eseguire query Hive. In questa sezione, imparerai a eseguire query utilizzando i seguenti strumenti:

In ogni sezione, esegui una query di esempio.

Esecuzione di query su Hive con l'API Dataproc Jobs

Esegui questa semplice query HiveQL per verificare che il file Parquet sia correttamente collegato alla tabella Hive:

gcloud dataproc jobs submit hive \
    --cluster CLUSTER_NAME \
    --region ${REGION} \
    --execute "
      SELECT *
      FROM transactions
      LIMIT 10;"

L'output include quanto segue:

+-----------------+--------------------+------------------+
| submissiondate  | transactionamount  | transactiontype  |
+-----------------+--------------------+------------------+
| 2017-12-03      | 1167.39            | debit            |
| 2017-09-23      | 2567.87            | debit            |
| 2017-12-22      | 1074.73            | credit           |
| 2018-01-21      | 5718.58            | debit            |
| 2017-10-21      | 333.26             | debit            |
| 2017-09-12      | 2439.62            | debit            |
| 2017-08-06      | 5885.08            | debit            |
| 2017-12-05      | 7353.92            | authorization    |
| 2017-09-12      | 4710.29            | authorization    |
| 2018-01-05      | 9115.27            | debit            |
+-----------------+--------------------+------------------+

Esecuzione di query su Hive con Beeline

  1. Apri una sessione SSH con l'istanza master di Dataproc(CLUSTER_NAME-m):

    gcloud compute ssh CLUSTER_NAME-m
  2. Nel prompt dei comandi dell'istanza master, apri una sessione Beeline:

    beeline -u "jdbc:hive2://localhost:10000"

    Note:

    • Puoi anche fare riferimento al nome dell'istanza master come host anziché localhost:

      beeline -u "jdbc:hive2://CLUSTER_NAME-m:10000"
    • Se utilizzassi la modalità ad alta disponibilità con 3 master, utilizzare il seguente comando:

      beeline -u "jdbc:hive2://CLUSTER_NAME-m-0:2181,CLUSTER_NAME-m-1:2181,CLUSTER_NAME-m-2:2181/;serviceDiscoveryMode=zooKeeper;zooKeeperNamespace=hiveserver2"
  3. Quando viene visualizzato il prompt di Beeline, esegui la seguente query HiveQL:

    SELECT TransactionType, AVG(TransactionAmount) AS AverageAmount
    FROM transactions
    WHERE SubmissionDate = '2017-12-22'
    GROUP BY TransactionType;

    L'output include quanto segue:

    +------------------+--------------------+
    | transactiontype  |   averageamount    |
    +------------------+--------------------+
    | authorization    | 4890.092525252529  |
    | credit           | 4863.769269565219  |
    | debit            | 4982.781458176331  |
    +------------------+--------------------+
  4. Chiudi la sessione Beeline:

    !quit
  5. Chiudi la connessione SSH:

    exit

Esecuzione di query su Hive con SparkSQL

  1. Apri una sessione SSH con l'istanza master di Dataproc:

    gcloud compute ssh CLUSTER_NAME-m
  2. Nel prompt dei comandi dell'istanza master, apri un nuovo PySpark sessione shell:

    pyspark
  3. Quando viene visualizzato il prompt della shell PySpark, digita il seguente codice Python:

    from pyspark.sql import HiveContext
    hc = HiveContext(sc)
    hc.sql("""
    SELECT SubmissionDate, AVG(TransactionAmount) as AvgDebit
    FROM transactions
    WHERE TransactionType = 'debit'
    GROUP BY SubmissionDate
    HAVING SubmissionDate >= '2017-10-01' AND SubmissionDate < '2017-10-06'
    ORDER BY SubmissionDate
    """).show()

    L'output include quanto segue:

    +-----------------+--------------------+
    | submissiondate  |      avgdebit      |
    +-----------------+--------------------+
    | 2017-10-01      | 4963.114920399849  |
    | 2017-10-02      | 5021.493300510582  |
    | 2017-10-03      | 4982.382279569891  |
    | 2017-10-04      | 4873.302702503676  |
    | 2017-10-05      | 4967.696333583777  |
    +-----------------+--------------------+
  4. Chiudi la sessione PySpark:

    exit()
  5. Chiudi la connessione SSH:

    exit

Ispezione del metastore Hive

Ora devi verificare che il metastore Hive in Cloud SQL contenga informazioni sulla tabella transactions.

  1. In Cloud Shell, avvia una nuova sessione MySQL sul Istanza Cloud SQL:

    gcloud sql connect hive-metastore --user=root

    Quando ti viene richiesta la password utente di root, non digitare nulla e basta premere il tasto RETURN. Per semplificare questo deployment, non ha impostato alcuna password per l'utente root. Per informazioni sull'impostazione di per proteggere ulteriormente il database metastore, consulta Cloud SQL documentazione. L'azione di inizializzazione del proxy Cloud SQL fornisce anche un meccanismo proteggere le password tramite crittografia. Per ulteriori informazioni, consulta repository di codice.

  2. Nel prompt dei comandi MySQL, imposta hive_metastore come valore predefinito per il resto della sessione:

    USE hive_metastore;
  3. Verifica che la località del bucket di warehouse sia registrata nel metastore:

    SELECT DB_LOCATION_URI FROM DBS;

    L'output avrà il seguente aspetto:

    +-------------------------------------+
    | DB_LOCATION_URI                     |
    +-------------------------------------+
    | gs://[WAREHOUSE_BUCKET]/datasets   |
    +-------------------------------------+
  4. Verifica che alla tabella venga fatto riferimento correttamente nel metastore:

    SELECT TBL_NAME, TBL_TYPE FROM TBLS;

    L'output avrà il seguente aspetto:

    +--------------+----------------+
    | TBL_NAME     | TBL_TYPE       |
    +--------------+----------------+
    | transactions | EXTERNAL_TABLE |
    +--------------+----------------+
  5. Verifica che venga fatto riferimento correttamente anche alle colonne della tabella:

    SELECT COLUMN_NAME, TYPE_NAME
    FROM COLUMNS_V2 c, TBLS t
    WHERE c.CD_ID = t.SD_ID AND t.TBL_NAME = 'transactions';

    L'output avrà il seguente aspetto:

    +-------------------+-----------+
    | COLUMN_NAME       | TYPE_NAME |
    +-------------------+-----------+
    | submissiondate    | date      |
    | transactionamount | double    |
    | transactiontype   | string    |
    +-------------------+-----------+
  6. Verifica che anche il formato di input e la località vengano indicati correttamente:

    SELECT INPUT_FORMAT, LOCATION
    FROM SDS s, TBLS t
    WHERE s.SD_ID = t.SD_ID AND t.TBL_NAME = 'transactions';

    L'output avrà il seguente aspetto:

    +---------------------------------------------------------------+------------------------------------------------+
    | INPUT_FORMAT                                                  | LOCATION                                       |
    +---------------------------------------------------------------+------------------------------------------------+
    | org.apache.hadoop.hive.ql.io.parquet.MapredParquetInputFormat | gs://[WAREHOUSE_BUCKET]/datasets/transactions |
    +---------------------------------------------------------------+------------------------------------------------+
    
  7. Chiudi la sessione MySQL:

    exit

Creazione di un altro cluster Dataproc

In questa sezione creerai un altro cluster Dataproc per verificare che i dati Hive e il metastore Hive possono essere condivisi tra più cluster.

  1. Crea un nuovo cluster Dataproc:

    gcloud dataproc clusters create other-CLUSTER_NAME \
        --scopes cloud-platform \
        --image-version 2.0 \
        --region ${REGION} \
        --initialization-actions gs://goog-dataproc-initialization-actions-${REGION}/cloud-sql-proxy/cloud-sql-proxy.sh \
        --properties "hive:hive.metastore.warehouse.dir=gs://${WAREHOUSE_BUCKET}/datasets" \
        --metadata "hive-metastore-instance=${PROJECT}:${REGION}:hive-metastore"\
        --metadata "enable-cloud-sql-proxy-on-workers=false"
  2. Verifica che il nuovo cluster possa accedere ai dati:

    gcloud dataproc jobs submit hive \
        --cluster other-CLUSTER_NAME \
        --region ${REGION} \
        --execute "
          SELECT TransactionType, COUNT(TransactionType) as Count
          FROM transactions
          WHERE SubmissionDate = '2017-08-22'
          GROUP BY TransactionType;"

    L'output include quanto segue:

    +------------------+--------+
    | transactiontype  | count  |
    +------------------+--------+
    | authorization    | 696    |
    | credit           | 1722   |
    | debit            | 2599   |
    +------------------+--------+

Congratulazioni, hai completato i passaggi del deployment.

Esegui la pulizia

Le seguenti sezioni spiegano come evitare addebiti futuri per il progetto Google Cloud e le risorse Apache Hive e Dataproc utilizzate in questo deployment.

Elimina il progetto Google Cloud

Per evitare che al tuo account Google Cloud vengano addebitati costi relativi alla utilizzate in questo deployment, puoi eliminare il progetto Google Cloud.

  1. In the Google Cloud console, go to the Manage resources page.

    Go to Manage resources

  2. In the project list, select the project that you want to delete, and then click Delete.
  3. In the dialog, type the project ID, and then click Shut down to delete the project.

Eliminazione di singole risorse

Esegui questi comandi in Cloud Shell per eliminare singoli delle risorse anziché eliminare l'intero progetto:

gcloud dataproc clusters delete CLUSTER_NAME --region ${REGION} --quiet
gcloud dataproc clusters delete other-CLUSTER_NAME --region ${REGION} --quiet
gcloud sql instances delete hive-metastore --quiet
gcloud storage rm gs://${WAREHOUSE_BUCKET}/datasets --recursive

Passaggi successivi

  • Prova BigQuery Il data warehouse aziendale serverless, a scalabilità elevata e a basso costo di Google.
  • Dai un'occhiata a questo guida sulla migrazione dei carichi di lavoro Hadoop su Google Cloud.
  • Dai un'occhiata a questo azione di inizializzazione per maggiori dettagli su come utilizzare HCatalog per l'Hive su Dataproc.
  • Scopri come configurare Cloud SQL alta disponibilità per aumentare l'affidabilità del servizio.
  • Per altre architetture di riferimento, diagrammi e best practice, esplora il Centro architetture cloud.