1

我正在使用4个核心节点..

我正在使用 hive 在表上运行查询。

各种查询似乎都在利用容量。

我的表由 8 个整数字段和大约 1000 行组成。

表格查询

从 tbl 中选择 avg(col1-col2);从 tbl 中选择计数(*);我尝试过的所有其他查询都在产生

减速器数量=1,映射器数量=1

我试过使用 set mapred.reduce.tasks=4;

但它不起作用。

最奇怪的是,当我使用 mapred.job.tracker=local 时,这意味着本地节点本身上的一个 map 和一个 reduce 任务完成的速度是原来的两倍。

除一个之外的所有reduce/map 插槽始终处于打开状态。

为什么增加容量甚至没有稍微改善执行时间?我的数据样本是否如此之小以至于增加容量无关紧要并且本地化映射和缩减实际上可以缩短时间?

4

1 回答 1

2

你得到一个映射器的原因是你的表太小了。我假设你的 1000 行表是一个比你的 HDFS 块大小小得多的文件。尝试一百万行或更大的表,您将开始看到它使用多个映射器。这个问题的答案有更多关于如何选择映射器数量的信息。

你得到一个减速器的原因是两件事的结合。首先,您正在处理少量数据(对于 Hive),因此您最终得到了一个 reducer。其次,一些查询(如COUNT(*) FROM some_table)必须有一个减速器(请参阅此处的问题

您确定了为什么在本地运行作业更快。1000 行表非常适合测试查询的逻辑,但不适用于确定运行时之类的东西。在集群上而不是在本地运行 Hive 可能只有在您拥有 GB 量级的数据后才会开始变得更好。Hive 绝对不是“适合这项工作的工具”,除非您进行涉及至少 10 GB 的查询,尽管 100 GB 或 TB(或更多)更容易证明是合理的。

于 2013-05-29T13:32:16.497 回答