配置单元查询与Hadoop提供的MapReducer数量之间的关系?

配置单元查询与Hadoop提供的MapReducer数量之间的关系?,hadoop,mapreduce,hive,Hadoop,Mapreduce,Hive,我正在配置单元外壳中执行一个查询 SELECT tradeId, bookid, foid from trades where bookid='"ABCDEFG"' 表“交易”在bookid上有索引。查询运行时,将显示映射器和还原器的详细信息,如下所示:- Number of reduce tasks is set to 0 since there's no reduce operator Hadoop job information for Stage-1: number of mapper

我正在配置单元外壳中执行一个查询

SELECT tradeId, bookid, foid from trades where bookid='"ABCDEFG"'
“交易”bookid上有索引。查询运行时,将显示映射器和还原器的详细信息,如下所示:-

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

索引是否有助于更快地检索数据?

当您执行简单选择时,所有筛选操作和列选择都由映射程序自己完成。这里并没有减速器任务的用途,所以减速器的数量是零——这很好。您的表中可能有大约48*块大小的数据量,因此产生了48个映射器。每个DN有多少个映射槽,在您启动查询时有多少个是空闲的?很有可能所有的48个都不是并行运行的。虽然它只返回了18行,但它读取了整个表。您的表是否在bookid列上进行了扣合和聚集-在这种情况下,您可以使用
TABLESAMPLE
子句使其只读包含ABCDEFG值的存储桶。

如果您可以提供一些关于集群的附加信息,可能会有所帮助。您正在使用多少工作节点?Hadoop/Hive的哪个发行版/版本?另外,查看在查询上运行解释的输出,如
EXPLAIN SELECT tradeId,bookid,foid from trade,其中bookid=''ABCDEFG'
。使用6个节点,配置单元版本为0.12(基于Hive-hwi-0.12.0-cdh5.0.jar),Hadoop版本为2.3(基于Hadoop 2.3.0-cdh5.0.0)