You need to enable JavaScript to run this app.
导航
Serverless Hive 作业开发指南
最近更新时间:2025.03.14 14:24:45首次发布时间:2025.03.14 14:24:45
我的收藏
有用
有用
无用
无用

HiveSQL作业管理

简介

EMR Serverless Hive 支持用户提交 Hive SQL 作业,您可在 EMR Serverless 控制台,完成 Hive SQL 任务提交。开箱即用,无需额外的集群管理。EMR Serverless Hive 语法 100%兼容开源 Hive 3.1.3 版本。

统一元数据管理

通过独立服务 LAS 提供统一元数据服务和权限管控服务。详细操作请参考:对接 LAS

执行引擎

支持 Hive on MR 和 Hive on Tez 两种执行引擎,默认使用 Tez。您可以通过设置参数进行切换:

-- 使用 mr
set hive.execution.engine=mr;
-- 使用 tez
set hive.execution.engine=tez;

可视化提交

  1. 进入EMR Serverless > 选择队列 > 创建作业页面,开发类型选择 HiveSQL。

说明

也可在SQL编辑器页面选择合适队列资源,目前HiveSQL仅支持默认计算组。

  1. 页面左侧可浏览元数据信息,目前 HiveSQL 仅支持 hive Catalog。

Image

Query SDK使用

使用 Query SDK 提交 HiveSQL 任务的方法可参考 Spark 任务,另需增加 tqs.query.engine.type=hive 参数配置**。**

Java SDK

详细操作参考:Java Query SDK

import com.volcengine.emr.serverless.SQLTask;
import com.volcengine.emr.serverless.Job;
import com.volcengine.emr.serverless.JobStatus;

String sql = "${your_sql_statement}";  // 待执行的sql
String taskName = "${your_task_name}";  // SQL作业名
String queueName = "${your_queue_name}";  // 需要使用的队列,可选参数,不填将自动选取
SQLTask sqlTask = SQLTask.builder(sql)
  .name(taskName)
  .queue(queueName)
  // 用于传入一些任务参数,注意这里选择引擎类型,默认是SparkSQL
  .addConf("tqs.query.engine.type", "hive")
  .sync(true) // 同步执行直至任务完成
  .build();

// 执行任务
Job job = client.executeSQL(sqlTask);

assertEquals(JobStatus.COMPLETED.status(), job.getStatus());

Python SDK

详细操作参考:Python Query SDK

def execute_sql_task():
    from serverless.client import ServerlessClient
    from serverless.auth import StaticCredentials
    from serverless.task import SQLTask
    from serverless.exceptions import QuerySdkError

    ak = 'xxxx'
    sk = 'xxxx'
    region = 'cn-beijing'
    service = 'emr_serverless'
    endpoint = 'open.volcengineapi.com'
    sql = '${CUSTOM_SQL_STATEMEMT}'

    client = ServerlessClient(credentials=StaticCredentials(ak, sk), service=service, region=region,endpoint=endpoint)

    try:
        job = client.execute(task=SQLTask(name='sql task', query=sql, conf={'tqs.query.engine.type': 'hive'}), is_sync=True)
        if job.is_success():
            result = job.get_result()
            for record in result:
                print(', '.join([col for col in record]))

    except QuerySdkError as e:
        print(
            "Error in executing sql task. code = %s, error = %s" % (
            e.error_code, e.info))


if __name__ == "__main__":
    execute_sql_task()

JDBC使用

EMR Serverless Hive 支持使用 JDBC 来提交任务,您可以使用标准 JDBC 接口来访问 EMR Serverless Spark,还可以与市面上常见的BI软件进行结合。

环境准备

依赖:JDK 1.8
JDBC 下载地址:emr-serverless-spark-jdbc-driver.jar

示例代码

Class.forName("org.volcano.serverless.spark.jdbc.EMRServerlessSparkDriver");
Properties properties = new Properties();
properties.setProperty("user", "Ax");
properties.setProperty("password", "xx");
Connection conn = DriverManager.getConnection("jdbc:emr-serverless-spark://serverless-spark-jdbc.emr.cn-beijing.volces.com:10009/;queue_name=queueName-computeGroup?kyuubi.engine.type=HIVE_SQL&kyuubi.engine.share.level=CONNECTION", properties);
Statement statement = conn.createStatement();
String sql = "select 1";
ResultSet resultSet = statement.executeQuery(sql);
System.out.println(resultSet.getString(1));

JDBC连接串说明

jdbc:emr-serverless-spark://${endpoint}:10009/;queue_name=${queueName}&user=${AccessKey}&password=${SecretKey}?kyuubi.engine.type=HIVE_SQL&kyuubi.engine.share.level=CONNECTION

参数名

说明

endpoint

连接EMR Serverless Spark 的地址,region 地址如下。

  • 华北:serverless-spark-jdbc.emr.cn-beijing.volces.com
  • 华东:serverless-spark-jdbc.emr.cn-shanghai.volces.com
  • 华南:serverless-spark-jdbc.emr.cn-guangzhou.volces.com
  • 柔佛:serverless-spark-jdbc.emr.ap-southeast-1.volces.com

queue_name

连接使用的队列和计算组名称,不填默认使用公共队列。格式: ${队列}-${计算组}

user

填写租户的 AccessKey

password

填写租户的 SecretKey

kyuubi.engine.type

指定引擎类型, 这里需要指定成 HIVE_SQL,默认是 SparkSQL

kyuubi.engine.share.level

默认使用 connection share level,任务间不共享 hive client(推荐)