Kurz: Použití strukturovaného streamování Apache Sparku s využitím Apache Kafka v HDInsightTutorial: Use Apache Spark Structured Streaming with Apache Kafka on HDInsight

Tento kurz ukazuje, jak používat strukturovaného streamování Apache Sparku ke čtení a zápisu dat pomocí Apache Kafka v Azure HDInsight.This tutorial demonstrates how to use Apache Spark Structured Streaming to read and write data with Apache Kafka on Azure HDInsight.

Strukturované streamování Sparku je modul pro zpracování datových proudů založený na Spark SQL.Spark structured streaming is a stream processing engine built on Spark SQL. Umožňuje zrychlit streamované i dávkové výpočty se statickými daty.It allows you to express streaming computations the same as batch computation on static data.

V tomto kurzu se naučíte:In this tutorial, you learn how to:

  • Strukturované streamování s využitím systému KafkaStructured Streaming with Kafka
  • Vytvoření clusterů Kafka a SparkCreate Kafka and Spark clusters
  • Nahrání poznámkového bloku do SparkuUpload the notebook to Spark
  • Použití poznámkového blokuUse the notebook
  • Vyčištění prostředkůClean up resources

Jakmile budete hotovi s kroky v tomto dokumentu, nezapomeňte clustery odstranit, abyste se vyhnuli nadbytečným poplatkům.When you are done with the steps in this document, remember to delete the clusters to avoid excess charges.

PožadavkyPrerequisites

Důležité

Kroky v tomto dokumentu vyžadují skupinu prostředků Azure obsahující cluster Spark ve službě HDInsight i cluster Kafka ve službě HDInsight.The steps in this document require an Azure resource group that contains both a Spark on HDInsight and a Kafka on HDInsight cluster. Oba tyto clustery se nacházejí ve virtuální síti Azure, což umožňuje přímou komunikaci clusteru Spark s clusterem Kafka.These clusters are both located within an Azure Virtual Network, which allows the Spark cluster to directly communicate with the Kafka cluster.

Pro usnadnění práce tento dokument odkazuje na šablonu, která může vytvořit všechny požadované prostředky Azure.For your convenience, this document links to a template that can create all the required Azure resources.

Další informace o použití služby HDInsight ve virtuální síti najdete v dokumentu Rozšíření služby HDInsight pomocí virtuální sítě.For more information on using HDInsight in a virtual network, see the Extend HDInsight using a virtual network document.

Strukturované streamování s využitím Apache KafkaStructured Streaming with Apache Kafka

Strukturované streamování Sparku je modul pro zpracování datových proudů založený na modulu Spark SQL.Spark Structured Streaming is a stream processing engine built on the Spark SQL engine. Při použití strukturovaného streamování můžete psát streamovací dotazy stejným způsobem jako dávkové dotazy.When using Structured Streaming, you can write streaming queries the same way that you write batch queries.

Následující fragmenty kódu ukazují čtení ze systému Kafka a uložení do souboru.The following code snippets demonstrate reading from Kafka and storing to file. První z nich je dávková operace, zatímco druhá je operace streamování:The first one is a batch operation, while the second one is a streaming operation:

// Read a batch from Kafka
val kafkaDF = spark.read.format("kafka")
                .option("kafka.bootstrap.servers", kafkaBrokers)
                .option("subscribe", kafkaTopic)
                .option("startingOffsets", "earliest")
                .load()
// Select data and write to file
kafkaDF.select(from_json(col("value").cast("string"), schema) as "trip")
                .write
                .format("parquet")
                .option("path","/example/batchtripdata")
                .option("checkpointLocation", "/batchcheckpoint")
                .save()
// Stream from Kafka
val kafkaStreamDF = spark.readStream.format("kafka")
                .option("kafka.bootstrap.servers", kafkaBrokers)
                .option("subscribe", kafkaTopic)
                .option("startingOffsets", "earliest")
                .load()
// Select data from the stream and write to file
kafkaStreamDF.select(from_json(col("value").cast("string"), schema) as "trip")
                .writeStream
                .format("parquet")
                .option("path","/example/streamingtripdata")
                .option("checkpointLocation", "/streamcheckpoint")
                .start.awaitTermination(30000)

V obou fragmentech kódu se data čtou ze systému Kafka a zapisují do souboru.In both snippets, data is read from Kafka and written to file. Rozdíly mezi příklady jsou následující:The differences between the examples are:

BatchBatch StreamováníStreaming
read readStream
write writeStream
save start

V operaci streamování se také používá awaitTermination(30000) a díky tomu se stream zastaví za 30 000 ms.The streaming operation also uses awaitTermination(30000), which stops the stream after 30000 ms.

Pokud chcete použít strukturované streamování s využitím systému Kafka, váš projekt musí obsahovat závislost na balíčku org.apache.spark : spark-sql-kafka-0-10_2.11.To use Structured Streaming with Kafka, your project must have a dependency on the org.apache.spark : spark-sql-kafka-0-10_2.11 package. Verze tohoto balíčku musí odpovídat verzi Sparku ve službě HDInsight.The version of this package should match the version of Spark on HDInsight. Pro Spark 2.2.0 (k dispozici ve službě HDInsight 3.6) můžete najít informace o závislostech pro různé typy projektů na adrese https://search.maven.org/#artifactdetails%7Corg.apache.spark%7Cspark-sql-kafka-0-10_2.11%7C2.2.0%7Cjar.For Spark 2.2.0 (available in HDInsight 3.6), you can find the dependency information for different project types at https://search.maven.org/#artifactdetails%7Corg.apache.spark%7Cspark-sql-kafka-0-10_2.11%7C2.2.0%7Cjar.

Pro Jupyter Notebook, který je součástí tohoto kurzu, načte tuto závislost balíčku následující buňka:For the Jupyter Notebook provided with this tutorial, the following cell loads this package dependency:

%%configure -f
{
    "conf": {
        "spark.jars.packages": "org.apache.spark:spark-sql-kafka-0-10_2.11:2.2.0",
        "spark.jars.excludes": "org.scala-lang:scala-reflect,org.apache.spark:spark-tags_2.11"
    }
}

Vytvoření clusterůCreate the clusters

Apache Kafka ve službě HDInsight neposkytuje přístup ke zprostředkovatelům systému Kafka přes veřejný internet.Apache Kafka on HDInsight does not provide access to the Kafka brokers over the public internet. Cokoli, co využívá systém Kafka, musí být ve stejné virtuální síti Azure.Anything that uses Kafka must be in the same Azure virtual network. V tomto kurzu se clustery Kafka i Spark nacházejí ve stejné virtuální síti Azure.In this tutorial, both the Kafka and Spark clusters are located in the same Azure virtual network.

Následující diagram znázorňuje tok komunikace mezi Sparkem a systémem Kafka:The following diagram shows how communication flows between Spark and Kafka:

Diagram clusterů Spark a Kafka ve virtuální síti Azure

Poznámka

Komunikace služby Kafka je omezená na virtuální síť.The Kafka service is limited to communication within the virtual network. Další služby v clusteru, jako jsou SSH a Ambari, jsou přístupné přes internet.Other services on the cluster, such as SSH and Ambari, can be accessed over the internet. Další informace o veřejných portech dostupných ve službě HDInsight najdete v tématu Porty a identifikátory URI používané službou HDInsight.For more information on the public ports available with HDInsight, see Ports and URIs used by HDInsight.

K vytvoření virtuální sítě Azure a následnému vytvoření clusterů Kafka a Spark v rámci této sítě použijte následující postup:To create an Azure Virtual Network, and then create the Kafka and Spark clusters within it, use the following steps:

  1. Pomocí následujícího tlačítka se přihlaste do Azure a otevřete šablonu na webu Azure Portal.Use the following button to sign in to Azure and open the template in the Azure portal.

    Deploy to Azure

    Šablona Azure Resource Manageru se nachází na adrese https://raw.githubusercontent.com/Azure-Samples/hdinsight-spark-kafka-structured-streaming/master/azuredeploy.json.The Azure Resource Manager template is located at https://raw.githubusercontent.com/Azure-Samples/hdinsight-spark-kafka-structured-streaming/master/azuredeploy.json.

    Tato šablona vytvoří následující prostředky:This template creates the following resources:

    • Cluster Kafka ve službě HDInsight 3.6.A Kafka on HDInsight 3.6 cluster.

    • Cluster Spark 2.2.0 ve službě HDInsight 3.6.A Spark 2.2.0 on HDInsight 3.6 cluster.

    • Virtuální síť Azure obsahující clustery HDInsight.An Azure Virtual Network, which contains the HDInsight clusters.

      Důležité

      Poznámkový blok strukturovaného streamování použitý v tomto kurzu vyžaduje Spark 2.2.0 ve službě HDInsight 3.6.The structured streaming notebook used in this tutorial requires Spark 2.2.0 on HDInsight 3.6. Pokud používáte starší verzi Sparku ve službě HDInsight, při použití poznámkového bloku se zobrazí chyby.If you use an earlier version of Spark on HDInsight, you receive errors when using the notebook.

  2. Pomocí následujících informací vyplňte položky v části Přizpůsobená šablona:Use the following information to populate the entries on the Customized template section:

    NastaveníSetting HodnotaValue
    PředplatnéSubscription Vaše předplatné AzureYour Azure subscription
    Skupina prostředkůResource group Skupina prostředků obsahující prostředky.The resource group that contains the resources.
    LocationLocation Oblast Azure, ve které se prostředky vytvoří.The Azure region that the resources are created in.
    Název clusteru SparkSpark Cluster Name Název clusteru Spark.The name of the Spark cluster. Prvních šest znaků se musí lišit od názvu clusteru Kafka.The first six characters must be different than the Kafka cluster name.
    Název clusteru KafkaKafka Cluster Name Název clusteru Kafka.The name of the Kafka cluster. Prvních šest znaků se musí lišit od názvu clusteru Spark.The first six characters must be different than the Spark cluster name.
    Uživatelské jméno přihlášení clusteruCluster Login User Name Uživatelské jméno správce clusterů.The admin user name for the clusters.
    Heslo přihlášení clusteruCluster Login Password Heslo správce clusterů.The admin user password for the clusters.
    Uživatelské jméno SSHSSH User Name Uživatel SSH, který se má pro clustery vytvořit.The SSH user to create for the clusters.
    Heslo SSHSSH Password Heslo uživatele SSH.The password for the SSH user.

    Snímek obrazovky přizpůsobené šablony

  3. Přečtěte si Podmínky a ujednání a pak vyberte Souhlasím s podmínkami a ujednáními uvedenými nahoře.Read the Terms and Conditions, and then select I agree to the terms and conditions stated above

  4. Nakonec zaškrtněte políčko Připnout na řídicí panel a vyberte Koupit.Finally, check Pin to dashboard and then select Purchase.

Poznámka

Vytvoření clusterů může trvat až 20 minut.It can take up to 20 minutes to create the clusters.

Nahrání poznámkového blokuUpload the notebook

Pokud chcete nahrát poznámkový blok z projektu do clusteru Spark ve službě HDInsight, postupujte následovně:To upload the notebook from the project to your Spark on HDInsight cluster, use the following steps:

  1. Stáhněte projekt z adresy https://github.com/Azure-Samples/hdinsight-spark-kafka-structured-streaming.Download the project from https://github.com/Azure-Samples/hdinsight-spark-kafka-structured-streaming.

  2. Ve webovém prohlížeči se připojte k poznámkovému bloku Jupyter na svém clusteru Spark.In your web browser, connect to the Jupyter notebook on your Spark cluster. V následující adrese URL nahraďte CLUSTERNAME názvem svého clusteru Spark:In the following URL, replace CLUSTERNAME with the name of your Spark cluster:

     https://CLUSTERNAME.azurehdinsight.net/jupyter
    

    Po zobrazení výzvy zadejte přihlašovací jméno (správce) a heslo clusteru, které jste použili při vytváření clusteru.When prompted, enter the cluster login (admin) and password used when you created the cluster.

  3. Pomocí tlačítka Upload (Nahrát) v pravém horním rohu stránky nahrajte do clusteru soubor spark-structured-streaming-kafka.ipynb.From the upper right side of the page, use the Upload button to upload the spark-structured-streaming-kafka.ipynb file to the cluster. Vyberte Otevřít a zahajte nahrávání.Select Open to start the upload.

    Použití tlačítka Upload (Nahrát) k výběru a nahrání poznámkového bloku

    Výběr souboru KafkaStreaming.ipynb

  4. V seznamu poznámkových bloků vyhledejte položku spark-structured-streaming-kafka.ipynb a vyberte tlačítko Upload (Nahrát) vedle ní.Find the spark-structured-streaming-kafka.ipynb entry in the list of notebooks, and select Upload button beside it.

    Nahrání poznámkového bloku pomocí tlačítka Upload (Nahrát) vedle položky KafkaStreaming.ipynb

Použití poznámkového blokuUse the notebook

Po nahrání souborů výběrem položky spark-structured-streaming-kafka.ipynb otevřete poznámkový blok.Once the files have been uploaded, select the spark-structured-streaming-kafka.ipynb entry to open the notebook. Informace o použití strukturovaného streamování Sparku se systémem Kafka ve službě HDInsight najdete v pokynech v poznámkovém bloku.To learn how to use Spark structured streaming with Kafka on HDInsight, follow the instructions in the notebook.

Vyčištění prostředkůClean up resources

Pokud chcete vyčistit prostředky vytvořené v tomto kurzu, můžete odstranit skupinu prostředků.To clean up the resources created by this tutorial, you can delete the resource group. Odstraněním skupiny prostředků odstraníte také přidružený cluster HDInsight a všechny další prostředky, které jsou k příslušné skupině prostředků přidružené.Deleting the resource group also deletes the associated HDInsight cluster, and any other resources associated with the resource group.

Odebrání skupiny prostředků pomocí webu Azure Portal:To remove the resource group using the Azure portal:

  1. Na webu Azure Portal rozbalením nabídky na levé straně otevřete nabídku služeb a pak zvolte Skupiny prostředků. Zobrazí se seznam skupin prostředků.In the Azure portal, expand the menu on the left side to open the menu of services, and then choose Resource Groups to display the list of your resource groups.
  2. Vyhledejte skupinu prostředků, kterou chcete odstranit, a klikněte pravým tlačítkem na tlačítko Další (...) na pravé straně seznamu.Locate the resource group to delete, and then right-click the More button (...) on the right side of the listing.
  3. Vyberte Odstranit skupinu prostředků a potvrďte tuto akci.Select Delete resource group, and then confirm.

Varování

Účtování clusteru HDInsight začne vytvořením clusteru a skončí jeho odstraněním.HDInsight cluster billing starts once a cluster is created and stops when the cluster is deleted. Účtuje se poměrnou částí po minutách, takže byste cluster měli odstranit vždy, když už se nepoužívá.Billing is pro-rated per minute, so you should always delete your cluster when it is no longer in use.

Odstraněním clusteru Kafka ve službě HDInsight odstraníte také všechna data uložená v systému Kafka.Deleting a Kafka on HDInsight cluster deletes any data stored in Kafka.

Další postupNext steps

V tomto kurzu jste zjistili, jak používat strukturovaného streamování Apache Sparku pro zápis a čtení dat z Apache Kafka v HDInsight.In this tutorial, you learned how to use Apache Spark Structured Streaming to write and read data from Apache Kafka on HDInsight. Použijte tento odkaz na další informace o použití Apache Storm s využitím systému Kafka.Use the following link to learn how to use Apache Storm with Kafka.