2

単純な結合クエリを実行しています

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

テーブルt1とt2は両方ともそれぞれ2000万レコードを持ち、列snoは文字列データ型です。

テーブルデータは、Amazons3からrcfile形式でHDFSにインポートされます。クエリは15のAmazonラージインスタンスで109秒かかりましたが、16GBのRAMと16のCPUコアを備えたSQLサーバーでは42秒かかりました。

私は何かが足りないのですか?Amazonでパフォーマンスが低下する理由がわかりませんか?

4

1 に答える 1

2

Hadoop パフォーマンスの調整に役立ついくつかの質問:

  • これらのインスタンスでの IO 使用率はどのように見えますか? 大規模なインスタンスは、ジョブの CPU / ディスク / メモリの適切なバランスではない可能性があります。
  • ファイルはどのように保存されていますか? 単一のファイルですか、それとも多数の小さなファイルですか? Hadoop は、結合可能であっても、多くの小さなファイルでそれほどホットではありません
  • レデューサーはいくつ実行しましたか? 理想としては約 0.9*totalReduceCapacity が必要です
  • データはどの程度歪んでいますか? 同じキーを持つレコードが多数ある場合、それらはすべて同じレデューサーに送られ、注意しないとそのレデューサーの上限が O(n*n) になります。

sql-server は 40mm レコードで問題ないかもしれませんが、20 億レコードになるまで待って、それがどのように機能するかを確認してください。おそらく壊れるだけです。Hive は、実際のデータベースに代わるものではなく、Map Reduce の巧妙なラッパーと見なすことができます。

また、経験から、15 個の c1.mediums を使用すると、大型マシンと同じようにパフォーマンスが向上する可能性があると思います。大規模なマシンには、正直なところ、CPU/メモリの適切なバランスがありません。

于 2012-06-28T16:03:48.577 に答える