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;
说明
也可在SQL编辑器页面选择合适队列资源,目前HiveSQL仅支持默认计算组。
使用 Query SDK 提交 HiveSQL 任务的方法可参考 Spark 任务,另需增加 tqs.query.engine.type=hive 参数配置**。**
详细操作参考: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 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()
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: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 地址如下。
|
queue_name | 连接使用的队列和计算组名称,不填默认使用公共队列。格式: ${队列}-${计算组} |
user | 填写租户的 AccessKey |
password | 填写租户的 SecretKey |
kyuubi.engine.type | 指定引擎类型, 这里需要指定成 HIVE_SQL,默认是 SparkSQL |
kyuubi.engine.share.level | 默认使用 connection share level,任务间不共享 hive client(推荐) |