Rychlý start: Vytvoření clusteru Apache Spark ve službě Azure HDInsight pomocí šablony ARM

V tomto rychlém startu použijete šablonu Azure Resource Manager (šablonu ARM) k vytvoření clusteru Apache Spark ve službě Azure HDInsight. Potom vytvoříte soubor Jupyter Notebook a použijete ho ke spouštění dotazů Spark SQL pro tabulky Apache Hivu. Azure HDInsight je spravovaná opensourcová analytická služba určená pro podniky. Architektura Apache Spark pro HDInsight umožňuje rychlou analýzu dat a clusterové výpočty s využitím zpracování v paměti. Jupyter Notebook umožňuje pracovat s daty, kombinovat kód s textem Markdownu a provádět jednoduché vizualizace.

Pokud používáte více clusterů současně, budete chtít vytvořit virtuální síť, a pokud používáte cluster Spark, budete také chtít použít konektor Hive Warehouse. Další informace najdete v tématech Plánování virtuální sítě pro Azure HDInsight a Integrace Apache Sparku a Apache Hivu s konektorem Hive Warehouse.

Šablona Resource Manageru je soubor JSON (JavaScript Object Notation), který definuje infrastrukturu a konfiguraci pro váš projekt. Tato šablona používá deklarativní syntaxi. V deklarativní syntaxi popíšete zamýšlené nasazení, aniž byste museli psát sekvenci programovacích příkazů pro vytvoření tohoto nasazení.

Pokud vaše prostředí splňuje požadavky a jste obeznámeni s používáním šablon ARM, vyberte tlačítko Nasazení do Azure. Šablona se otevře v prostředí Azure Portal.

Požadavky

Pokud ještě nemáte předplatné Azure, vytvořte si bezplatný účet před tím, než začnete.

Kontrola šablony

Šablona použitá v tomto rychlém startu je jednou z šablon pro rychlý start Azure.

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "metadata": {
    "_generator": {
      "name": "bicep",
      "version": "0.5.6.12127",
      "templateHash": "4742950082151195489"
    }
  },
  "parameters": {
    "clusterName": {
      "type": "string",
      "metadata": {
        "description": "The name of the HDInsight cluster to create."
      }
    },
    "clusterLoginUserName": {
      "type": "string",
      "maxLength": 20,
      "minLength": 2,
      "metadata": {
        "description": "These credentials can be used to submit jobs to the cluster and to log into cluster dashboards. The username must consist of digits, upper or lowercase letters, and/or the following special characters: (!#$%&'()-^_`{}~)."
      }
    },
    "clusterLoginPassword": {
      "type": "secureString",
      "minLength": 10,
      "metadata": {
        "description": "The password must be at least 10 characters in length and must contain at least one digit, one upper case letter, one lower case letter, and one non-alphanumeric character except (single-quote, double-quote, backslash, right-bracket, full-stop). Also, the password must not contain 3 consecutive characters from the cluster username or SSH username."
      }
    },
    "sshUserName": {
      "type": "string",
      "minLength": 2,
      "metadata": {
        "description": "These credentials can be used to remotely access the cluster. The sshUserName can only consit of digits, upper or lowercase letters, and/or the following special characters (%&'^_`{}~). Also, it cannot be the same as the cluster login username or a reserved word"
      }
    },
    "sshPassword": {
      "type": "secureString",
      "maxLength": 72,
      "minLength": 6,
      "metadata": {
        "description": "SSH password must be 6-72 characters long and must contain at least one digit, one upper case letter, and one lower case letter.  It must not contain any 3 consecutive characters from the cluster login name"
      }
    },
    "location": {
      "type": "string",
      "defaultValue": "[resourceGroup().location]",
      "metadata": {
        "description": "Location for all resources."
      }
    },
    "headNodeVirtualMachineSize": {
      "type": "string",
      "defaultValue": "Standard_E8_v3",
      "allowedValues": [
        "Standard_A4_v2",
        "Standard_A8_v2",
        "Standard_E2_v3",
        "Standard_E4_v3",
        "Standard_E8_v3",
        "Standard_E16_v3",
        "Standard_E20_v3",
        "Standard_E32_v3",
        "Standard_E48_v3"
      ],
      "metadata": {
        "description": "This is the headnode Azure Virtual Machine size, and will affect the cost. If you don't know, just leave the default value."
      }
    },
    "workerNodeVirtualMachineSize": {
      "type": "string",
      "defaultValue": "Standard_E8_v3",
      "allowedValues": [
        "Standard_A4_v2",
        "Standard_A8_v2",
        "Standard_E2_v3",
        "Standard_E4_v3",
        "Standard_E8_v3",
        "Standard_E16_v3",
        "Standard_E20_v3",
        "Standard_E32_v3",
        "Standard_E48_v3"
      ],
      "metadata": {
        "description": "This is the workernode Azure Virtual Machine size, and will affect the cost. If you don't know, just leave the default value."
      }
    }
  },
  "resources": [
    {
      "type": "Microsoft.Storage/storageAccounts",
      "apiVersion": "2021-08-01",
      "name": "[format('storage{0}', uniqueString(resourceGroup().id))]",
      "location": "[parameters('location')]",
      "sku": {
        "name": "Standard_LRS"
      },
      "kind": "StorageV2"
    },
    {
      "type": "Microsoft.HDInsight/clusters",
      "apiVersion": "2021-06-01",
      "name": "[parameters('clusterName')]",
      "location": "[parameters('location')]",
      "properties": {
        "clusterVersion": "4.0",
        "osType": "Linux",
        "tier": "Standard",
        "clusterDefinition": {
          "kind": "spark",
          "configurations": {
            "gateway": {
              "restAuthCredential.isEnabled": true,
              "restAuthCredential.username": "[parameters('clusterLoginUserName')]",
              "restAuthCredential.password": "[parameters('clusterLoginPassword')]"
            }
          }
        },
        "storageProfile": {
          "storageaccounts": [
            {
              "name": "[replace(replace(reference(resourceId('Microsoft.Storage/storageAccounts', format('storage{0}', uniqueString(resourceGroup().id)))).primaryEndpoints.blob, 'https://', ''), '/', '')]",
              "isDefault": true,
              "container": "[parameters('clusterName')]",
              "key": "[listKeys(resourceId('Microsoft.Storage/storageAccounts', format('storage{0}', uniqueString(resourceGroup().id))), '2021-08-01').keys[0].value]"
            }
          ]
        },
        "computeProfile": {
          "roles": [
            {
              "name": "headnode",
              "targetInstanceCount": 2,
              "hardwareProfile": {
                "vmSize": "[parameters('headNodeVirtualMachineSize')]"
              },
              "osProfile": {
                "linuxOperatingSystemProfile": {
                  "username": "[parameters('sshUserName')]",
                  "password": "[parameters('sshPassword')]"
                }
              }
            },
            {
              "name": "workernode",
              "targetInstanceCount": 2,
              "hardwareProfile": {
                "vmSize": "[parameters('workerNodeVirtualMachineSize')]"
              },
              "osProfile": {
                "linuxOperatingSystemProfile": {
                  "username": "[parameters('sshUserName')]",
                  "password": "[parameters('sshPassword')]"
                }
              }
            }
          ]
        }
      },
      "dependsOn": [
        "[resourceId('Microsoft.Storage/storageAccounts', format('storage{0}', uniqueString(resourceGroup().id)))]"
      ]
    }
  ],
  "outputs": {
    "storage": {
      "type": "object",
      "value": "[reference(resourceId('Microsoft.Storage/storageAccounts', format('storage{0}', uniqueString(resourceGroup().id))))]"
    },
    "cluster": {
      "type": "object",
      "value": "[reference(resourceId('Microsoft.HDInsight/clusters', parameters('clusterName')))]"
    }
  }
}

V šabloně jsou definované dva prostředky Azure:

Nasazení šablony

  1. Klikněte na tlačítko Nasadit do Azure, přihlaste se k Azure a otevřete šablonu ARM.

  2. Zadejte nebo vyberte tyto hodnoty:

    Vlastnost Popis
    Předplatné V rozevíracím seznamu vyberte předplatné Azure, které se používá pro cluster.
    Skupina prostředků V rozevíracím seznamu vyberte existující skupinu prostředků nebo vyberte možnost Vytvořit novou.
    Umístění Tato hodnota se automaticky vyplní umístěním použitým pro skupinu prostředků.
    Název clusteru Zadejte globálně jedinečný název. Pro tuto šablonu používejte pouze malá písmena a číslice.
    Uživatelské jméno přihlášení clusteru Zadejte uživatelské jméno, výchozí hodnota je admin.
    Heslo přihlášení clusteru Zadejte heslo. Heslo musí mít délku nejméně 10 znaků a musí obsahovat alespoň jednu číslici, jedno velké a jedno malé písmeno a jeden nealnumerický znak (s výjimkou znaků ' ` ").
    Uživatelské jméno SSH Zadejte uživatelské jméno, výchozí hodnota je sshuser.
    Heslo SSH Zadejte heslo.

    Vytvoření clusteru Spark ve službě HDInsight pomocí šablony Azure Resource Manager

  3. Projděte si podmínky a ujednání. Pak vyberte Souhlasím s výše uvedenými podmínkami a ujednáními a pak Koupit. Zobrazí se oznámení, že vaše nasazení právě probíhá. Vytvoření clusteru trvá přibližně 20 minut.

Pokud narazíte na problém s vytvářením clusterů HDInsight, je možné, že k tomu nemáte správná oprávnění. Další informace najdete v tématu popisujícím požadavky na řízení přístupu.

Kontrola nasazených prostředků

Po vytvoření clusteru obdržíte oznámení o úspěšném nasazení s odkazem Přejít na prostředek . Na stránce Skupina prostředků najdete seznam nového clusteru HDInsight a výchozího úložiště přidruženého ke clusteru. Každý cluster má Azure Storage, Azure Data Lake Storage Gen1 nebo Azure Data Lake Storage Gen2 závislost. Označuje se jako výchozí účet úložiště. Cluster HDInsight a jeho výchozí účet úložiště musí být společně umístěné ve stejné oblasti Azure. Odstraněním clusterů se neodstraní závislost účtu úložiště. Označuje se jako výchozí účet úložiště. Cluster HDInsight a jeho výchozí účet úložiště musí být společně umístěné ve stejné oblasti Azure. Odstraněním clusterů se neodstraní účet úložiště.

Vytvoření souboru Jupyter Notebook

Jupyter Notebook je interaktivní prostředí poznámkového bloku, které podporuje různé programovací jazyky. Soubor Jupyter Notebook můžete použít k interakci s daty, kombinování kódu s textem Markdownu a provádění jednoduchých vizualizací.

  1. Otevřete Azure Portal.

  2. Vyberte Clustery HDInsight a pak vyberte cluster, který jste vytvořili.

    Otevření clusteru HDInsight v Azure Portal

  3. Na portálu v části Řídicí panely clusteru vyberte Jupyter Notebook. Po zobrazení výzvy zadejte přihlašovací údaje clusteru.

    Otevření Jupyter Notebook pro spuštění interaktivního dotazu Spark SQL

  4. Vyberte Nový>PySpark a vytvořte poznámkový blok.

    Vytvoření Jupyter Notebook souboru pro spuštění interaktivního dotazu Spark SQL

    Nový poznámkový blok se vytvoří a otevře s názvem Bez názvu (Bez názvu.pynb).

Spouštění příkazů Sql Apache Sparku

Jazyk SQL (Structured Query Language) je nejběžnějším a široce používaným jazykem pro dotazování a transformaci dat. Spark SQL funguje jako rozšíření Apache Spark pro zpracování strukturovaných dat a používá známou syntaxi jazyka SQL.

  1. Ověřte, že je jádro připravené. Jádro bude připravené, až se vedle názvu jádra v poznámkovém bloku zobrazí prázdný kroužek. Plný kruh označuje, že je jádro zaneprázdněno.

    Stav jádra alt-text="Stav jádra" border="true":::

    Při prvním spuštění poznámkového bloku jádro provede některé úlohy na pozadí. Počkejte, až bude jádro připravené.

  2. Do prázdné buňky vložte následující kód a stisknutím SHIFT + ENTER kód spusťte. Příkaz vypíše tabulky Hive v clusteru:

    %%sql
    SHOW TABLES
    

    Při použití Jupyter Notebook souboru s clusterem HDInsight získáte přednastavenou spark relaci, kterou můžete použít ke spouštění dotazů Hive pomocí Spark SQL. %%sql říká poznámkovému bloku Jupyter, aby ke spuštění dotazu Hive použil přednastavenou relaci spark. Dotaz načte prvních 10 řádků z tabulky Hive (hivesampletable), která je ve výchozím nastavení k dispozici na všech clusterech HDInsight. Při prvním odeslání dotazu vytvoří Jupyter pro poznámkový blok aplikaci Spark. Dokončení trvá přibližně 30 sekund. Jakmile je aplikace Spark připravená, dotaz se spustí přibližně za sekundu a vygeneruje výsledky. Výstup vypadá takto:

    Dotaz Apache Hivu ve službě HDInsight y ve službě HDInsight" border="true":::

    Při každém spuštění dotazu v Jupyter se v názvu okna webového prohlížeče zobrazí stav (Busy) (Zaneprázdněn) společně s názvem poznámkového bloku. Zobrazí se také plný kroužek vedle textu PySpark v pravém horním rohu.

  3. Spuštěním dalšího dotazu zobrazíte data v tabulce hivesampletable.

    %%sql
    SELECT * FROM hivesampletable LIMIT 10
    

    Obrazovka by se měla aktualizovat a zobrazit výstup dotazu.

    Výstup dotazu Hive ve službě HDInsight Insight" border="true":::

  4. V nabídce Soubor poznámkového bloku vyberte Zavřít a zastavit. Vypnutím poznámkového bloku se uvolní prostředky clusteru, včetně aplikace Spark.

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

Po dokončení tohoto rychlého startu můžete cluster odstranit. Ve službě HDInsight jsou vaše data uložená ve službě Azure Storage, takže cluster můžete bezpečně odstranit, když se nepoužívá. Účtují se vám také poplatky za cluster HDInsight, i když se nepoužívá. Vzhledem k tomu, že poplatky za cluster jsou mnohonásobně vyšší než poplatky za úložiště, dává ekonomický smysl clustery odstranit, když se nepoužívají.

V Azure Portal přejděte do clusteru a vyberte Odstranit.

Azure Portal odstranit cluster HDInsight" border="true":::

Můžete také výběrem názvu skupiny prostředků otevřít stránku skupiny prostředků a pak vybrat Odstranit skupinu prostředků. Odstraněním skupiny prostředků odstraníte cluster HDInsight i výchozí účet úložiště.

Další kroky

V tomto rychlém startu jste se dozvěděli, jak vytvořit cluster Apache Spark ve službě HDInsight a spustit základní dotaz Spark SQL. V dalším kurzu se dozvíte, jak pomocí clusteru HDInsight spouštět interaktivní dotazy na ukázková data.