更新时间:2025-08-09 GMT+08:00

运行HiveSql作业

HiveSql作业是基于Hive数据仓库工具编写和运行的数据分析任务,主要用于在Hadoop分布式集群上处理大规模结构化或半结构化数据。HiveSQL是Hive定义的SQL方言,语法与标准SQL类似,但针对大数据场景做了优化,可将SQL语句转换为MapReduce或Spark任务执行,适合非编程人员快速实现数据查询、统计和分析。

用户可将自己开发的程序提交到MRS中,执行程序并获取结果,本章节指导您如何在MRS集群中提交一个HiveSql作业。

HiveSql作业支持SQL语句和Script脚本两种形式,如果SQL语句中涉及敏感信息,也可使用脚本文件方式提交。

用户可以在MRS管理控制台在线创建一个作业并提交运行,也可以通过MRS集群客户端来以命令行形式提交作业。

前提条件

  • 用户已经将作业所需的程序包和数据文件上传至OBS或HDFS文件系统中。
  • 如果作业程序需要读取以及分析OBS文件系统中的数据,需要先配置MRS集群的存算分离,请参考配置MRS集群存算分离

约束与限制

  • 当IAM用户的用户组的所属策略从MRS ReadOnlyAccess向MRS CommonOperations、MRS FullAccess、MRS Administrator变化时,或者反之从MRS CommonOperations、MRS FullAccess、MRS Administrator向MRS ReadOnlyAccess变化时,由于集群节点的SSSD(System Security Services Daemon)缓存刷新需要时间,因此用户同步完成后,请等待5分钟,待新策略生效之后,再到MRS管理控制台在线提交作业,否则会出现提交作业失败的情况。
  • 当前IAM用户名中存在空格时(例如admin 01),不支持通过MRS管理控制台添加作业。

提交作业

