java - 通过 JDBC 访问 Cloudera Hive 时如何将执行引擎设置为 spark
问题描述
我无法在通过 jdbc 执行的脚本中设置 hive 的执行引擎。当通过hue web前端执行相同的脚本时,脚本会注意到我正在尝试将执行引擎设置为spark而不是通过jdbc
List<String> result = hiveTemplate.query(script);
脚本示例
set hive.execution.engine=spark;
SELECT * from ......
我已经尝试在类路径中执行一个实际的脚本,我还尝试通过如上所述的 jdbc 发送一个表示 sql 脚本的字符串。
我还尝试在数据源中包含以下内容,其中包含connectionProperties
创建的工厂类hiveTemplate
:
public static HiveTemplate createHiveTemplate(HiveExecutionEngine engine) {
Properties props=new Properties();
switch (engine) {
case MAP_REDUCE:
props.setProperty("hive.execution.engine", "mr");
props.setProperty("mapreduce.map.memory.mb", "16000");
props.setProperty("mapreduce.map.java.opts", "Xmx7200m");
props.setProperty("mapreduce.reduce.memory.mb", "16000");
props.setProperty("mapreduce.reduce.java.opts", "Xmx7200m");
break;
case SPARK:
props.setProperty("hive.execution.engine", "spark");
break;
default:
throw new NotImplementedException();
}
datasource.setConnectionProperties(props);
return new HiveTemplate(() -> {
return new HiveClient(datasource);
});
}
流动的链接显示了设置执行引擎的文档: https ://cwiki.apache.org/confluence/display/Hive/Hive+on+Spark%3A+Getting+Started
set hive.execution.engine=spark;
我希望脚本通过纱线中的火花引擎执行,而不是使用正在发生的 map reduce。我可以通过查看错误消息并通过 Cloudera Manager 查看作业历史记录来确认应用了错误的引擎
有没有人成功地通过 jdbc 执行 hiveql 脚本来使用 spark 引擎?
解决方案
关于这个问题的更新:
如果您将配置属性添加到驱动程序 url,它似乎可以工作
jdbc:hive2://<ip>:10000?hive.execution.engine=spark
这仍然不是理想状态,而是一种解决方案:
如果有人通过 java config 做到了这一点,我会很高兴收到你的来信
推荐阅读
- ios - 当表格视图内容偏移以避免可见键盘时,UITableView.indexPathsForVisibleRows 未返回正确的值
- git - 将代码从一个分支添加到另一个分支时,Git cherry-pick 命令不起作用
- snmp - Net-SNMP snmptrap 不发送 EngineBoots
- google-sheets - 查询等于单元格范围的位置
- javascript - Chrome contextMenu 专门在 iframe 内返回元素
- c# - 如何在统一项目中访问 ac# 脚本变量
- javascript - 如何在 JavaScript 中从 Uint8Array 创建 PDF 文件
- python - 从另一个 python 类“继承”@property
- objective-c - 在 Objective-C 中,是否有一种优雅的方式将 NSFileHandle 对象的整个输入转发到另一个 NSFileHandle 对象?也许是处理程序?
- sql - 使用 SQL 将 cron 表达式转换为日期范围