Creare cluster HBase su HDInsight nella rete virtuale di Azure

Informazioni su come creare cluster HBase in Azure HDInsight in una Rete virtuale di Azure.

Grazie all'integrazione con la rete virtuale, i cluster HBase possono essere distribuiti nella stessa rete virtuale delle applicazioni, consentendo così alle applicazioni di comunicare direttamente con HBase. Questo approccio offre i vantaggi seguenti:

  • Connettività diretta dell'applicazione Web con i nodi del cluster HBase, che consente le comunicazioni tramite le API RPC (Remote Procedure Call) Java di HBase.
  • Miglioramento delle prestazioni, poiché il traffico non deve attraversare più gateway e servizi di bilanciamento del carico.
  • Possibilità di elaborare le informazioni sensibili in modo più sicuro, senza esporre un endpoint pubblico.

Prerequisiti

Prima di iniziare questa esercitazione sono necessari gli elementi seguenti:

Creare cluster HBase nella rete virtuale

In questa sezione viene creato un cluster HBase basato su Linux con l'account di archiviazione di Azure dipendente in una rete virtuale di Azure tramite un modello di Azure Resource Manager. Per altri metodi di creazione di cluster e per informazioni sulle impostazioni, vedere l'articolo sulla creazione di cluster HDInsight. Per altre informazioni sull'uso di un modello per creare cluster Hadoop in HDInsight, vedere l'articolo relativo alla creazione di cluster Hadoop in HDInsight tramite modelli di Azure Resource Manager

Nota

Alcune proprietà sono state impostate come hardcoded nel modello. Ad esempio:

  • Location: Stati Uniti orientali 2
  • Versione del cluster: 3.5
  • Cluster worker node count: 2
  • Default storage account: stringa univoca
  • Virtual network name: <Nome cluster>-vnet
  • Virtual network address space: 10.0.0.0/16
  • Subnet name: subnet1
  • Subnet address range: 10.0.0.0/24

<Cluster Name > viene sostituito con il nome del cluster fornito quando si usa il modello.

  1. Fare clic sull'immagine seguente per aprire il modello nel portale di Azure. Il modello è disponibile tra i modelli di avvio rapido di Azure.

    Deploy to Azure

  2. Inserire le proprietà seguenti dal pannello Distribuzione personalizzata:

    • Sottoscrizione: selezionare una sottoscrizione di Azure usata per creare il cluster HDInsight, l'account di archiviazione dipendente e la rete virtuale di Azure.
    • Gruppo di risorse: selezionare Crea nuovo e assegnare un nome al nuovo gruppo di risorse.
    • Posizione: selezionare una posizione per il gruppo di risorse.
    • ClusterName: immettere un nome per il cluster Hadoop da creare.
    • Cluster login name and password: il nome dell'account di accesso predefinito è admin.
    • SSH username and password: il nome utente predefinito è sshuser. È possibile rinominarlo.
    • Accetto le condizioni riportate sopra: (selezionare)
  3. Fare clic su Acquista. La creazione di un cluster richiede circa 20 minuti. Dopo aver creato il cluster, è possibile fare clic sul pannello del cluster nel portale per aprirlo.

Al termine dell'esercitazione, è consigliabile eliminare il cluster. Con HDInsight, i dati vengono archiviati in Archiviazione di Azure ed è possibile eliminare tranquillamente un cluster quando non viene usato. Vengono addebitati i costi anche per i cluster HDInsight che non sono in uso. Poiché i costi per il cluster sono decisamente superiori a quelli per l'archiviazione, economicamente ha senso eliminare i cluster quando non vengono usati. Per istruzioni sull'eliminazione di un cluster, vedere Gestire cluster Hadoop in HDInsight tramite il portale di Azure.

Per iniziare a lavorare con il nuovo cluster HBase, è possibile usare le procedure disponibili in Introduzione a HBase con Hadoop in HDInsight.

Connettersi al cluster HBase tramite le API RPC Java di HBase

  1. Creare una macchina virtuale IaaS (Infrastructure as a Service) nella stessa rete virtuale di Azure e nella stessa subnet. Per le istruzioni su come creare una nuova macchina virtuale IaaS, vedere Creare una macchina virtuale che esegue Windows Server. Quando si usa la procedura indicata in questo documento, è necessario inserire i valori seguenti per la configurazione di rete:

    • Virtual network: <Nome cluster>-vnet
    • Subnet: subnet1

    Importante

    Sostituire <Nome cluster> con il nome usato durante la creazione del cluster HDInsight nei passaggi precedenti.

    Applicando questi valori, la macchina virtuale viene configurata nella stessa rete virtuale e subnet del cluster HDInsight. Ciò consente la comunicazione bidirezionale diretta. È possibile creare un cluster HDInsight con un nodo perimetrale vuoto. Il nodo perimetrale può essere usato per gestire il cluster. Per altre informazioni, vedere Usare nodi perimetrali vuoti in HDInsight.

  2. Quando si usa un'applicazione Java per connettersi a HBase da remoto, è necessario usare il nome di dominio completo (FQDN). Per determinare quest'ultimo, è necessario ottenere il suffisso DNS specifico della connessione del cluster HBase. A questo scopo, è possibile usare uno dei metodi seguenti:

    • Usare un Web browser per effettuare una chiamata Ambari:

      Passare a https://<Nome cluster>.azurehdinsight.net/api/v1/clusters/<Nome cluster>/hosts?minimal_response=true. Viene restituito un file JSON con i suffissi DNS.

    • Usare il sito Web Ambari:

      1. Passare a https://<Nome cluster>.azurehdinsight.net.
      2. Scegliere Host dal menu in alto.
    • Usare Curl per effettuare chiamate REST:

         curl -u <username>:<password> -k https://<clustername>.azurehdinsight.net/ambari/api/v1/clusters/<clustername>.azurehdinsight.net/services/hbase/components/hbrest
      

      Nei dati JSON (JavaScript Object Notation) restituiti, trovare la voce "host_name". Contiene il nome di dominio completo (FQDN) per i nodi nel cluster. ad esempio:

      ...
      "host_name": "wordkernode0.<clustername>.b1.cloudapp.net
      ...
      

      La porzione del nome di dominio che inizia con il nome del cluster è il suffisso DNS. Ad esempio, mycluster.b1.cloudapp.net.

    • Uso di Azure PowerShell

      Usare lo script di Azure PowerShell seguente per registrare la funzione Get-ClusterDetail, che può essere usata per restituire il suffisso DNS:

         function Get-ClusterDetail(
             [String]
             [Parameter( Position=0, Mandatory=$true )]
             $ClusterDnsName,
             [String]
             [Parameter( Position=1, Mandatory=$true )]
             $Username,
             [String]
             [Parameter( Position=2, Mandatory=$true )]
             $Password,
             [String]
             [Parameter( Position=3, Mandatory=$true )]
             $PropertyName
             )
         {
         <#
             .SYNOPSIS
             Displays information to facilitate an HDInsight cluster-to-cluster scenario within the same virtual network.
             .Description
             This command shows the following 4 properties of an HDInsight cluster:
             1. ZookeeperQuorum (supports only HBase type cluster)
                 Shows the value of HBase property "hbase.zookeeper.quorum".
             2. ZookeeperClientPort (supports only HBase type cluster)
                 Shows the value of HBase property "hbase.zookeeper.property.clientPort".
             3. HBaseRestServers (supports only HBase type cluster)
                 Shows a list of host FQDNs that run the HBase REST server.
             4. FQDNSuffix (supports all cluster types)
                 Shows the FQDN suffix of hosts in the cluster.
             .EXAMPLE
             Get-ClusterDetail -ClusterDnsName {clusterDnsName} -Username {username} -Password {password} -PropertyName ZookeeperQuorum
             This command shows the value of HBase property "hbase.zookeeper.quorum".
             .EXAMPLE
             Get-ClusterDetail -ClusterDnsName {clusterDnsName} -Username {username} -Password {password} -PropertyName ZookeeperClientPort
             This command shows the value of HBase property "hbase.zookeeper.property.clientPort".
             .EXAMPLE
             Get-ClusterDetail -ClusterDnsName {clusterDnsName} -Username {username} -Password {password} -PropertyName HBaseRestServers
             This command shows a list of host FQDNs that run the HBase REST server.
             .EXAMPLE
             Get-ClusterDetail -ClusterDnsName {clusterDnsName} -Username {username} -Password {password} -PropertyName FQDNSuffix
             This command shows the FQDN suffix of hosts in the cluster.
         #>
      
             $DnsSuffix = ".azurehdinsight.net"
      
             $ClusterFQDN = $ClusterDnsName + $DnsSuffix
             $webclient = new-object System.Net.WebClient
             $webclient.Credentials = new-object System.Net.NetworkCredential($Username, $Password)
      
             if($PropertyName -eq "ZookeeperQuorum")
             {
                 $Url = "https://" + $ClusterFQDN + "/ambari/api/v1/clusters/" + $ClusterFQDN + "/configurations?type=hbase-site&tag=default&fields=items/properties/hbase.zookeeper.quorum"
                 $Response = $webclient.DownloadString($Url)
                 $JsonObject = $Response | ConvertFrom-Json
                 Write-host $JsonObject.items[0].properties.'hbase.zookeeper.quorum'
             }
             if($PropertyName -eq "ZookeeperClientPort")
             {
                 $Url = "https://" + $ClusterFQDN + "/ambari/api/v1/clusters/" + $ClusterFQDN + "/configurations?type=hbase-site&tag=default&fields=items/properties/hbase.zookeeper.property.clientPort"
                 $Response = $webclient.DownloadString($Url)
                 $JsonObject = $Response | ConvertFrom-Json
                 Write-host $JsonObject.items[0].properties.'hbase.zookeeper.property.clientPort'
             }
             if($PropertyName -eq "HBaseRestServers")
             {
                 $Url1 = "https://" + $ClusterFQDN + "/ambari/api/v1/clusters/" + $ClusterFQDN + "/configurations?type=hbase-site&tag=default&fields=items/properties/hbase.rest.port"
                 $Response1 = $webclient.DownloadString($Url1)
                 $JsonObject1 = $Response1 | ConvertFrom-Json
                 $PortNumber = $JsonObject1.items[0].properties.'hbase.rest.port'
      
                 $Url2 = "https://" + $ClusterFQDN + "/ambari/api/v1/clusters/" + $ClusterFQDN + "/services/hbase/components/hbrest"
                 $Response2 = $webclient.DownloadString($Url2)
                 $JsonObject2 = $Response2 | ConvertFrom-Json
                 foreach ($host_component in $JsonObject2.host_components)
                 {
                     $ConnectionString = $host_component.HostRoles.host_name + ":" + $PortNumber
                     Write-host $ConnectionString
                 }
             }
             if($PropertyName -eq "FQDNSuffix")
             {
                 $Url = "https://" + $ClusterFQDN + "/ambari/api/v1/clusters/" + $ClusterFQDN + "/services/YARN/components/RESOURCEMANAGER"
                 $Response = $webclient.DownloadString($Url)
                 $JsonObject = $Response | ConvertFrom-Json
                 $FQDN = $JsonObject.host_components[0].HostRoles.host_name
                 $pos = $FQDN.IndexOf(".")
                 $Suffix = $FQDN.Substring($pos + 1)
                 Write-host $Suffix
             }
         }
      

      Dopo l'esecuzione dello script di Azure PowerShell, usare il comando seguente per restituire il suffisso DNS tramite la funzione Get-ClusterDetail. Quando si usa il comando, specificare il nome del cluster HBase di HDInsight e il nome e la password dell'amministratore.

         Get-ClusterDetail -ClusterDnsName <yourclustername> -PropertyName FQDNSuffix -Username <clusteradmin> -Password <clusteradminpassword>
      

      Questo comando restituisce il suffisso DNS. Ad esempio, yourclustername.b4.internal.cloudapp.net.

Per verificare che la macchina virtuale possa comunicare con il cluster HBase, usare il comando ping headnode0.<dns suffix> dalla macchina virtuale. Ad esempio, eseguire il ping di headnode0.mycluster.b1.cloudapp.net

Per usare queste informazioni in un'applicazione Java e creare un'applicazione, è possibile seguire i passaggi in Usare Maven per compilare applicazioni Java che usano HBase con HDInsight (Hadoop) . Per fare in modo che l'applicazione si connetta a un server HBase remoto, modificare il file hbase-site.xml in questo esempio, in modo che usi il nome di dominio completo (FQDN) per Zookeeper. ad esempio:

<property>
    <name>hbase.zookeeper.quorum</name>
    <value>zookeeper0.<dns suffix>,zookeeper1.<dns suffix>,zookeeper2.<dns suffix></value>
</property>

Nota

Per altre informazioni sulla risoluzione dei nomi in reti virtuali di Azure, comprese quelle relative all'uso del proprio server DNS, vedere Risoluzione dei nomi (DNS).

Passaggi successivi

In questa esercitazione si è appreso come creare un cluster HBase. Per altre informazioni, vedere: