Eseguire un processo Apache Hive, Pig o Hadoop usando Azure Cosmos DB e HDInsightRun an Apache Hive, Pig, or Hadoop job using Azure Cosmos DB and HDInsight

Questa esercitazione illustra come eseguire processi Apache Hive, Apache Pig e Apache Hadoop MapReduce in Azure HDInsight con il connettore Hadoop di Cosmos DB.This tutorial shows you how to run Apache Hive, Apache Pig, and Apache Hadoop MapReduce jobs on Azure HDInsight with Cosmos DB's Hadoop connector. Il connettore Hadoop di Cosmos DB consente a quest'ultimo di fungere da origine e sink per i processi Hive, Pig e MapReduce.Cosmos DB's Hadoop connector allows Cosmos DB to act as both a source and sink for Hive, Pig, and MapReduce jobs. Questa esercitazione userà Cosmos DB come origine dati e destinazione per i processi Hadoop.This tutorial will use Cosmos DB as both the data source and destination for Hadoop jobs.

Dopo aver completato questa esercitazione, si potrà rispondere alle domande seguenti:After completing this tutorial, you'll be able to answer the following questions:

  • Come si caricano i dati da Cosmos DB usando un processo Hive, Pig o MapReduce?How do I load data from Cosmos DB using a Hive, Pig, or MapReduce job?
  • Come si archiviano i dati in Cosmos DB usando un processo Hive, Pig o MapReduce?How do I store data in Cosmos DB using a Hive, Pig, or MapReduce job?

Per iniziare, è consigliabile guardare il video seguente che illustra un processo Hive usando Cosmos DB e HDInsight.We recommend getting started by watching the following video, where we run through a Hive job using Cosmos DB and HDInsight.

Tornare quindi a questo articolo, che illustra in modo dettagliato come eseguire processi di analisi sui dati di Cosmos DB.Then, return to this article, where you'll receive the full details on how you can run analytics jobs on your Cosmos DB data.

Suggerimento

Questa esercitazione presume che l'utente abbia una precedente esperienza nell'uso di Apache Hadoop, Hive e/o Pig.This tutorial assumes that you have prior experience using Apache Hadoop, Hive, and/or Pig. Se non si conoscono Apache Hadoop, Hive e Pig, si consiglia di vedere la pagina relativa alla documentazione di Apache Hadoop.If you are new to Apache Hadoop, Hive, and Pig, we recommend visiting the Apache Hadoop documentation. Questa esercitazione presuppone che si abbia esperienza con Cosmos DB e che sia disponibile un account Cosmos DB.This tutorial also assumes that you have prior experience with Cosmos DB and have a Cosmos DB account. Se non si conosce Cosmos DB o non si ha un account Cosmos DB, vedere la pagina Per iniziare.If you are new to Cosmos DB or you do not have a Cosmos DB account, please check out our Getting Started page.

Se non si ha tempo di completare l'esercitazione e si vogliono ottenere gli script PowerShell completi di esempio per Hive, Pig e MapReduce,Don't have time to complete the tutorial and just want to get the full sample PowerShell scripts for Hive, Pig, and MapReduce? È possibile ottenerli qui.Not a problem, get them here. Il download contiene anche i file hql, pig e java per questi esempi.The download also contains the hql, pig, and java files for these samples.

Versione più recenteNewest Version

Versione di Hadoop ConnectorHadoop Connector Version 1.2.01.2.0
URI scriptScript Uri https://portalcontent.blob.core.windows.net/scriptaction/documentdb-hadoop-installer-v04.ps1https://portalcontent.blob.core.windows.net/scriptaction/documentdb-hadoop-installer-v04.ps1
Data ultima modificaDate Modified 26/04/201604/26/2016
Versioni supportate di HDInsightSupported HDInsight Versions 3.1, 3.2.3.1, 3.2
Registro modificheChange Log Aggiornamento di Azure Cosmos DB Java SDK alla versione 1.6.0Updated Azure Cosmos DB Java SDK to 1.6.0
Aggiunta del supporto per le raccolte partizionate come origine e sinkAdded support for partitioned collections as both a source and sink

PrerequisitiPrerequisites

Prima di seguire le istruzioni di questa esercitazione, verificare che siano disponibili gli elementi seguenti:Before following the instructions in this tutorial, ensure that you have the following:

  • Un account Cosmos DB, un database e una raccolta di documenti all'interno.A Cosmos DB account, a database, and a collection with documents inside. Per altre informazioni, vedere l'introduzione a Cosmos DB.For more information, see Getting Started with Cosmos DB. Importare dati di esempio nell'account Cosmos DB con lo strumento di importazione di Cosmos DB.Import sample data into your Cosmos DB account with the Cosmos DB import tool.
  • Velocità effettiva.Throughput. Le letture e le scritture da HDInsight verranno conteggiate rispetto alle unità di richiesta dell'unità di capacità.Reads and writes from HDInsight will be counted towards your allotted request units for your collections.
  • Capacità di una stored procedure aggiuntiva all'interno di ciascun insieme di output.Capacity for an additional stored procedure within each output collection. Le stored procedure vengono usate per trasferire i documenti risultanti.The stored procedures are used for transferring resulting documents.
  • Capacità per i documenti risultanti da processi Hive, Pig o MapReduce.Capacity for the resulting documents from the Hive, Pig, or MapReduce jobs.
  • FacoltativoCapacità per una raccolta aggiuntiva.[Optional] Capacity for an additional collection.

Avviso

Per evitare la creazione di una nuova raccolta durante uno qualsiasi dei processi è possibile stampare i risultati in stdout, salvare l'output nel contenitore WASB oppure specificare una raccolta già esistente.In order to avoid the creation of a new collection during any of the jobs, you can either print the results to stdout, save the output to your WASB container, or specify an already existing collection. Nel caso in cui venga specificata una raccolta esistente, verranno creati nuovi documenti all'interno della raccolta, mentre i documenti esistenti verranno interessati solo se si verifica un conflitto tra gli ids.In the case of specifying an existing collection, new documents will be created inside the collection and already existing documents will only be affected if there is a conflict in ids. Il connettore sovrascriverà automaticamente i documenti esistenti con conflitti tra ID.The connector will automatically overwrite existing documents with id conflicts. È possibile disattivare questa funzionalità impostando l'opzione upsert su false.You can turn off this feature by setting the upsert option to false. Se upsert è impostato su false e si verifica un conflitto, il processo Hadoop avrà esito negativo, indicando un errore di conflitto tra ID.If upsert is false and a conflict occurs, the Hadoop job will fail; reporting an id conflict error.

Passaggio 1: Creare un nuovo cluster HDInsightStep 1: Create a new HDInsight cluster

