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