2

Hadoop ネームノードのメモリの問題で混乱しています。

  1. namenode のメモリ使用量が特定の割合 (たとえば 75%) を超えると、hadoop API を介した hdfs ファイルの読み取りと書き込みが失敗します (たとえば、いくつかの open() を呼び出すと例外がスローされます)。その理由は何ですか? 誰かが同じものを持っていますか?PS.今回はネームノードのディスク io は高くなく、CPU は比較的アイドル状態です。

  2. namenode'QPS (Query Per Second) を決定するものは何ですか?

どうもありがとう!

4

1 に答える 1

1

namenode は基本的にブロックを管理する単なる RPC サーバーであるHashMapため、2 つの主要なメモリの問題があります。

  1. JavaHashMapは非常にコストがかかります。衝突の解決 (別の連鎖アルゴリズム) も同様にコストがかかります。これは、衝突した要素をリンクされたリストに格納するためです。
  2. RPC サーバーはリクエストを処理するためにスレッドを必要としますdfs.namenode.service.handler.count 。Hadoopには独自の RPC フレームワークが同梱されており、デフォルトで 10 に設定されているデータノードに対してこれを構成できます。または、実行したいMapReduce ジョブなどdfs.namenode.handler.count の他のクライアントに対してこれをJobClients構成できます。仕事。リクエストが来て、新しいハンドラーを作成したい場合、メモリが不足する可能性があります (新しいスレッドもスタックスペースのかなりのチャンクを割り当てているため、これを増やす必要があるかもしれません)。

これらが、namenode が大量のメモリを必要とする理由です。

What determines namenode'QPS (Query Per Second) ?

私はまだそれをベンチマークしていないので、それについての良いヒントを提供することはできません. 確かに、ハンドラーを微調整すると、並列実行できるタスク数 + 投機的実行よりも多くカウントされます。ジョブの送信方法に応じて、他のプロパティも微調整する必要があります。

もちろん、完全なガベージ コレクション サイクルに陥らないように、namenode に常に十分なメモリを与える必要があります。

于 2012-11-02T10:11:17.450 に答える