HDInsight 中的 Apache HBase 入门示例

了解如何使用 Hive 在 HDInsight 中创建 HBase 群集、创建 HBase 表和查询表。 有关 HBase 的一般信息,请参阅 HDInsight HBase 概述

Warning

HDInsight 群集是基于分钟按比例收费,而不管用户是否正在使用它们。 请务必在使用完之后删除群集。 有关详细信息,请参阅如何删除 HDInsight 群集

先决条件

开始使用本 HBase 示例前,必须具有以下项目:

创建 HBase 群集

以下过程使用 Azure Resource Manager 模板创建 3.5 版基于 Linux 的 HBase 群集和从属默认 Azure 存储帐户。 若要了解该过程与其他群集创建方法中使用的参数,请参阅 在 HDInsight 中创建基于 Linux 的 Hadoop 群集

  1. 单击下面的图像可在 Azure 门户中打开模板。 模板位于公共 blob 容器中。

    Deploy to Azure

    Note

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

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

    • 订阅:选择用于创建群集的 Azure 订阅。
    • 资源组:创建 Azure 资源管理组,或使用现有的组。
    • 位置:指定资源组的位置。
    • ClusterName:输入 HBase 群集的名称。
    • 群集登录名和密码:默认登录名是 admin
    • SSH 用户名和密码:默认用户名是 sshuser。 可以重命名它。

      其他参数是可选的。

      每个群集都有一个 Azure 存储帐户依赖项。 删除群集后,数据将保留在存储帐户中。 群集的默认存储帐户名为群集名称后接“store”。 该名称已在模板 variables 节中硬编码。

  3. 单击“法律条款”,然后单击“购买”。 确认已选中“固定到仪表板”复选框,然后单击“创建”。
Note

删除 HBase 群集后,可使用同一默认 Blob 容器创建另一 HBase 群集。 新群集会选取在原始群集中创建的 HBase 表。 为了避免不一致,建议在删除群集之前先禁用 HBase 表。

创建表和插入数据

可以使用 SSH 连接到 HBase 群集,然后使用 HBase Shell 来创建 HBase 表以及插入和查询数据。 有关详细信息,请参阅 Use SSH with HDInsight(对 HDInsight 使用 SSH)。

对于大多数人而言,数据以表格形式显示:

HDInsight HBase 表格数据

在 HBase(BigTable 的一种实现)中,相同的数据如下所示:

HDInsight HBase BigTable 数据

使用 HBase shell

  1. 从 SSH 运行以下 HBase 命令:

     hbase shell
    
  2. 创建包含两个列系列的 HBase:

     create 'Contacts', 'Personal', 'Office'
     list
    
  3. 插入一些数据:

     put 'Contacts', '1000', 'Personal:Name', 'John Dole'
     put 'Contacts', '1000', 'Personal:Phone', '1-425-000-0001'
     put 'Contacts', '1000', 'Office:Phone', '1-425-000-0002'
     put 'Contacts', '1000', 'Office:Address', '1111 San Gabriel Dr.'
     scan 'Contacts'
    

    HDInsight Hadoop HBase shell

  4. 获取单个行

     get 'Contacts', '1000'
    

    将会看到与使用扫描命令相同的结果,因为只有一个行。

    有关 Hbase 表架构的详细信息,请参阅 HBase 架构设计简介。 有关 HBase 命令的详细信息,请参阅 Apache HBase 参考指南

  5. 退出 shell

     exit
    

在联系人 HBase 表中批量加载数据

HBase 提供了多种方法用于将数据载入表中。 有关详细信息,请参阅 批量加载

可在公共 Blob 容器 wasbs://hbasecontacts@hditutorialdata.blob.core.windows.net/contacts.txt 中找到示例数据文件。 该数据文件的内容为:

8396    Calvin Raji      230-555-0191    230-555-0191    5415 San Gabriel Dr.
16600   Karen Wu         646-555-0113    230-555-0192    9265 La Paz
4324    Karl Xie         508-555-0163    230-555-0193    4912 La Vuelta
16891   Jonn Jackson     674-555-0110    230-555-0194    40 Ellis St.
3273    Miguel Miller    397-555-0155    230-555-0195    6696 Anchor Drive
3588    Osa Agbonile     592-555-0152    230-555-0196    1873 Lion Circle
10272   Julia Lee        870-555-0110    230-555-0197    3148 Rose Street
4868    Jose Hayes       599-555-0171    230-555-0198    793 Crawford Street
4761    Caleb Alexander  670-555-0141    230-555-0199    4775 Kentucky Dr.
16443   Terry Chander    998-555-0171    230-555-0200    771 Northridge Drive

可以选择创建一个文本文件并将该文件上传到自己的存储帐户。 有关说明,请参阅 在 HDInsight 中为 Hadoop 作业上传数据

Note

此过程使用在上一个过程中创建的“联系人”HBase 表。

  1. 从 SSH 运行以下命令,将数据文件转换成 StoreFiles 并将其存储在 Dimporttsv.bulk.output 指定的相对路径。 如果你在 HBase Shell 中操作,请使用退出命令退出。

     hbase org.apache.hadoop.hbase.mapreduce.ImportTsv -Dimporttsv.columns="HBASE_ROW_KEY,Personal:Name,Personal:Phone,Office:Phone,Office:Address" -Dimporttsv.bulk.output="/example/data/storeDataFileOutput" Contacts wasbs://hbasecontacts@hditutorialdata.blob.core.windows.net/contacts.txt
    
  2. 运行以下命令,将数据从 /example/data/storeDataFileOutput 上传到 HBase 表:

     hbase org.apache.hadoop.hbase.mapreduce.LoadIncrementalHFiles /example/data/storeDataFileOutput Contacts
    
  3. 你可以打开 HBase Shell,并使用扫描命令来列出表内容。