Questa esercitazione usa Azioni script del portale di Azure per personalizzare il cluster HDInsight.This tutorial uses Script Action from the Azure Portal to customize your HDInsight cluster. In questa esercitazione si userà il portale di Azure per creare un cluster HDInsight.In this tutorial, we will use the Azure Portal to create your HDInsight cluster. Per istruzioni su come usare i cmdlet di PowerShell oppure HDInsight .NET SDK, vedere l'articolo Personalizzare cluster HDInsight mediante Azione script.For instructions on how to use PowerShell cmdlets or the HDInsight .NET SDK, check out the Customize HDInsight clusters using Script Action article.

  1. Accedere al portale di Azure.Sign in to the Azure Portal.
  2. Fare clic su + Nuovo nella parte superiore del riquadro di spostamento a sinistra e cercare HDInsight nella barra di ricerca in alto nel pannello Nuovo.Click + New on the top of the left navigation, search for HDInsight in the top search bar on the New blade.
  3. HDInsight pubblicato da Microsoft verrà visualizzato in cima ai risultati.HDInsight published by Microsoft will appear at the top of the Results. Fare clic sulla voce e selezionare Crea.Click on it and then click Create.
  4. Nel pannello Nuovo cluster HDInsight immettere un nome in Nome cluster e selezionare la sottoscrizione in cui effettuare il provisioning della risorsa.On the New HDInsight Cluster create blade, enter your Cluster Name and select the Subscription you want to provision this resource under.

    Nome del clusterCluster nameAssegnare un nome al cluster.Name the cluster.
    Il nome DNS deve iniziare e finire con un carattere alfanumerico e può contenere trattini.DNS name must start and end with an alpha numeric character, and may contain dashes.
    Il campo deve essere una stringa composta da un minimo di 3 a un massimo di 63 caratteri.The field must be a string between 3 and 63 characters.
    Nome sottoscrizioneSubscription Name Se sono disponibili più sottoscrizioni di Azure, selezionare quella che ospiterà il cluster HDInsight.If you have more than one Azure Subscription, select the subscription that will host your HDInsight cluster.

  5. Fare clic su Selezionare il tipo di cluster e impostare le seguenti proprietà sui valori specificati.
  6. Click Select Cluster Type and set the following properties to the specified values.

    Tipo di clusterCluster typeHadoopHadoop
    Livello clusterCluster tierStandardStandard
    Sistema operativoOperating SystemWindowsWindows
    VersioneVersionversione più recentelatest version

    A questo punto fare clic su SELEZIONA.Now, click SELECT.

    Fornire i dettagli di iniziale del cluster Hadoop HDInsight

  7. Fare clic su Credenziali per impostare le credenziali di accesso e di accesso remoto.Click on Credentials to set your login and remote access credentials. Scegliere il nome utente dell'account di accesso del cluster e la password dell'account di accesso del cluster.Choose your Cluster Login Username and Cluster Login Password.

    Se si intende accedere al cluster in modalità remota, selezionare nella parte inferiore del pannello e specificare un nome utente e una password.If you want to remote into your cluster, select yes at the bottom of the blade and provide a username and password.

  8. Fare clic su Origine dati per impostare la posizione primaria per l'accesso ai dati.Click on Data Source to set your primary location for data access. Scegliere un'opzione in Metodo di selezione e specificare un account di archiviazione già esistente o crearne uno nuovo.Choose the Selection Method and specify an already existing storage account or create a new one.
  9. Nello stesso pannello specificare un contenitore predefinito e una località.On the same blade, specify a Default Container and a Location. Fare quindi clic su SELEZIONA.And, click SELECT.

    Nota

    Per ottenere prestazioni migliori, selezionare una località vicina all'area dell'account Cosmos DB.Select a location close to your Cosmos DB account region for better performance

  10. Fare clic su Prezzi per selezionare numero e tipo di nodi.Click on Pricing to select the number and type of nodes. È possibile mantenere la configurazione predefinita e ridimensionare il numero di nodi del ruolo di lavoro in un secondo momento.You can keep the default configuration and scale the number of Worker nodes later on.
  11. Fare clic su Configurazione facoltativa e quindi selezionare Azioni script nel pannello Configurazione facoltativa.Click Optional Configuration, then Script Actions in the Optional Configuration Blade.

    In Azioni script immettere le informazioni seguenti per personalizzare il cluster HDInsight.In Script Actions, enter the following information to customize your HDInsight cluster.

    ProprietàPropertyValoreValue
    NomeName Specificare un nome per l'azione script.Specify a name for the script action.
    URI scriptScript URI Specificare l'URI dello script da richiamare per personalizzare il cluster.Specify the URI to the script that is invoked to customize the cluster.
    Immettere:Please enter:
    https://portalcontent.blob.core.windows.net/scriptaction/documentdb-hadoop-installer-v04.ps1.https://portalcontent.blob.core.windows.net/scriptaction/documentdb-hadoop-installer-v04.ps1.
    HeadHead Selezionare la casella di controllo per eseguire lo script di PowerShell nel nodo head.Click the checkbox to run the PowerShell script onto the Head node.
    Selezionare questa casella di controllo. Check this checkbox.
    WorkerWorker Selezionare la casella di controllo per eseguire lo script di PowerShell nel nodo del ruolo di lavoro.Click the checkbox to run the PowerShell script onto the Worker node.
    Selezionare questa casella di controllo. Check this checkbox.
    ZookeeperZookeeper Selezionare la casella di controllo per eseguire lo script di PowerShell nel nodo Zookeeper.Click the checkbox to run the PowerShell script onto the Zookeeper.
    Non necessario. Not needed.
    ParametriParameters Specificare i parametri, se richiesti dallo script.Specify the parameters, if required by the script.
    Nessun parametro necessario. No Parameters needed.

  12. Creare un nuovo gruppo di risorse o usarne uno esistente nella sottoscrizione di Azure.
  13. Create either a new Resource Group or use an existing Resource Group under your Azure Subscription. 12.12. Selezionare ora Aggiungi al dashboard per tenere traccia della distribuzione e fare clic su Crea.Now, check Pin to dashboard to track its deployment and click Create!

