HIVE查询与Hadoop提供的mapreducers数量之间的关系?

时间:2014-05-09 18:32:05

标签: hadoop mapreduce hive

我在HIVE shell中执行查询

SELECT tradeId, bookid, foid from trades where bookid='"ABCDEFG"'

“交易” bookid 上有索引。查询运行时,它会显示Mappers和Reducers的详细信息,如下所示: -

Number of reduce tasks is set to 0 since there's no reduce operator
Hadoop job information for Stage-1: number of mappers: 48; number of reducers: 0
Time taken: **606.183 seconds**, Fetched: **18 row(s)**

如果你看到花了很多时间才能获取18行。我的问题是我在这里做错了什么?救命人员应该不为零吗?如果我使用

设置它会有帮助吗?
set mapred.reduce.tasks = some_number

索引不应该帮助更快地检索数据吗?

1 个答案:

答案 0 :(得分:1)

当您进行简单选择时,所有过滤事物和列选择都由映射器本身完成。这里没有减速器任务的目的,因此减速器的数量为零 - 这很好。您的表中可能有大约48 *块大小的数据量,因此它产生了48个映射器。您有多少个地图位置,当您解雇查询时,它们有多少是免费的?所有48个机会都没有并行运行。虽然它只返回了18行,但它读取了整个表格。您的表格是否在bookid列上进行了分组和聚类 - 在这种情况下,您可以使用TABLESAMPLE子句使其只读取包含ABCDEFG值的存储区。