使用 Hive 查询 HBase

你可以使用 Hive 查询 HBase 表中的数据。 本部分将创建要映射到 HBase 表的 Hive 表,并使用该表来查询 HBase 表中的数据。

  1. 打开 PuTTY并连接到群集。 参阅前一过程中的说明。
  2. 在 SSH 会话中,使用以下命令启动 Beeline:

     beeline -u 'jdbc:hive2://localhost:10001/;transportMode=http' -n admin
    

    有关 Beeline 的详细信息,请参阅通过 Beeline 将 Hive 与 HDInsight 中的 Hadoop 配合使用

  3. 运行以下 HiveQL 脚本,创建映射到 HBase 表的 Hive 表。 确保你已创建本教程中前面引用的示例表,方法是在运行此语句前使用 HBase shell。

     CREATE EXTERNAL TABLE hbasecontacts(rowkey STRING, name STRING, homephone STRING, officephone STRING, officeaddress STRING)
     STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
     WITH SERDEPROPERTIES ('hbase.columns.mapping' = ':key,Personal:Name,Personal:Phone,Office:Phone,Office:Address')
     TBLPROPERTIES ('hbase.table.name' = 'Contacts');
    
  4. 运行以下 HiveQL 脚本,以查询 HBase 表中的数据:

      SELECT count(rowkey) FROM hbasecontacts;
    

通过 Curl 使用 HBase REST API

REST API 通过 基本身份验证进行保护。 始终应该使用安全 HTTP (HTTPS) 来发出请求,确保安全地将凭据发送到服务器。

  1. 使用以下命令列出现有的 HBase 表:

     curl -u <UserName>:<Password> \
     -G https://<ClusterName>.azurehdinsight.cn/hbaserest/
    
  2. 使用以下命令创建包含两个列系列的新 HBase 表:

     curl -u <UserName>:<Password> \
     -X PUT "https://<ClusterName>.azurehdinsight.cn/hbaserest/Contacts1/schema" \
     -H "Accept: application/json" \
     -H "Content-Type: application/json" \
     -d "{\"@name\":\"Contact1\",\"ColumnSchema\":[{\"name\":\"Personal\"},{\"name\":\"Office\"}]}" \
     -v
    

    架构将以 JSON 格式提供。

  3. 使用以下命令插入一些数据:

     curl -u <UserName>:<Password> \
     -X PUT "https://<ClusterName>.azurehdinsight.cn/hbaserest/Contacts1/false-row-key" \
     -H "Accept: application/json" \
     -H "Content-Type: application/json" \
     -d "{\"Row\":[{\"key\":\"MTAwMA==\",\"Cell\": [{\"column\":\"UGVyc29uYWw6TmFtZQ==\", \"$\":\"Sm9obiBEb2xl\"}]}]}" \
     -v
    

    必须使用 base64 来为 -d 参数中指定的值编码。 在此示例中:

    • MTAwMA==: 1000
    • UGVyc29uYWw6TmFtZQ==: Personal:Name
    • Sm9obiBEb2xl: John Dole

      false-row-key 允许插入多个(批处理)值。

  4. 使用以下命令获取行:

     curl -u <UserName>:<Password> \
     -X GET "https://<ClusterName>.azurehdinsight.cn/hbaserest/Contacts1/1000" \
     -H "Accept: application/json" \
     -v
    

有关 HBase Rest 的详细信息,请参阅 Apache HBase 参考指南

Note

Thrift 不受 HDInsight 中的 HBase 支持。

使用 Curl 或者与 WebHCat 进行任何其他形式的 REST 通信时,必须提供 HDInsight 群集管理员用户名和密码对请求进行身份验证。 此外,还必须使用群集名称作为用来向服务器发送请求的统一资源标识符 (URI) 的一部分:

   curl -u <UserName>:<Password> \
   -G https://<ClusterName>.azurehdinsight.cn/templeton/v1/status

应会收到类似于以下响应的响应:

   {"status":"ok","version":"v1"}

检查群集状态

HDInsight 中的 HBase 随附了一个 Web UI 用于监视群集。 使用该 Web UI 可以请求有关区域的统计或信息。

访问 HBase Master UI

  1. 通过 https://<群集名称>.azurehdinsight.cn 登录到 Ambari Web UI。
  2. 在左侧菜单中,单击“HBase” 。
  3. 在页面顶部单击“快速链接”,指向活动 Zookeeper 节点链接,然后单击“HBase Master UI”。 该 UI 将在另一个浏览器标签页中打开:

    HDInsight HBase HMaster UI

    HBase Master UI 包含以下部分:

    • 区域服务器
    • 备份主机
    • 任务
    • 软件属性

删除群集

为了避免不一致,建议你在删除群集之前先禁用 HBase 表。

Warning

HDInsight 群集是基于分钟按比例收费,而不管用户是否正在使用它们。 请务必在使用完之后删除群集。 有关详细信息,请参阅如何删除 HDInsight 群集

故障排除

如果在创建 HDInsight 群集时遇到问题,请参阅访问控制要求

后续步骤

本文已介绍如何创建 HBase 群集、如何创建表以及如何从 HBase shell 查看这些表中的数据。 此外,学习了如何对 HBase 表中的数据使用 Hive 查询,以及如何使用 HBase C# REST API 创建 HBase 表并从该表中检索数据。

若要了解更多信息,请参阅以下文章:

  • HDInsight HBase 概述:HBase 是构建于 Hadoop 上的 Apache 开源 NoSQL 数据库,用于为大量非结构化和半结构化数据提供随机访问和高度一致性。