我正在使用4个核心节点..
我正在使用配置单元在桌面上运行查询。
各种查询似乎都在利用容量。
我的表由8个整数字段和大约1000行组成。
表单的查询
从tbl中选择avg(col1-col2); 从tbl中选择count(*); 以及我试过的其他所有查询 正在制作
reducer的数量= 1,mappers的数量= 1
我尝试过使用set mapred.reduce.tasks = 4;
但它不起作用。
最奇怪的是,当我使用mapred.job.tracker = local这意味着一个地图和一个减少本地节点本身时,任务完成的速度提高了两倍。
除了一个之外的所有缩小/地图插槽都是一直打开的。
为什么不增加容量甚至略微改善执行时间? 我的数据样本是否如此之小以至于增加容量并不重要,并且映射和减少本地化实际上会缩短时间?
答案 0 :(得分:2)
您获得单个映射器的原因是因为您的表太小了。我假设你的1000行表是一个比你的HDFS块大小小得多的文件。尝试一百万行或更大的表,您将开始看到它使用多个映射器。 The answers to this question提供了有关如何选择映射器数量的更多信息。
您获得单个减速器的原因是两件事的组合。首先,您正在处理少量数据(对于Hive),因此您最终会得到一个减速器。其次,一些查询(如COUNT(*) FROM some_table
)必须有一个reducer(see the question here)
你指出了为什么在本地运行作业的速度更快。 1000行表非常适合测试查询的逻辑,但不能用于确定运行时之类的内容。一旦您拥有GB顺序的数据,在群集而不是本地运行Hive可能只会开始变得更好。 Hive绝对不是“正确的工作工具”,直到你进入触及至少10 GB的查询,尽管100的GB或TB(或更多)更容易证明。