Amazon EMR 未使用所有节点

Posted

技术标签:

【中文标题】Amazon EMR 未使用所有节点【英文标题】:Amazon EMR not utilizing all the nodes 【发布时间】: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是否正常工作? 【参考方案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(或更多)更容易证明是合理的。

【讨论】:

以上是关于Amazon EMR 未使用所有节点的主要内容,如果未能解决你的问题,请参考以下文章

EMR [使用 MRJob] 的输入数据如何跨节点分布?

如何将文件从 S3 复制到 Amazon EMR HDFS?

如何在 Amazon EMR 上将连接器添加到 presto

AWS CLI EMR 获取主节点实例 ID 并标记它

EMR Hadoop 并未利用所有集群节点

Amazon EMR:Pyspark 有奇怪的依赖问题