Passaggio 2: Installare e configurare Azure PowerShellStep 2: Install and configure Azure PowerShell

  1. Installare Azure PowerShell.Install Azure PowerShell. Le istruzioni sono consultabili qui.Instructions can be found here.

    Nota

    In alternativa, solo per le query Hive, è possibile usare l'Editor Hive online di HDInsight.Alternatively, just for Hive queries, you can use HDInsight's online Hive Editor. A tale scopo, accedere al portale di Azure, fare clic su HDInsight nel riquadro sinistro per visualizzare un elenco dei cluster HDInsight.To do so, sign in to the Azure Portal, click HDInsight on the left pane to view a list of your HDInsight clusters. Fare clic sul cluster che sul quale si vogliono eseguire le query Hive e quindi fare clic su Console Query.Click the cluster you want to run Hive queries on, and then click Query Console.

  2. Aprire Integrated Scripting Environment di Azure PowerShell:Open the Azure PowerShell Integrated Scripting Environment:

    • In un computer che esegue Windows 8 o Windows Server 2012 o versione successiva, è possibile usare la funzionalità di ricerca incorporata.On a computer running Windows 8 or Windows Server 2012 or higher, you can use the built-in Search. Dalla schermata Start digitare powershell ise e fare clic su Invio.From the Start screen, type powershell ise and click Enter.
    • In un computer che esegue una versione di Windows precedente a Windows 8 o Windows Server 2012 è possibile usare il menu Start.On a computer running a version earlier than Windows 8 or Windows Server 2012, use the Start menu. Dal menu Start, digitare Prompt dei comandi nella casella di ricerca, quindi nell'elenco dei risultati, fare clic su Prompt dei comandi.From the Start menu, type Command Prompt in the search box, then in the list of results, click Command Prompt. Al prompt dei comandi digitare powershell_ise e fare clic su Invio.In the Command Prompt, type powershell_ise and click Enter.
  3. Aggiungere il proprio Account Azure.Add your Azure Account.

    1. Nel riquadro console digitare Add-AzureAccount e fare clic su Invio.In the Console Pane, type Add-AzureAccount and click Enter.
    2. Digitare l'indirizzo di posta elettronica associato alla sottoscrizione di Azure e fare clic su Continua.Type in the email address associated with your Azure subscription and click Continue.
    3. Digitare la password per la sottoscrizione di Azure.Type in the password for your Azure subscription.
    4. Fare clic su Accedi.Click Sign in.
  4. Il diagramma seguente identifica le parti importanti dell'ambiente di Scripting PowerShell di Azure.The following diagram identifies the important parts of your Azure PowerShell Scripting Environment.

    Diagramma per Azure PowerShell

Passaggio 3: Eseguire un processo Hive usando Cosmos DB e HDInsightStep 3: Run a Hive job using Cosmos DB and HDInsight

Importante

Tutte le variabili indicate da < > devono essere compilate usando le proprie impostazioni di configurazione.All variables indicated by < > must be filled in using your configuration settings.

  1. Impostare le variabili seguenti nel riquadro di script di PowerShell.Set the following variables in your PowerShell Script pane.

     # Provide Azure subscription name, the Azure Storage account and container that is used for the default HDInsight file system.
     $subscriptionName = "<SubscriptionName>"
     $storageAccountName = "<AzureStorageAccountName>"
     $containerName = "<AzureStorageContainerName>"
    
     # Provide the HDInsight cluster name where you want to run the Hive job.
     $clusterName = "<HDInsightClusterName>"
    
  2. Si inizia a costruire la stringa di query.Let's begin constructing your query string. Verrà scritta una query Hive che accetta i timestamp generati dal sistema di tutti i documenti (_ts) e ID univoci (_rid) da una raccolta di Azure Cosmos DB, calcola tutti i documenti in base al minuto e quindi archivia i risultati in una nuova raccolta di Azure Cosmos DB.We'll write a Hive query that takes all documents' system generated timestamps (_ts) and unique ids (_rid) from an Azure Cosmos DB collection, tallies all documents by the minute, and then stores the results back into a new Azure Cosmos DB collection.

    Creare prima di tutto una tabella Hive dalla raccolta Azure Cosmos DB.First, let's create a Hive table from our Azure Cosmos DB collection. Aggiungere il seguente frammento di codice nel riquadro di script di PowerShell dopo il frammento di codice da #1.Add the following code snippet to the PowerShell Script pane after the code snippet from #1. Assicurarsi di includere il parametro DocumentDB.query facoltativo per ridurre i documenti semplicemente a _ts e _rid.Make sure you include the optional DocumentDB.query parameter t trim our documents to just _ts and _rid.

    Nota

    La denominazione DocumentDB.inputCollections non è stata un errore.Naming DocumentDB.inputCollections was not a mistake. È effettivamente possibile aggiungere più raccolte come input:Yes, we allow adding multiple collections as an input:

     '*DocumentDB.inputCollections*' = '*\<DocumentDB Input Collection Name 1\>*,*\<DocumentDB Input Collection Name 2\>*' A1A</br> The collection names are separated without spaces, using only a single comma.
    
     # Create a Hive table using data from DocumentDB. Pass DocumentDB the query to filter transferred data to _rid and _ts.
     $queryStringPart1 = "drop table DocumentDB_timestamps; "  +
                         "create external table DocumentDB_timestamps(id string, ts BIGINT) "  +
                         "stored by 'com.microsoft.azure.documentdb.hive.DocumentDBStorageHandler' "  +
                         "tblproperties ( " +
                             "'DocumentDB.endpoint' = '<DocumentDB Endpoint>', " +
                             "'DocumentDB.key' = '<DocumentDB Primary Key>', " +
                             "'DocumentDB.db' = '<DocumentDB Database Name>', " +
                             "'DocumentDB.inputCollections' = '<DocumentDB Input Collection Name>', " +
                             "'DocumentDB.query' = 'SELECT r._rid AS id, r._ts AS ts FROM root r' ); "
    
  3. Successivamente, si passa alla creazione di una tabella Hive per la raccolta di output.Next, let's create a Hive table for the output collection. Le proprietà del documento di output saranno mese, giorno, ora, minuti e numero totale di occorrenze.The output document properties will be the month, day, hour, minute, and the total number of occurrences.

    Nota

    Ancora una volta, la denominazione di DocumentDB.outputCollections non è un errore.Yet again, naming DocumentDB.outputCollections was not a mistake. È effettivamente possibile aggiungere più raccolte come output:Yes, we allow adding multiple collections as an output:
    'DocumentDB.outputCollections' = '<DocumentDB Output Collection Name 1>,<DocumentDB Output Collection Name 2>''DocumentDB.outputCollections' = '<DocumentDB Output Collection Name 1>,<DocumentDB Output Collection Name 2>'
    I nomi di raccolta sono separati senza spazi, mediante una singola virgola.The collection names are separated without spaces, using only a single comma.
    Verrà eseguita la distribuzione round robin dei documenti tra più raccolte.Documents will be distributed round-robin across multiple collections. Un batch di documenti verrà archiviato in una raccolta, quindi un secondo batch dei documenti verrà archiviato nella raccolta successiva e così via.A batch of documents will be stored in one collection, then a second batch of documents will be stored in the next collection, and so forth.

    # Create a Hive table for the output data to DocumentDB.
    $queryStringPart2 = "drop table DocumentDB_analytics; " +
                          "create external table DocumentDB_analytics(Month INT, Day INT, Hour INT, Minute INT, Total INT) " +
                          "stored by 'com.microsoft.azure.documentdb.hive.DocumentDBStorageHandler' " +
                          "tblproperties ( " +
                              "'DocumentDB.endpoint' = '<DocumentDB Endpoint>', " +
                              "'DocumentDB.key' = '<DocumentDB Primary Key>', " +  
                              "'DocumentDB.db' = '<DocumentDB Database Name>', " +
                              "'DocumentDB.outputCollections' = '<DocumentDB Output Collection Name>' ); "
    
  4. Infine, si calcoleranno i documenti per mese, giorno, ora e minuto e si inseriranno i risultati nuovamente nell'output della tabella Hive.Finally, let's tally the documents by month, day, hour, and minute and insert the results back into the output Hive table.

     # GROUP BY minute, COUNT entries for each, INSERT INTO output Hive table.
     $queryStringPart3 = "INSERT INTO table DocumentDB_analytics " +
                           "SELECT month(from_unixtime(ts)) as Month, day(from_unixtime(ts)) as Day, " +
                           "hour(from_unixtime(ts)) as Hour, minute(from_unixtime(ts)) as Minute, " +
                           "COUNT(*) AS Total " +
                           "FROM DocumentDB_timestamps " +
                           "GROUP BY month(from_unixtime(ts)), day(from_unixtime(ts)), " +
                           "hour(from_unixtime(ts)) , minute(from_unixtime(ts)); "
    
  5. Aggiungere il frammento di script seguente per creare una definizione processo Hive dalla query precedente.Add the following script snippet to create a Hive job definition from the previous query.

     # Create a Hive job definition.
     $queryString = $queryStringPart1 + $queryStringPart2 + $queryStringPart3
     $hiveJobDefinition = New-AzureHDInsightHiveJobDefinition -Query $queryString
    

    È anche possibile usare l'opzione -File per specificare un file di script HiveQL in HDFS.You can also use the -File switch to specify a HiveQL script file on HDFS.

  6. Aggiungere il frammento seguente per salvare l'ora di inizio e inviare il processo Hive.Add the following snippet to save the start time and submit the Hive job.

     # Save the start time and submit the job to the cluster.
     $startTime = Get-Date
     Select-AzureSubscription $subscriptionName
     $hiveJob = Start-AzureHDInsightJob -Cluster $clusterName -JobDefinition $hiveJobDefinition
    
  7. Aggiungere quanto segue per attendere il completamento del processo Hive.Add the following to wait for the Hive job to complete.

     # Wait for the Hive job to complete.
     Wait-AzureHDInsightJob -Job $hiveJob -WaitTimeoutInSeconds 3600
    
  8. Aggiungere il comando seguente per stampare l'output standard e l'ora di inizio e fine.Add the following to print the standard output and the start and end times.

     # Print the standard error, the standard output of the Hive job, and the start and end time.
     $endTime = Get-Date
     Get-AzureHDInsightJobOutput -Cluster $clusterName -JobId $hiveJob.JobId -StandardOutput
     Write-Host "Start: " $startTime ", End: " $endTime -ForegroundColor Green
    
  9. Eseguire il nuovo script.Run your new script! Fare clic sul pulsante di esecuzione verde.Click the green execute button.
  10. Verificare i risultati.Check the results. Accedere al Portale di Azure.Sign into the Azure Portal.

    1. Fare clic su Sfoglia nel riquadro a sinistra.Click Browse on the left-side panel.
    2. Fare clic su tutto in alto a destra del riquadro di esplorazione.Click everything at the top-right of the browse panel.
    3. Trovare e fare clic su Account Azure Cosmos DB.Find and click Azure Cosmos DB Accounts.
    4. Trovare quindi l'account Azure Cosmos DB, il database Azure Cosmos DB e la raccolta Azure Cosmos DB associati alla raccolta di output specificata nella query Hive.Next, find your Azure Cosmos DB Account, then Azure Cosmos DB Database and your Azure Cosmos DB Collection associated with the output collection specified in your Hive query.
    5. Infine, fare clic su Esplora documenti sotto Strumenti di sviluppo.Finally, click Document Explorer underneath Developer Tools.

    Verranno visualizzati i risultati della query Hive.You will see the results of your Hive query.

    Risultati della query relativa alla tabella

Passaggio 4: Eseguire un processo Pig usando Cosmos DB e HDInsightStep 4: Run a Pig job using Cosmos DB and HDInsight

Importante

Tutte le variabili indicate da < > devono essere compilate usando le proprie impostazioni di configurazione.All variables indicated by < > must be filled in using your configuration settings.

  1. Impostare le variabili seguenti nel riquadro di script di PowerShell.Set the following variables in your PowerShell Script pane.

     # Provide Azure subscription name.
     $subscriptionName = "Azure Subscription Name"
    
     # Provide HDInsight cluster name where you want to run the Pig job.
     $clusterName = "Azure HDInsight Cluster Name"
    
  2. Si inizia a costruire la stringa di query.Let's begin constructing your query string. Verrà scritta una query Pig che accetta i timestamp generati dal sistema di tutti i documenti (_ts) e ID univoci (_rid) da una raccolta di Azure Cosmos DB, calcola tutti i documenti in base al minuto e quindi archivia i risultati in una nuova raccolta di Azure Cosmos DB.We'll write a Pig query that takes all documents' system generated timestamps (_ts) and unique ids (_rid) from an Azure Cosmos DB collection, tallies all documents by the minute, and then stores the results back into a new Azure Cosmos DB collection.

    In primo luogo, caricare i documenti da Cosmos DB in HDInsight.First, load documents from Cosmos DB into HDInsight. Aggiungere il seguente frammento di codice nel riquadro di script di PowerShell dopo il frammento di codice da #1.Add the following code snippet to the PowerShell Script pane after the code snippet from #1. Assicurarsi di aggiungere una query di DocumentDB al parametro di query DocumentDB facoltativo per ridurre i documenti semplicemente a _ts e _rid.Make sure to add a DocumentDB query to the optional DocumentDB query parameter to trim our documents to just _ts and _rid.

    Nota

    È effettivamente possibile aggiungere più raccolte come input:Yes, we allow adding multiple collections as an input:
    '<DocumentDB Input Collection Name 1>,<DocumentDB Input Collection Name 2>''<DocumentDB Input Collection Name 1>,<DocumentDB Input Collection Name 2>'
    I nomi di raccolta sono separati senza spazi, mediante una singola virgola.The collection names are separated without spaces, using only a single comma.

    Verrà eseguita la distribuzione round robin dei documenti tra più raccolte.Documents will be distributed round-robin across multiple collections. Un batch di documenti verrà archiviato in una raccolta, quindi un secondo batch dei documenti verrà archiviato nella raccolta successiva e così via.A batch of documents will be stored in one collection, then a second batch of documents will be stored in the next collection, and so forth.

     # Load data from Cosmos DB. Pass DocumentDB query to filter transferred data to _rid and _ts.
     $queryStringPart1 = "DocumentDB_timestamps = LOAD '<DocumentDB Endpoint>' USING com.microsoft.azure.documentdb.pig.DocumentDBLoader( " +
                                                     "'<DocumentDB Primary Key>', " +
                                                     "'<DocumentDB Database Name>', " +
                                                     "'<DocumentDB Input Collection Name>', " +
                                                     "'SELECT r._rid AS id, r._ts AS ts FROM root r' ); "
    
  3. Successivamente, verranno calcolati i documenti in base a mese, giorno, ora, minuti e numero totale di occorrenze.Next, let's tally the documents by the month, day, hour, minute, and the total number of occurrences.

    # GROUP BY minute and COUNT entries for each.
    $queryStringPart2 = "timestamp_record = FOREACH DocumentDB_timestamps GENERATE `$0#'id' as id:int, ToDate((long)(`$0#'ts') * 1000) as timestamp:datetime; " +
                        "by_minute = GROUP timestamp_record BY (GetYear(timestamp), GetMonth(timestamp), GetDay(timestamp), GetHour(timestamp), GetMinute(timestamp)); " +
                        "by_minute_count = FOREACH by_minute GENERATE FLATTEN(group) as (Year:int, Month:int, Day:int, Hour:int, Minute:int), COUNT(timestamp_record) as Total:int; "
    
  4. Infine, si archivieranno i risultati nella nuova raccolta di output.Finally, let's store the results into our new output collection.

    Nota

    È effettivamente possibile aggiungere più raccolte come output:Yes, we allow adding multiple collections as an output:
    '<DocumentDB Output Collection Name 1>,<DocumentDB Output Collection Name 2>''<DocumentDB Output Collection Name 1>,<DocumentDB Output Collection Name 2>'
    I nomi di raccolta sono separati senza spazi, mediante una singola virgola.The collection names are separated without spaces, using only a single comma.
    Verrà eseguita la distribuzione round robin dei documenti tra più raccolte.Documents will be distributed round-robin across the multiple collections. Un batch di documenti verrà archiviato in una raccolta, quindi un secondo batch dei documenti verrà archiviato nella raccolta successiva e così via.A batch of documents will be stored in one collection, then a second batch of documents will be stored in the next collection, and so forth.

     # Store output data to Cosmos DB.
     $queryStringPart3 = "STORE by_minute_count INTO '<DocumentDB Endpoint>' " +
                         "USING com.microsoft.azure.documentdb.pig.DocumentDBStorage( " +
                             "'<DocumentDB Primary Key>', " +
                             "'<DocumentDB Database Name>', " +
                             "'<DocumentDB Output Collection Name>'); "
    
  5. Aggiungere il frammento di script seguente per creare una definizione processo Pig dalla query precedente.Add the following script snippet to create a Pig job definition from the previous query.

     # Create a Pig job definition.
     $queryString = $queryStringPart1 + $queryStringPart2 + $queryStringPart3
     $pigJobDefinition = New-AzureHDInsightPigJobDefinition -Query $queryString -StatusFolder $statusFolder
    

    È anche possibile usare l'opzione -File per specificare un file di script Pig in HDFS.You can also use the -File switch to specify a Pig script file on HDFS.

  6. Aggiungere il frammento seguente per salvare l'ora di inizio e inviare il processo Pig.Add the following snippet to save the start time and submit the Pig job.

     # Save the start time and submit the job to the cluster.
     $startTime = Get-Date
     Select-AzureSubscription $subscriptionName
     $pigJob = Start-AzureHDInsightJob -Cluster $clusterName -JobDefinition $pigJobDefinition
    
  7. Aggiungere quanto segue per attendere il completamento del processo Pig.Add the following to wait for the Pig job to complete.

     # Wait for the Pig job to complete.
     Wait-AzureHDInsightJob -Job $pigJob -WaitTimeoutInSeconds 3600
    
  8. Aggiungere il comando seguente per stampare l'output standard e l'ora di inizio e fine.Add the following to print the standard output and the start and end times.

     # Print the standard error, the standard output of the Hive job, and the start and end time.
     $endTime = Get-Date
     Get-AzureHDInsightJobOutput -Cluster $clusterName -JobId $pigJob.JobId -StandardOutput
     Write-Host "Start: " $startTime ", End: " $endTime -ForegroundColor Green
    
  9. Eseguire il nuovo script.Run your new script! Fare clic sul pulsante di esecuzione verde.Click the green execute button.
  10. Verificare i risultati.Check the results. Accedere al Portale di Azure.Sign into the Azure Portal.

    1. Fare clic su Sfoglia nel riquadro a sinistra.Click Browse on the left-side panel.
    2. Fare clic su tutto in alto a destra del riquadro di esplorazione.Click everything at the top-right of the browse panel.
    3. Trovare e fare clic su Account Azure Cosmos DB.Find and click Azure Cosmos DB Accounts.
    4. Trovare quindi l'account Azure Cosmos DB, il database Azure Cosmos DB e la raccolta Azure Cosmos DB associati alla raccolta di output specificata nella query Pig.Next, find your Azure Cosmos DB Account, then Azure Cosmos DB Database and your Azure Cosmos DB Collection associated with the output collection specified in your Pig query.
    5. Infine, fare clic su Esplora documenti sotto Strumenti di sviluppo.Finally, click Document Explorer underneath Developer Tools.

    Verranno visualizzati i risultati della query Pig.You will see the results of your Pig query.

    Risultati della query SQL

Passaggio 5: Eseguire un processo MapReduce usando Azure Cosmos DB e HDInsightStep 5: Run a MapReduce job using Azure Cosmos DB and HDInsight

  1. Impostare le variabili seguenti nel riquadro di script di PowerShell.Set the following variables in your PowerShell Script pane.

     $subscriptionName = "<SubscriptionName>"   # Azure subscription name
     $clusterName = "<ClusterName>"             # HDInsight cluster name
    
  2. È possibile eseguire un processo MapReduce che calcola il numero di occorrenze per ogni proprietà di documento dalla raccolta Azure Cosmos DB.We'll execute a MapReduce job that tallies the number of occurrences for each Document property from your Azure Cosmos DB collection. Aggiungere questo frammento di script dopo il frammento di codice riportato sopra.Add this script snippet after the snippet above.

     # Define the MapReduce job.
     $TallyPropertiesJobDefinition = New-AzureHDInsightMapReduceJobDefinition -JarFile "wasb:///example/jars/TallyProperties-v01.jar" -ClassName "TallyProperties" -Arguments "<DocumentDB Endpoint>","<DocumentDB Primary Key>", "<DocumentDB Database Name>","<DocumentDB Input Collection Name>","<DocumentDB Output Collection Name>","<[Optional] DocumentDB Query>"
    

    Nota

    Il file TallyProperties-v01.jar viene fornito con l'installazione personalizzata del connettore Hadoop di Cosmos DB.TallyProperties-v01.jar comes with the custom installation of the Cosmos DB Hadoop Connector.

  3. Per inviare il processo MapReduce, aggiungere il comando seguente.Add the following command to submit the MapReduce job.

     # Save the start time and submit the job.
     $startTime = Get-Date
     Select-AzureSubscription $subscriptionName
     $TallyPropertiesJob = Start-AzureHDInsightJob -Cluster $clusterName -JobDefinition $TallyPropertiesJobDefinition | Wait-AzureHDInsightJob -WaitTimeoutInSeconds 3600  
    

    Oltre alla definizione del processo MapReduce, è necessario specificare anche il nome del cluster HDInsight in cui si desidera eseguire il processo MapReduce e le credenziali.In addition to the MapReduce job definition, you also provide the HDInsight cluster name where you want to run the MapReduce job, and the credentials. Start-AzureHDInsightJob è una chiamata non sincronizzata.The Start-AzureHDInsightJob is an asynchronized call. Per verificare il completamento del processo, usare il cmdlet Wait-AzureHDInsightJob .To check the completion of the job, use the Wait-AzureHDInsightJob cmdlet.

  4. Per controllare se si sono verificati errori nel processo MapReduce, aggiungere il comando seguente:Add the following command to check any errors with running the MapReduce job.

     # Get the job output and print the start and end time.
     $endTime = Get-Date
     Get-AzureHDInsightJobOutput -Cluster $clusterName -JobId $TallyPropertiesJob.JobId -StandardError
     Write-Host "Start: " $startTime ", End: " $endTime -ForegroundColor Green
    
  5. Eseguire il nuovo script.Run your new script! Fare clic sul pulsante di esecuzione verde.Click the green execute button.
  6. Verificare i risultati.Check the results. Accedere al Portale di Azure.Sign into the Azure Portal.

    1. Fare clic su Sfoglia nel riquadro a sinistra.Click Browse on the left-side panel.
    2. Fare clic su tutto in alto a destra del riquadro di esplorazione.Click everything at the top-right of the browse panel.
    3. Trovare e fare clic su Account Azure Cosmos DB.Find and click Azure Cosmos DB Accounts.
    4. Trovare quindi l'account Azure Cosmos DB, il database Azure Cosmos DB e la raccolta Azure Cosmos DB associati alla raccolta di output specificata nel processo MapReduce.Next, find your Azure Cosmos DB Account, then Azure Cosmos DB Database and your Azure Cosmos DB Collection associated with the output collection specified in your MapReduce job.
    5. Infine, fare clic su Esplora documenti sotto Strumenti di sviluppo.Finally, click Document Explorer underneath Developer Tools.

      Verranno visualizzati i risultati del processo MapReduce.You will see the results of your MapReduce job.

      Risultati della query MapReduce

Passaggi successiviNext Steps

Congratulazioni.Congratulations! Sono stati eseguiti i primi processi Hive, Pig e MapReduce usando Azure Cosmos DB e HDInsight.You just ran your first Hive, Pig, and MapReduce jobs using Azure Cosmos DB and HDInsight.

Abbiamo reso Open Source il connettore Hadoop.We have open sourced our Hadoop Connector. Se si è interessati, è possibile contribuire in GitHub.If you're interested, you can contribute on GitHub.

Per altre informazioni, vedere gli articoli seguenti:To learn more, see the following articles: