Usare lo streaming strutturato Spark con Kafka in HDInsightUse Spark Structured Streaming with Kafka on HDInsight

Informazioni su come usare lo streaming strutturato Spark per leggere i dati da Apache Kafka in Azure HDInsight.Learn how to use Spark Structured Streaming to read data from Apache Kafka on Azure HDInsight.

Lo streaming strutturato Spark è un motore di elaborazione del flusso basato su Spark SQL.Spark structured streaming is a stream processing engine built on Spark SQL. Consente di esprimere i calcoli di streaming come il calcolo di batch in dati statici.It allows you to express streaming computations the same as batch computation on static data. Per altre informazioni sullo streaming strutturato, vedere la pagina Structured Streaming Programming Guide [Alpha] di Apache.org.For more information on Structured Streaming, see the Structured Streaming Programming Guide [Alpha] at Apache.org.

Importante

In questo esempio viene usato Spark 2.1 in HDInsight 3.6.This example used Spark 2.1 on HDInsight 3.6. Lo streaming strutturato è considerato alfa in Spark 2.1.Structured Streaming is considered alpha on Spark 2.1.

La procedura descritta in questo documento permette di creare un gruppo di risorse di Azure che contiene sia un cluster Spark in HDInsight che un cluster Kafka in HDInsight.The steps in this document create an Azure resource group that contains both a Spark on HDInsight and a Kafka on HDInsight cluster. Entrambi questi cluster si trovano all'interno di una rete virtuale di Azure, che consente al cluster Spark di comunicare direttamente con il cluster Kafka.These clusters are both located within an Azure Virtual Network, which allows the Spark cluster to directly communicate with the Kafka cluster.

Al termine della procedura descritta in questo documento, eliminare i cluster per evitare costi supplementari.When you are done with the steps in this document, remember to delete the clusters to avoid excess charges.

Creare i clusterCreate the clusters

Apache Kafka in HDInsight non fornisce l'accesso ai broker Kafka tramite Internet pubblico.Apache Kafka on HDInsight does not provide access to the Kafka brokers over the public internet. Tutto ciò che comunica con Kafka deve trovarsi nella stessa rete virtuale di Azure dei nodi del cluster Kafka.Anything that talks to Kafka must be in the same Azure virtual network as the nodes in the Kafka cluster. Per questo esempio, i cluster Spark e Kafka si trovano entrambi in una rete virtuale di Azure.For this example, both the Kafka and Spark clusters are located in an Azure virtual network. Il diagramma seguente illustra il flusso delle comunicazioni tra i cluster:The following diagram shows how communication flows between the clusters:

Diagramma dei cluster Spark e Kafka in una rete virtuale di Azure

Nota

Il servizio Kafka è limitato alle comunicazioni all'interno della rete virtuale.The Kafka service is limited to communication within the virtual network. Altri servizi nel cluster, ad esempio SSH e Ambari, sono accessibili tramite Internet.Other services on the cluster, such as SSH and Ambari, can be accessed over the internet. Per altre informazioni sulle porte pubbliche disponibili con HDInsight, vedere Porte e URI usati da HDInsight.For more information on the public ports available with HDInsight, see Ports and URIs used by HDInsight.

Anche se è possibile creare manualmente cluster Spark e Kafka e una rete virtuale di Azure, è più semplice usare un modello di Azure Resource Manager.While you can create an Azure virtual network, Kafka, and Spark clusters manually, it's easier to use an Azure Resource Manager template. Seguire questa procedura per distribuire cluster Spark e Kafka e una rete virtuale di Azure nella sottoscrizione di Azure.Use the following steps to deploy an Azure virtual network, Kafka, and Spark clusters to your Azure subscription.

  1. Usare il pulsante seguente per accedere ad Azure e aprire il modello nel portale di Azure.Use the following button to sign in to Azure and open the template in the Azure portal.

    Deploy to Azure

    Il modello di Azure Resource Manager è disponibile su https://hditutorialdata.blob.core.windows.net/armtemplates/create-linux-based-kafka-spark-cluster-in-vnet-v4.1.json.The Azure Resource Manager template is located at https://hditutorialdata.blob.core.windows.net/armtemplates/create-linux-based-kafka-spark-cluster-in-vnet-v4.1.json.

    Questo modello crea le risorse seguenti:This template creates the following resources:

    • Kafka nel cluster HDInsight 3.6.A Kafka on HDInsight 3.6 cluster.
    • Spark nel cluster HDInsight 3.6.A Spark on HDInsight 3.6 cluster.
    • Una rete virtuale Azure contenente i cluster HDInsight.An Azure Virtual Network, which contains the HDInsight clusters.

      Importante

      Il notebook di streaming strutturato che è stato usato in questo esempio richiede Spark in HDInsight 3.6.The structured streaming notebook used in this example requires Spark on HDInsight 3.6. Se si usa una versione precedente di Spark in HDInsight, si ricevono errori durante l'uso del notebook.If you use an earlier version of Spark on HDInsight, you receive errors when using the notebook.

  2. Usare le informazioni seguenti per popolare le voci nel pannello Distribuzione personalizzata:Use the following information to populate the entries on the Custom deployment section:

    Distribuzione personalizzata di HDInsight

    • Gruppo di risorse: creare un gruppo o selezionarne uno esistente.Resource group: Create a group or select an existing one. Questo gruppo contiene il cluster HDInsight.This group contains the HDInsight cluster.

    • Località: scegliere una località geograficamente vicina.Location: Select a location geographically close to you.

    • Base Cluster Name (Nome di base del cluster): questo valore viene usato come nome di base per i cluster Spark e Kafka.Base Cluster Name: This value is used as the base name for the Spark and Kafka clusters. Ad esempio, se si immette hdi viene creato un cluster Spark denominato spark-hdi e un cluster Kafka denominato kafka-hdi.For example, entering hdi creates a Spark cluster named spark-hdi__ and a Kafka cluster named kafka-hdi.

    • Cluster Login User Name (Nome utente di accesso del cluster): nome utente amministratore per i cluster Spark e Kafka.Cluster Login User Name: The admin user name for the Spark and Kafka clusters.

    • Cluster Login Password (Password di accesso del cluster): password amministratore per i cluster Spark e Kafka.Cluster Login Password: The admin user password for the Spark and Kafka clusters.

    • SSH User Name (Nome utente SSH): utente SSH da creare per i cluster Spark e Kafka.SSH User Name: The SSH user to create for the Spark and Kafka clusters.

    • SSH Password (Password SSH): password dell'utente SSH per i cluster Spark e Kafka.SSH Password: The password for the SSH user for the Spark and Kafka clusters.

  3. Leggere le Condizioni e quindi selezionare Accetto le condizioni riportate sopra.Read the Terms and Conditions, and then select I agree to the terms and conditions stated above.

  4. Selezionare infine Aggiungi al dashboard e quindi Acquista.Finally, check Pin to dashboard and then select Purchase. La creazione dei cluster richiede circa 20 minuti.It takes about 20 minutes to create the clusters.

Dopo avere create le risorse, verrà visualizzata una pagina di riepilogo.Once the resources have been created, a summary page is displayed.

Informazioni sul gruppo di risorse per la rete virtuale e i cluster

Importante

Si noti che i nomi dei cluster HDInsight sono spark-BASENAME e kafka-BASENAME, dove BASENAME è il nome specificato per il modello.Notice that the names of the HDInsight clusters are spark-BASENAME and kafka-BASENAME, where BASENAME is the name you provided to the template. Questi nomi verranno usati nei passaggi successivi per la connessione ai cluster.You use these names in later steps when connecting to the clusters.

Recupero dei broker KafkaGet the Kafka brokers

Il codice in questo esempio consente di connettersi agli host dei broker Kafka nel cluster Kafka.The code in this example connects to Kafka broker hosts in the Kafka cluster. Per trovare l'indirizzo dei due host broker Kafka, usare l'esempio di PowerShell o Bash seguente:To find the addresses of the two Kafka broker hosts, use the following PowerShell or Bash example:

$creds = Get-Credential -UserName "admin" -Message "Enter the HDInsight login"
$clusterName = Read-Host -Prompt "Enter the Kafka cluster name"
$resp = Invoke-WebRequest -Uri "https://$clusterName.azurehdinsight.net/api/v1/clusters/$clusterName/services/KAFKA/components/KAFKA_BROKER" `
    -Credential $creds
$respObj = ConvertFrom-Json $resp.Content
$brokerHosts = $respObj.host_components.HostRoles.host_name[0..1]
($brokerHosts -join ":9092,") + ":9092"
curl -u admin -G "https://$CLUSTERNAME.azurehdinsight.net/api/v1/clusters/$CLUSTERNAME/services/KAFKA/components/KAFKA_BROKER" | jq -r '["\(.host_components[].HostRoles.host_name):9092"] | join(",")' | cut -d',' -f1,2

Quando richiesto, immettere la password dell'account (admin) di accesso al clusterWhen prompted, enter the password for the cluster login (admin) account

Nota

Questo esempio prevede che $CLUSTERNAME contenga il nome del cluster Kafka.This example expects $CLUSTERNAME to contain the name of the Kafka cluster.

Questo esempio usa l'utilità jq per analizzare i dati del documento JSON.This example uses the jq utility to parse data out of the JSON document.

L'output è simile al testo seguente:The output is similar to the following text:

wn0-kafka.0owcbllr5hze3hxdja3mqlrhhe.ex.internal.cloudapp.net:9092,wn1-kafka.0owcbllr5hze3hxdja3mqlrhhe.ex.internal.cloudapp.net:9092

Salvare queste informazioni, perché vengono usate nelle sezioni seguenti di questo documento.Save this information, as it is used in the following sections of this document.

Ottenere i notebookGet the notebooks

Il codice per l'esempio illustrato in questo documento è disponibile su https://github.com/Azure-Samples/hdinsight-spark-kafka-structured-streaming.The code for the example described in this document is available at https://github.com/Azure-Samples/hdinsight-spark-kafka-structured-streaming.

Caricare i notebookUpload the notebooks

Usare i passaggi seguenti per caricare i notebook dal progetto a Spark nel cluster HDInsight:Use the following steps to upload the notebooks from the project to your Spark on HDInsight cluster:

  1. Nel Web browser connettersi al notebook Jupyter nel cluster Spark.In your web browser, connect to the Jupyter notebook on your Spark cluster. Nell'URL seguente sostituire CLUSTERNAME con il nome del cluster Kafka:In the following URL, replace CLUSTERNAME with the name of your Kafka cluster:

     https://CLUSTERNAME.azurehdinsight.net/jupyter
    

    Quando richiesto, immettere l'account di accesso (amministratore) e la password usati durante la creazione del cluster.When prompted, enter the cluster login (admin) and password used when you created the cluster.

  2. Usare il pulsante Carica in alto a destra nella pagina per caricare il file Stream-Tweets-To_Kafka.ipynb nel cluster.From the upper right side of the page, use the Upload button to upload the Stream-Tweets-To_Kafka.ipynb file to the cluster. Selezionare Apri per avviare il caricamento.Select Open to start the upload.

    Usare il pulsante di caricamento per selezionare e caricare un notebook

    Selezionare il file KafkaStreaming.ipynb

  3. Trovare la voce Stream-Tweets-To_Kafka.ipynb nell'elenco dei notebook e selezionare il pulsante Carica accanto.Find the Stream-Tweets-To_Kafka.ipynb entry in the list of notebooks, and select Upload button beside it.

    Per caricare Notebook, usare il pulsante di caricamento accanto alla voce KafkaStreaming.ipynb

  4. Ripetere i passaggi da 1 a 3 per caricare il notebook Spark-Structured-Streaming-From-Kafka.ipynb.Repeat steps 1-3 to load the Spark-Structured-Streaming-From-Kafka.ipynb notebook.

Caricamento di tweet in KafkaLoad tweets into Kafka

Dopo che i file sono stati caricati, selezionare la voce Stream-Tweets-To_Kafka.ipynb per aprire il notebook.Once the files have been uploaded, select the Stream-Tweets-To_Kafka.ipynb entry to open the notebook. Seguire i passaggi del notebook per caricare i tweet in Kafka.Follow the steps in the notebook to load tweets into Kafka.

Elaborazione dei tweet con lo streaming strutturato SparkProcess tweets using Spark Structured Streaming

Dalla home page del notebook Jupyter selezionare la voce Spark-Structured-Streaming-From-Kafka.ipynb.From the Jupyter Notebook home page, select the Spark-Structured-Streaming-From-Kafka.ipynb entry. Seguire i passaggi del notebook per caricare i tweet di Kafka tramite lo streaming strutturato Spark.Follow the steps in the notebook to load tweets from Kafka using Spark Structured Streaming.

Passaggi successiviNext steps

Ora che si è appreso come usare lo streaming strutturato Spark, vedere i documenti seguenti per trovare altre informazioni su come lavorare con Spark e Kafka:Now that you have learned how to use Spark Structured Streaming, see the following documents to learn more about working with Spark and Kafka: