在 Azure 虚拟网络中的 HDInsight 上创建 HBase 群集

了解如何在 Azure 虚拟网络中创建 Azure HDInsight HBase 群集。

通过虚拟网络集成,可以将 HBase 群集部署到应用程序所在的虚拟网络,以便应用程序直接与 HBase 进行通信。 优点包括:

  • 将 Web 应用程序直接连接到 HBase 群集节点,通过 HBase Java 远程过程调用 (RPC) API 实现通信。
  • 提高性能,因为流量不必通过多个网关和负载均衡器。
  • 能够以更安全的方式处理敏感信息,而无需公开公共终结点。

先决条件

要阅读本教程,必须具备以下项:

在虚拟网络上创建 HBase 群集

在本部分中,通过 Azure Resource Manager 模板在 Azure 虚拟网络中使用从属 Azure 存储帐户创建基于 Linux 的 HBase 群集。 若要了解其他群集创建方法以及设置,请参阅创建 HDInsight 群集。 有关使用模板在 HDInsight 中创建 Hadoop 群集的详细信息,请参阅使用 Azure Resource Manager 模板在 HDInsight 中创建 Hadoop 群集

Note

某些属性已在模板中硬编码。 例如:

  • 位置:中国东部
  • 群集版本:3.6
  • 群集工作节点计数:2
  • 默认存储帐户:唯一字符串
  • 虚拟网络名称:<群集名称>-vnet
  • 虚拟网络地址空间:10.0.0.0/16
  • 子网名称:subnet1
  • 子网地址范围:10.0.0.0/24

<群集名称> 会替换为使用模板时提供的群集名称。

  1. 单击下面的图像可在 Azure 门户中打开模板。 模板位于 Azure 快速入门模板中。

    Deploy to Azure

    Note

    必须修改从 GitHub 存储库“azure-quickstart-templates”下载的模板,以适应 Azure 中国云环境。 例如,替换一些终结点 - 将“blob.core.chinacloudapi.cn”替换为“blob.core.chinacloudapi.cn”,将“cloudapp.azure.com”替换为“chinacloudapp.cn”;将允许的位置更改为“中国北部”和“中国东部”;将 HDInsight Linux 版本更改为 Azure 中国区支持的版本:3.5。

  2. 在“自定义部署”边栏选项卡中,输入以下属性:

    • 订阅:选择用于创建 HDInsight 群集、从属存储帐户和 Azure 虚拟网络的 Azure 订阅。
    • 资源组:选择“新建”,然后指定新的资源组名称。
    • 位置:选择资源组的位置。
    • ClusterName:为要创建的 Hadoop 群集输入名称。
    • 群集登录名和密码:默认登录名是 admin
    • SSH 用户名和密码:默认用户名是 sshuser。 可以重命名它。
    • 我同意上述条款和条件:(选择)
  3. 单击“购买” 。 创建群集大约需要 20 分钟时间。 创建群集之后,便可以在门户中单击群集边栏选项卡以打开它。

完成教程之后,可能要删除群集。 有了 HDInsight,便可以将数据存储在 Azure 存储中,因此可以在群集不用时安全地删除群集。 此外,还需要支付 HDInsight 群集费用,即使未使用。 由于群集费用高于存储空间费用数倍,因此在不使用群集时将其删除可以节省费用。 有关删除群集的说明,请参阅使用 Azure 门户在 HDInsight 中管理 Hadoop 群集

要开始处理新 HBase 群集,可以按照开始在 HDInsight 中将 HBase 与 Hadoop 配合使用中的步骤操作。

使用 HBase Java RPC API 连接到 HBase 群集。

  1. 将基础结构即服务 (IaaS) 虚拟机创建到相同的 Azure 虚拟网络和子网中。 有关创建新 IaaS 虚拟机的说明,请参阅创建运行 Windows Server 的虚拟机。 按照本文档中的步骤操作时,必须使用以下值进行网络配置:

    • 虚拟网络:<群集名称>-vnet
    • 子网:subnet1

    Important

    将 <群集名称> 替换为在先前步骤中创建 HDInsight 群集时使用的名称。

    使用这些值可将虚拟机放置在与 HDInsight 群集相同的虚拟网络和子网中。 此配置让它们能够直接相互通信。 有一种方法可使用空的边缘节点创建 HDInsight 群集。 该边缘节点可用于管理群集。 有关详细信息,请参阅在 HDInsight 中使用空边缘节点

  2. 使用 Java 应用程序远程连接到 HBase 时,必须使用完全限定的域名 (FQDN)。 要确定这一点,必须获取 HBase 群集的连接特定的 DNS 后缀。 为此,可以使用以下方法之一:

    • 使用 Web 浏览器发出 Ambari 调用:

      浏览到 https://<ClusterName>.azurehdinsight.cn/api/v1/clusters/<ClusterName>/hosts?minimal_response=true。 随后返回带有 DNS 后缀的 JSON 文件。

    • 使用 Ambari 网站:

      1. 浏览到 https://<ClusterName>.azurehdinsight.cn。
      2. 在顶部菜单中单击 主机
    • 使用 Curl 发出 REST 调用:

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

      在返回的 JavaScript 对象表示法 (JSON) 数据中,找到“host_name”条目。 此条目包含群集中的节点的 FQDN。 例如:

      ... "host_name": "wordkernode0..b1.chinacloudapp.cn ...

      以群集名称开头的域名的部分是 DNS 后缀。 例如,mycluster.b1.chinacloudapp.cn。

    • 使用 Azure PowerShell

      使用以下 Azure PowerShell 脚本注册 Get-ClusterDetail 函数,该函数可用于返回 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.cn"
      
         $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
         }
      }
      

      运行 Azure PowerShell 脚本后,使用以下命令通过 Get-ClusterDetail 函数来返回 DNS 后缀。 使用此命令时,指定 HDInsight HBase 群集名称、管理员名称和管理员密码。

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

      此命令返回 DNS 后缀。 例如, yourclustername.b4.internal.chinacloudapp.cn

要验证虚拟机是否可与 HBase 群集进行通信,请从虚拟机使用 ping headnode0.<dns suffix> 命令。 例如,ping headnode0.mycluster.b1.chinacloudapp.cn。

若要在 Java 应用程序中使用此信息,可以按照使用 Maven 构建将 HBase 与 HDInsight (Hadoop) 配合使用的 Java 应用程序中的步骤创建应用程序。 若要让应用程序连接到远程 HBase 服务器,请修改本示例中的 hbase-site.xml 文件,以对 Zookeeper 使用 FQDN。 例如:

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

Note

有关 Azure 虚拟网络中的名称解析的详细信息,包括如何使用自己的 DNS 服务器,请参阅名称解析 (DNS)

后续步骤

在本教程中,已学习了如何创建 HBase 群集。 若要了解更多信息,请参阅以下文章: