使用用于 Visual Studio 的 Data Lake 工具运行 Hive 查询

Note

若要将 Visual Studio 连接到 Azure 中国区,可按使用 Visual Studio 2015 连接中国区 Azure中的说明操作。

如果使用的是 Visual Studio 2015 Update 2 或更高版本,可以按照以下图片中的说明,选中“启用隔离的 Azure Active Directory 配置”选项。

enable-isolated-azure-active-directory-configuration

如果使用的是 Visual Studio 2017,可按 使用 Visual Studio 2017 连接中国区 Azure中的说明操作。

了解如何使用用于 Visual Studio 的 Data Lake 工具查询 Apache Hive。 使用 Data Lake 工具可以轻松创建、监视 Hive 查询并将其提交到 Azure HDInsight 上的 Hadoop。

先决条件

  • Azure HDInsight(HDInsight 上的 Hadoop)群集

    Important

    Linux 是在 HDInsight 3.4 版或更高版本上使用的唯一操作系统。 有关详细信息,请参阅 HDInsight 在 Windows 上停用

  • Visual Studio(以下版本之一):

    • Visual Studio 2013 Community/Professional/Premium/Ultimate Update 4

    • Visual Studio 2015(任何版本)

    • Visual Studio 2017(任何版本)

  • 用于 Visual Studio 的 HDInsight 工具或用于 Visual Studio 的 Azure Data Lake 工具。 请参阅 Get started using Visual Studio Hadoop tools for HDInsight(开始使用 Visual Studio Hadoop tools for HDInsight),了解如何安装和配置这些工具。

使用 Visual Studio 运行 Hive 查询

  1. 打开“Visual Studio”,选择“新建” > “项目” > “Azure Data Lake” > “HIVE” > “Hive 应用程序”。 为此项目提供一个名称。

  2. 打开在创建此项目时产生的 Script.hql 文件,并在其中粘贴以下 HiveQL 语句:

    set hive.execution.engine=tez;
    DROP TABLE log4jLogs;
    CREATE EXTERNAL TABLE log4jLogs (t1 string, t2 string, t3 string, t4 string, t5 string, t6 string, t7 string)
    ROW FORMAT DELIMITED FIELDS TERMINATED BY ' '
    STORED AS TEXTFILE LOCATION '/example/data/';
    SELECT t4 AS sev, COUNT(*) AS count FROM log4jLogs WHERE t4 = '[ERROR]' AND  INPUT__FILE__NAME LIKE '%.log' GROUP BY t4;
    

    这些语句可执行以下操作:

    • DROP TABLE:如果该表存在,此语句会将其删除。

    • CREATE EXTERNAL TABLE:在 Hive 中创建一个新的“外部”表。 外部表仅在 Hive 中存储表定义;数据会保留在原始位置。

      Note

      如果希望通过外部源更新基础数据,应使用外部表。 例如,MapReduce 作业或 Azure 服务。

      删除外部表不会删除数据,只会删除表定义。

    • ROW FORMAT:告知 Hive 如何设置数据的格式。 在此情况下,每个日志中的字段以空格分隔。

    • STORED AS TEXTFILE LOCATION:让 Hive 知道数据的存储位置(example/data 目录),并且数据已存储为文本。

    • SELECT:选择 t4 列包含值 [ERROR] 的所有行计数。 此语句会返回值 3 ,因为有三个行包含此值。

    • INPUT__FILE__NAME LIKE '%.log' - 告知 Hive,我们只应返回以 .log 结尾的文件中的数据。 此子句将搜索限定为包含数据的 sample.log 文件。

  3. 从工具栏中,选择要用于此查询的 HDInsight 群集 。 选择“提交” 以 Hive 作业形式运行语句。

    “提交”栏

  4. “Hive 作业摘要”将会出现并显示有关正在运行的作业的信息。 在“作业状态”更改为“已完成”之前,使用“刷新”链接刷新作业信息。

    显示已完成作业的作业摘要

  5. 使用“作业输出”链接查看此作业的输出。 [ERROR] 3,这是此查询返回的值。

  6. 也可以运行 Hive 查询,而无需创建项目。 使用“服务器资源管理器”,展开“Azure” > “HDInsight”,右键单击 HDInsight 服务器,然后选择“编写 Hive 查询”。

  7. 在出现的 temp.hql 文档中,添加以下 HiveQL 语句:

    set hive.execution.engine=tez;
    CREATE TABLE IF NOT EXISTS errorLogs (t1 string, t2 string, t3 string, t4 string, t5 string, t6 string, t7 string) STORED AS ORC;
    INSERT OVERWRITE TABLE errorLogs SELECT t1, t2, t3, t4, t5, t6, t7 FROM log4jLogs WHERE t4 = '[ERROR]' AND INPUT__FILE__NAME LIKE '%.log';
    

    这些语句可执行以下操作:

    • CREATE TABLE IF NOT EXISTS:如果表尚不存在,则创建表。 由于未使用 EXTERNAL 关键字,因此此语句会创建内部表。 内部表存储在 Hive 数据仓库中,并由 Hive 托管。

      Note

      EXTERNAL 表不同,删除内部表会同时删除基础数据。

    • STORED AS ORC:以优化的行纵栏式 (ORC) 格式存储数据。 ORC 是高度优化且有效的 Hive 数据存储格式。

    • INSERT OVERWRITE ... SELECT:从包含 [ERROR]log4jLogs 表中选择行,然后将数据插入 errorLogs 表中。

  8. 从工具栏中,选择“提交”以运行该作业。 使用“作业状态”确定作业是否已成功完成。

  9. 若要验证作业是否已创建表,请使用“服务器资源管理器”,然后展开“Azure” > “HDInsight”> 你的 HDInsight 群集 >“Hive 数据库” > “默认值”。 此时会列出 errorLogs 表和 log4jLogs 表。

后续步骤

如你所见,用于 Visual Studio 的 HDInsight 工具提供了在 HDInsight 上使用 Hive 查询的轻松方式。

有关 HDInsight 中的 Hive 的一般信息:

有关 HDInsight 上 Hadoop 的其他使用方法的信息:

有关适用于 Visual Studio 的 HDInsight 工具的详细信息: