hive - 为什么在 Hive 查询中选择较少的列时会发生 Java OutOfMemoryError?
问题描述
我有两个配置单元选择语句:
select * from ode limit 5;
这成功地从表“ode”中提取了 5 条记录。所有列都包含在结果中。但是,以下查询导致错误:
select content from ode limit 5;
其中“内容”是表中的一列。错误是:
hive> select content from ode limit 5;
Total jobs = 1
Launching Job 1 out of 1
Number of reduce tasks is set to 0 since there's no reduce operator
java.lang.OutOfMemoryError: Java heap space
at java.util.Arrays.copyOfRange(Arrays.java:3664)
at java.lang.String.<init>(String.java:207)
第二个查询应该便宜很多,为什么会导致内存问题?如何解决这个问题?
解决方案
当你选择整个表时,Hive 会触发 Fetch 任务而不是 MR 不涉及解析(就像调用hdfs dfs -cat ... | head -5
)。
据我在您的情况下可以看到,配置单元客户端尝试在本地运行地图。
您可以选择以下两种方式之一:
您可以在此处找到有关获取任务的更多详细信息。
推荐阅读
- amazon-web-services - AWS SAM 部署错误 - 验证错误 | CreateChangeSet 操作错误
- sql-server - 如果在给定的日期时间为空,则获取最后一个值
- amazon-redshift - UNION 查询 Redshift 性能不佳
- xaml - 应用程序背景的 Xamarin 徽标背景
- xjc - org.jvnet.jaxb2_commons:jaxb2-basics 的替代品
- python - 在 python 3.8 中进行语音识别(JARVIS)时出错
- javascript - 如何在特定时间点中断异步功能
- amazon-web-services - AWS Java SDK Cloudformation 无法按名称或 Id 描述堆栈
- javascript - ExpoLocalAuthentication 反应本机错误
- airflow - KubernetesPodOperator xcom_push 键/值不可用于带有 xcom_pull 的后续任务