【问题标题】:Amazon EMR not utilizing all the nodesAmazon EMR 未使用所有节点
【发布时间】:2013-05-29 10:16:06
【问题描述】:

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

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

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

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

表格查询

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

reducer 数量=1,mapper 数量=1

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

但它不起作用。

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

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

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

【问题讨论】:

  • 我没有登录S3。如何检查tasktracjer是否正常工作?

标签: hadoop hive emr


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-07
    • 1970-01-01
    • 1970-01-01
    • 2016-03-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多