Hive 如何决定何时使用 MapReduce、何时不使用?

发布于 2024-12-05 09:25:14 字数 188 浏览 2 评论 0原文

举个简单的例子,

select * from tablename;

地图缩减不会启动,但

select count(*) from tablename;

会启动。决定何时使用MapReduce(通过Hive)的一般原则是什么?

As a simple example,

select * from tablename;

DOES NOT kick in map reduce, while

select count(*) from tablename;

DOES. What is the general principle used to decide when to use map reduce (by hive)?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

夏九 2024-12-12 09:25:14

一般来说,任何类型的聚合,例如最小/最大/计数都需要 MapReduce 作业。这可能无法为您解释一切。

Hive 与许多 RDBMS 的风格一样,有一个 EXPLAIN 关键字它将概述您的 Hive 查询如何转换为 MapReduce 作业。尝试对两个示例查询运行解释,看看它在幕后试图做什么。

In general, any sort of aggregation, such as min/max/count is going to require a MapReduce job. This isn't going to explain everything for you, probably.

Hive, in the style of many RDBMS, has an EXPLAIN keyword that will outline how your Hive query gets translated into MapReduce jobs. Try running explain on both your example queries and see what it is trying to do behind the scenes.

夏夜暖风 2024-12-12 09:25:14

每当我们触发像 select * from tablename 这样的查询时,Hive 都会读取数据文件并获取整个数据,而不进行任何聚合(最小/最大/计数等)。它将调用 FetchTask 而不是 ma​​preduce 任务。

这也是Hive中的一种优化技术。 hive.fetch.task.conversion属性可以(即FETCH任务)最小化map-reduce开销的延迟。

这就像我们正在读取一个hadoop文件:hadoop fs -cat filename

但是如果我们使用select colNames from tablename,它需要一个map-减少作业,因为它需要通过从加载的文件中解析每一行来提取“列”。

Whenever we fire a query like select * from tablename, Hive reads the data file and fetches the entire data without doing any aggregation(min/max/count etc.). It'll call a FetchTask rather than a mapreduce task.

This is also an optimization technique in Hive. hive.fetch.task.conversion property can (i.e. FETCH task) minimize latency of map-reduce overhead.

This is like we are reading a hadoop file : hadoop fs -cat filename

But if we use select colNames from tablename, it requires a map-reduce job as it needs to extract the 'column' from each row by parsing it from the file it loads.

开始看清了 2024-12-12 09:25:14

从表名中选择*;

只需从 HDFS 中的文件中读取原始数据,因此无需 MapReduce 即可更快。

select * from tablename;

Just reads raw data from files in HDFS, so it is much faster without MapReduce.

柠檬色的秋千 2024-12-12 09:25:14

这是一种优化技术,hive.fetch.task.conversion 属性可以 (FETCH) 任务最小化 MapReduce 开销的延迟。

当执行 SELECT、LIMIT、FETCH 查询时,此属性会跳过 MapReduce 并使用 FETCH 任务。

此属性可以有 3 个值 - noneminimal(默认值)和 more

It is an optimisation technique, hive.fetch.task.conversion property can (FETCH) task minimize latency of mapreduce overhead.

When doing SELECT, LIMIT, FETCH queries this property skips mapreduce and uses the FETCH task.

This property can have 3 values - none, minimal (the default) and more.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文