你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

如何将 Hive 元存储与 Apache Spark™ 群集配合使用

重要

此功能目前以预览版提供。 Microsoft Azure 预览版的补充使用条款包含适用于 beta 版、预览版或其他尚未正式发布的 Azure 功能的更多法律条款。 有关此特定预览版的信息,请参阅 Azure HDInsight on AKS 预览版信息。 如有疑问或功能建议,请在 AskHDInsight 上提交请求并附上详细信息,并关注我们以获取 Azure HDInsight Community 的更多更新。

跨多个服务共享数据和元存储至关重要。 HIVE 元存储中常用的元存储之一。 AKS 上的 HDInsight 允许用户连接到外部元存储。 此步骤使 HDInsight 用户能够无缝连接到生态系统中的其他服务。

AKS 上的 Azure HDInsight 支持自定义元存储,建议将其用于生产群集。 涉及的关键步骤包括

  1. 创建 Azure SQL 数据库
  2. 创建用于存储凭据的密钥保管库
  3. 在使用 Apache Spark™ 创建 HDInsight on AKS 群集时配置元存储
  4. 对外部元存储进行操作(显示数据库并执行选择限制 1)。

创建群集时,HDInsight 服务需要连接到外部元存储并验证你的凭据。

创建 Azure SQL 数据库

  1. 在为 HDInsight 群集设置自定义 Hive 元存储之前,需创建 Azure SQL 数据库或有一个现有的 Azure SQL 数据库。

    注意

    目前,我们仅支持用于 HIVE 元存储的 Azure SQL 数据库。 由于 Hive 的限制,不支持在元存储数据库名称中包含“-”字符(连字符)。

创建用于存储凭据的密钥保管库

  1. 创建 Azure 密钥保管库。

    密钥保管库的目的是允许在 SQL 数据库创建过程中存储 SQL Server 管理员密码集。 AKS 平台上的 HDInsight 不会直接处理凭据。 因此,需要在 Azure 密钥保管库中存储重要凭据。 了解创建 Azure 密钥保管库的步骤。

  2. 创建 Azure 密钥保管库后,请分配以下角色

    Object 角色 备注
    用户分配的托管标识(HDInsight 群集使用相同的 UAMI) 密钥保管库机密用户 了解如何向 UAMI 分配角色
    用户(谁在 Azure 密钥保管库中创建机密) Key Vault 管理员 了解如何向用户分配角色

    注意

    如果没有此角色,用户将无法创建机密。

  3. 创建机密

    此步骤允许将 SQL Server 管理员密码保留为 Azure 密钥保管库中的机密。 在“值””字段中添加密码(与 SQL DB 中为管理员提供的密码相同),“同时添加机密。

    显示如何创建密钥保管库的屏幕截图。

    屏幕截图显示如何创建机密。

    注意

    请确保记下机密名称,因为群集创建过程中需要用到此名称。

创建 HDInsight Spark 群集时配置元存储

  1. 导航到 AKS 群集池上的 HDInsight 以创建群集。

    显示如何新建工作区的屏幕截图。

  2. 启用切换按钮以添加外部 hive 元存储并填写以下详细信息。

    显示“基本信息”选项卡的屏幕截图。

  3. 其余详细信息将按照 HDInsight on AKS 中 Apache Spark 群集的创建规则填写。

  4. 单击“查看并创建”。

    显示“查看和创建”选项卡的屏幕截图。

    注意

    • 元存储的生命周期不与群集生命周期相关联,因此可创建和删除群集,而不会丢失元数据。 即使在删除和重新创建 HDInsight 群集之后,系统也仍会保留 Hive 架构等元数据。
    • 通过自定义元存储,可将多个群集和群集类型附加到元存储。

对外部元存储进行操作

  1. 创建表

    >> spark.sql("CREATE TABLE sampleTable (number Int, word String)")

    显示如何创建表的屏幕截图。

  2. 在表上添加数据

    >> spark.sql("INSERT INTO sampleTable VALUES (123, \"HDIonAKS\")");\

    显示 insert 语句的屏幕截图。

  3. 读取表

    >> spark.sql("select * from sampleTable").show()

    显示如何读取表的屏幕截图。

参考