在AWS弹性地图上加入性能减少运行配置单元

时间:2012-06-27 12:27:48

标签: amazon-ec2 hive hdfs elastic-map-reduce

我正在运行一个简单的连接查询

 select count(*) from t1 join t2 on t1.sno=t2.sno 

表t1和t2每个都有2000万条记录,而列sno是字符串数据类型。

表格数据以rcfile格式从Amazon s3导入HDFS。 该查询耗时109s,包含15个Amazon大型实例,但在sql server上需要42秒,内存为16 GB,内核为16个cpu。

我错过了什么吗?无法理解为什么我在亚马逊上的表现会变慢?

1 个答案:

答案 0 :(得分:2)

有助于您调整Hadoop性能的一些问题:

  • 这些实例的IO利用率是什么样的?也许大型实例不是作业的CPU /磁盘/内存的正确平衡。
  • 您的文件是如何存储的?它是单个文件还是许多小文件? Hadoop对许多小文件来说并不热,即使它们是可组合的
  • 你跑了多少减速器?您希望将大约0.9 * totalReduceCapacity视为理想
  • 您的数据有多歪斜?如果有许多具有相同键的记录,它们将全部转到同一个reducer,如果你不小心,你将在该reducer中有O(n * n)上限。

sql-server可能没有40mm记录,但要等到你有20n条记录,看看它是怎么做的。它可能会破裂。我认为hive更像是Map Reduce的一个聪明的包装器,而不是真正的数据库的替代品。

同样根据经验,我认为拥有15个c1.medium可能与大型机器一样好,如果不是更好的话。大型机器没有正确的CPU /内存平衡。