ハイブは、所与:.物理メモリを超えて実行されている現在の使用を制限:2 GBの究極のPhysica溶液の2.0ギガバイト

免責事項:この記事は、元の記事のブロガーで、許可のないブロガーのガールフレンドは再現できないものとします。https://blog.csdn.net/qq_26442553/article/details/89343579

1.ケースの説明: 

       ハイブは、タスクは通常、何の問題沙は、通常の実行は、一般的に約1時間かそこらの正常ではありませんが、今日は突然与えられて、コードのエラー::時限たPHYSICAL越えを実行しているが、現在のメモリ使用量を制限し:. 2.0使用さGB 2の物理メモリのGBを、3.9使用さ4.2ギガバイトGBの仮想メモリ。コンテナを殺します。

2.分析解決

      エラーログを参照してください、ディスプレイは、仮想メモリの4.2グラムの3.9グラムのために使用されている割り当てられた物理メモリは、他の上で使用されてきた十分な言うためにメモリ、コンテナ2グラムではありません。だから、タスクが殺されています。いくつかの問題のトラブルシューティングを見つけるためにインターネットは、そのような調整はマップを増やし、メモリを削減、セットの仮想メモリの比率を設定し、チェック仮想メモリをキャンセルし、というように、実際には多くは特定の問題を分析するために使用されていません。以下の具体的な分析。

 以下のパラメータの結果から各コンテナに割り当てられた1ビュー大きなクラスタ構成データ記憶部は、各容器の我々の糸は、記憶部は、1G-8グラムの間であり、適用するように構成することができます。具体的には、実際の負荷各容器は、どのくらいのメモリ実際のプラットフォームのリソース、および配布および他の要因の優先順位のタスクに依存します。大各容器移送の値のメモリ範囲を割り当てることについて以下yarn.scheduler.minimum割り当て-MBパラメータを、設定する付加価値を言っても一種方法。しかし、実際には、この値は、糸-site.xmlファイル、および有効にするクラスタを再起動する必要があり、実際の開発によって設定されます、このアプローチは、達成することはほとんどありません。

1.查看yarn为每个container分配的内存区间
hive>set yarn.scheduler.minimum-allocation-mb;
    yarn.scheduler.minimum-allocation-mb=1024
hive>set yarn.scheduler.maximum-allocation-mb;
yarn.scheduler.maximum-allocation-mb=8192

  以下のためのクラスタ構成を参照するには、以下の2. maptaskを、タスクがデフォルトのメモリを使用することができます減らすには、次の大きな2グラムです。したがって、この時間は、プラットフォームリソース制約が理由である場合(多くの時間は、通常、成功したミッションを実行する前に)使命の一部がメモリ不足のために失敗した原因。この時間は、一方的に、意味をなさない大mapreduce.map.memory.mbとmapreduce.reduce.memory.mbの値を調整し、各コンテナが割り当て可能なものの、メモリが1〜8グラムですので、今のでタイトなクラスタのリソースを割り当てることができますメモリは、2g未満として、非常に小さく、そしてあなたは、コンテナで使用可能なメモリをマッピングし、軽減するための操作を上げ、それはどんな意味がありません。が一つである大mapreduce.map.memory.mbのmapreduce.reduce.memory.mbの調整値と有用な、それは非常に豊富なプラットフォームリソース大きく、各容器のためのメモリの実際の割り当て、例えば6 gです。これは、プログラムの動作を高速化しますが、値は、リソースの浪費の原因となります大きすぎます。

1.查看每个map,reduce默认使用内存的配置大小
hive>set mapreduce.map.memory.mb;
     mapreduce.map.memory.mb=2048
hive>set mapreduce.reduce.memory.mb;
mapreduce.reduce.memory.mb=2048

3.増加仮想比仮想メモリ

 デフォルトでは以下に示した各maptaskと仮想メモリ比率をreudcetask 2.1です。ここでは2グラムのサイズを小さくするために、デフォルトのメモリ設定を使用して、各マップの企業のクラスター、。したがって、最大仮想メモリ2.1 * 2 = 4.2グラム(4.2グラムの源は、上述した:使用される仮想メモリの3.9ギガバイト4.2ギガバイト)だけでなく、パラメータによって構成糸のsite.xml。実際には、対応するコンフィギュレーションの実際の開発が大きくなることができます。

hive (default)> set yarn.nodemanager.vmem-pmem-ratio;
yarn.nodemanager.vmem-pmem-ratio=2.1

4.メモリチェックが配置されていない糸

 糸-site.xmlファイルでfalseに設定しyarn.nodemanager.vmem-対応確認してから、クラスタを再起動します。しかし、これは、それはメモリリークが発生することがあり、お勧めしません。

hive (default)> set yarn.nodemanager.vmem-check-enabled;
yarn.nodemanager.vmem-check-enabled=true

マップや削減数の増加

      明らかに、これは役割を演じることができ、各マップの作業負荷を軽減し、小さなドロップすることです。数が大きくなりすぎた場合、それは小さな複数のファイルが生成されます、一般的なmaptaskファイルサイズ、スライス情報等によって決定され、重合の必要な最終結果によって決定される数を減らしています。

       1. maptaskため、典型的には、スライスの開始をスライスサイズ情報を設定することにより、マップの数を増加させます。会社128MBのを次のように各ブロックの大きさがあるので、我々は64Mバイトにmapred.max.split.sizeを設定することができます。このような2つのブロックの実行タスクを。

hive>set dfs.block.size;
    dfs.block.size=134217728

     設定hive.exec.reducers.bytes.per.reducer構成:2で削減数を増やします

6.したがって、このような状況で、企業の実際の開発には、クラスタを再起動するかの分析は状況下で、唯一、独自の最適化の手順を確認することができ、非常に信頼性がありません。

    1.一般的には、自動的に成功する可能性を複数回試みる失敗再試行の回数を設定するタスクを与えることができます。

    プログラムがデータスキューの問題を持っているかどうか2.チェックは、一般的には、これらのケースのほとんどは、傾きデータによって引き起こされます。同社は、誤って設定クラスタパラメータである場合を除き、あなたは状況に応じて適切に上記の値にそれを増やし、それを変更することができます。

おすすめ

転載: blog.csdn.net/qq_26442553/article/details/89343579