2

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

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

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

表数据以 rcfile 格式从 Amazon s3 导入 HDFS。15 个 Amazon 大型实例的查询耗时 109 秒,但在 16 GB RAM 和 16 个 cpu 内核的 sql server 上耗时 42 秒。

我错过了什么吗?不明白为什么我在亚马逊上的表现会变慢?

4

1 回答 1

2

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

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

sql-server 可以处理 40 毫米的记录,但是等到你有 20 亿条记录后再看看它是如何工作的。它可能会破裂。我将 hive 更多地视为 Map Reduce 的巧妙包装器,而不是真实数据库的替代品。

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

于 2012-06-28T16:03:48.577 回答