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 未使用所有节点的主要内容,如果未能解决你的问题,请参考以下文章
如何将文件从 S3 复制到 Amazon EMR HDFS?