apache-spark - 蜂巢上的火花 - 为什么不“选择*”产生火花应用程序/执行程序?
问题描述
我在 Spark(执行引擎)上设置了 Hive(v2.3.4)。
这将启动一个 spark 应用程序/执行程序:
select count(*) from s.t where h_code = 'KGD78' and h_no = '265'
为什么这不启动 spark 应用程序/执行程序:
select * from s.t where h_code = 'KGD78' and h_no = '265'
解决方案
这 - 第二种情况 - 是由于不太知名的“hive.fetch.task.conversion”参数。
根据设置方式,Hive 可以启动单个“获取任务”而不是 Map Reduce 作业,即使使用过滤器即 where 子句。
如果您选择 * 或非分区列,它将启动 fetch 任务而不是 MR 作业 - 单线程。单线程并不总是一件好事。count(*) 应该不言自明,您可能需要进行大量处理,第二种情况可以看作是光标。
您可以在 hive-site.xml 中将参数更改为“minimal”或“none”来避免这种类型的处理。
好眼力。
推荐阅读
- c# - Xamarin.Forms Shell + ReactiveUI 选项卡加载性能(在 Android 上)
- javascript - 当用户单击某些链接时更改谷歌地图标记图标
- bash - docker 图像输出操作
- ruby-on-rails - 如何使用 POST 请求通过 link_to 传递参数?
- java - 如何在数组中显示分段信息?
- python - mysql 查询过滤器 LIKE 无法正常工作
- linux - 使用 Shell 脚本在 URL 中查找 (/) 的第一次出现
- java - AWS StartSpeechSynthesisTaskRequest
- postgresql-11 - 错误:[050]:无法获取文件“/tmp/pgbackrest/demo-archive.lock”的锁定:权限被拒绝
- javascript - 如何将折线添加到传单地图中