用户可通过管理控制台在线创建并运行作业,也可以通过集群客户端命令方式手动提交。

  1. 开发SQL脚本。

    HiveSql作业可以直接执行SQL语句,也可以指定执行开发好的SQL脚本文件。

    在本章节示例中,以在Hive中创建数据库、数据表并插入数据的脚本为例,将开发好的脚本“hive_basic.sql”文件上传至HDFS、OBS或者MRS集群节点本地的指定目录中,请参考上传应用数据至MRS集群

    -- 创建数据库
    CREATE DATABASE IF NOT EXISTS test_db;
    -- 使用数据库
    USE test_db;
    -- 创建数据表
    CREATE TABLE IF NOT EXISTS test_table (
        id INT,
        name STRING,
        age INT,
        gender STRING
    )
    ROW FORMAT DELIMITED
    FIELDS TERMINATED BY ',';
    -- 插入单行数据
    INSERT INTO test_table VALUES (1, 'Zhangsan', 30, 'Male');

  2. 登录MRS管理控制台
  3. 选择“现有集群”,选中一个运行中的集群并单击集群名称,进入集群概览信息页面。
  4. “概览”页签中,单击“IAM用户同步”右侧的“同步”进行IAM用户同步。

    集群开启Kerberos认证时需执行该步骤,若集群未开启Kerberos认证,无需执行本步骤。

    IAM用户同步完成后,请等待5分钟,再进行提交作业,更多IAM用户同步说明请参考IAM用户同步MRS集群说明

  5. 单击“作业管理”,在作业列表界面单击“添加”。
  6. “作业类型”选择“HiveSql”并参考表1配置HiveSql作业信息。

    图1 添加HiveSql作业
    表1 作业配置信息

    参数

    描述

    示例

    作业名称

    作业名称,只能由字母、数字、中划线和下划线组成,并且长度为1~64个字符。

    hive_job

    SQL类型

    SQL语句提交类型。

    • SQL:直接运行手动输入的SQL语句。
    • Script:以加载HDFS或者OBS中的SQL脚本文件运行SQL。

    Script

    SQL语句

    “SQL类型”参数为“SQL”时参数有效,请输入待运行的SQL语句,然后单击“检查”来检查SQL语句的正确性,确保输入语句正确。

    如果同时需要提交多条语句并执行,可使用“;”分隔不同语句。

    -

    SQL文件

    “SQL类型”参数为“Script”时参数有效,待执行SQL文件的路径,可直接手动输入地址路径,也可单击“HDFS”或者“OBS”选择文件。

    • 路径地址最多为1023字符,不能包含;|&>,<'$特殊字符,且不可为空或全空格。
    • OBS程序路径地址以“obs://”开头,HDFS程序路径地址以“hdfs://hacluster”开头,例如“hdfs://hacluster/user/XXX.jar”。
    • HiveScript文件需要以“.sql”结尾。

    obs://mrs-demotest/program/hive_basic.sql

    运行程序参数

    可选参数,为本次执行的作业配置相关优化参数(例如线程、内存、CPU核数等),用于优化资源使用效率,提升作业的执行性能。

    HiveSql作业常用的运行程序参数如表2所示,可根据执行程序及集群资源情况进行配置,若不配置将使用集群默认值。

    -

    服务配置参数

    可选参数,用于为本次执行的作业修改服务配置参数。

    该参数的修改仅适用于本次执行的作业,如需对集群永久生效,请参考修改MRS集群组件配置参数进行集群组件配置参数的修改。

    例如在MRS集群未配置存算分离的场景下,作业需要通过AK/SK方式访问OBS,可增加以下服务配置参数:

    • fs.obs.access.key:访问OBS的密钥ID。
    • fs.obs.secret.key:访问OBS与密钥ID对应的密钥。

    -

    命令参考

    用于展示提交作业时提交到后台执行的命令。

    N/A

    表2 HiveSql作业运行程序参数

    参数

    参数说明

    取值样例

    --hiveconf

    设置Hive服务相关配置。

    例如指定执行引擎,可设置“hive.execution.engine”为“mr”或者“tez”。

    • 参数:--hiveconf
    • 值:"hive.execution.engine=mr"

    --hivevar

    设置用户的自定义变量。

    例如设置变量ID:

    • 参数:--hivevar id
    • 值:"123" select * from test where id = ${hivevar:id};

  7. 确认作业配置信息,单击“确定”,完成作业的新增。
  8. 作业提交成功中,可在作业列表中查看作业运行状态及执行结果,等待作业状态变为“已完成”,可查看相关程序分析结果。

    在本示例程序中,单击“查看日志”,可查看Hive作业的详细执行过程。

    图2 查看作业执行详情

    作业运行成功后,通过客户端连接Hive Beeline,可查看相关的Hive表数据。

    1. 如果当前集群已开启Kerberos认证,需提前在Manager界面中创建一个具有对应作业提交权限的业务用户,请参考创建MRS集群用户

      本示例中,创建一个人机用户testuser,关联用户组“supergroup”及角色“System_administrator”。

    2. 安装MRS集群客户端。

      具体操作可参考安装MRS集群客户端

      MRS集群中默认安装了一个客户端用于作业提交,也可直接使用该客户端。MRS 3.x及之后版本客户端默认安装路径为Master节点上的“/opt/Bigdata/client”,MRS 3.x之前版本为Master节点上的“/opt/client”。

    3. 执行以下命令进入客户端安装目录。
      cd /opt/Bigdata/client

      加载环境变量:

      source bigdata_env

      如果当前集群已开启Kerberos认证,执行以下命令进行用户认证,如果当前集群未开启Kerberos认证,则无需执行kinit操作。

      kinit testuser
    4. 进入Hive Beeline并查看生成的数据。
      beeline

      查看生成的Hive表数据。

      select * from test_db.test_table;
      图3 查看Hive表数据

  1. 开发SQL脚本。

    HiveSql作业可以直接执行SQL语句,也可以指定执行开发好的SQL脚本文件。

    在本章节示例中,以在Hive中创建数据库、数据表并插入数据的脚本为例,将开发好的脚本“hive_basic.sql”文件上传至HDFS、OBS或者MRS集群节点本地的指定目录中,请参考上传应用数据至MRS集群

    -- 创建数据库
    CREATE DATABASE IF NOT EXISTS test_db;
    -- 使用数据库
    USE test_db;
    -- 创建数据表
    CREATE TABLE IF NOT EXISTS test_table (
        id INT,
        name STRING,
        age INT,
        gender STRING
    )
    ROW FORMAT DELIMITED
    FIELDS TERMINATED BY ',';
    -- 插入单行数据
    INSERT INTO test_table VALUES (1, 'Zhangsan', 30, 'Male');

  2. 如果当前集群已开启Kerberos认证,需提前在Manager界面中创建一个具有对应作业提交权限的业务用户,请参考创建MRS集群用户

    本示例中,创建一个人机用户testuser,关联用户组“supergroup”及角色“System_administrator”。

  3. 安装MRS集群客户端。

    具体操作可参考安装MRS集群客户端

    MRS集群中默认安装了一个客户端用于作业提交,也可直接使用该客户端。MRS 3.x及之后版本客户端默认安装路径为Master节点上的“/opt/Bigdata/client”,MRS 3.x之前版本为Master节点上的“/opt/client”。

  4. 使用MRS集群客户端安装用户登录客户端所在的节点。

    具体操作可参考登录MRS集群节点

  5. 执行以下命令进入客户端安装目录。

    cd /opt/Bigdata/client

    加载环境变量:

    source bigdata_env

    如果当前集群已开启Kerberos认证,执行以下命令进行用户认证,如果当前集群未开启Kerberos认证,则无需执行kinit操作。

    kinit testuser

  6. 通过beeline命令连接Hive并运行相关作业。

    beeline -f /opt/hive_basic.sql

    也可以执行beeline命令后,直接在beeline中执行SQL语句。

    beeline

    脚本执行完成后,可在beeline中查看生成的Hive表数据。

    select * from test_db.test_table;
    图4 查看Hive表数据

    未开启Kerberos认证的集群,可执行以下命令指定组件业务用户,如果不指定则会以当前操作系统用户连接HiveServer。

    beeline -nMRS集群业务用户

  7. 对于提交到Yarn执行的作业,可使用testuser用户登录集群Manager页面,选择“集群 > 服务 > Yarn”,单击“ResourceManager Web UI”右侧的超链接进入Yarn WebUI页面,单击对应作业的Application ID,即可查看作业运行信息及相关日志。

    图5 查看HiveSql作业详情

相关文档