amazon-ec2 - AWS 弹性 map 上的加入性能减少运行配置单元

标签 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。 该查询在 15 个 Amazon 大型实例上花费了 109 秒,但在具有 16 GB RAM 和 16 个 CPU 核心的 SQL Server 上花费了 42 秒。

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

最佳答案

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

  • 这些实例上的 IO 利用率如何?也许大型实例不适合该作业的 CPU/磁盘/内存平衡。
  • 您的文件是如何存储的?是单个文件,还是许多小文件? Hadoop 对于许多小文件来说并不是那么受欢迎,即使它们是可以组合的
  • 您运行了多少个 reducer ?您希望有大约 0.9*totalReduceCapacity 作为理想值
  • 您的数据有多大偏差?如果有许多具有相同键的记录,它们都会进入同一个 reducer ,如果不小心的话,该 reducer 中的上限将是 O(n*n)。

sql-server 可能适合 40 毫米的记录,但等到你有 20 亿条记录时,看看它的表现如何。它可能会破裂。我更倾向于将 Hive 视为 MapReduce 的巧妙包装,而不是真正数据库的替代品。

根据经验,我认为拥有 15 个 c1.mediums 的性能可能与大型机器一样好,甚至更好。老实说,大型机器没有正确的 CPU/内存平衡。

关于amazon-ec2 - AWS 弹性 map 上的加入性能减少运行配置单元,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11226199/

相关文章:

hive - 在配置单元中添加一个具有常量值的新列

model - 在HIVE中我们如何在建表语句中定义Not NULL列?

hadoop - 将数据从 Hadoop 传输到 Google Cloud Storage 时如何加快 distcp 速度

python - 从 EC2 实例本地访问 Amazon S3 Bucket

linux - 亚马逊 EC2 上的 ncftpget 不工作 (centos)

amazon-web-services - 亚马逊雅典娜的分区表

hadoop getmerge到另一台机器

Hadoop fs查找 block 大小?

mysql - 如何更新 EC2 LAMP 服务器上的 phpMyAdmin?

amazon-web-services - 用于将 IAM 角色附加到现有 EC2 实例的 Ansible 模块