sql >> データベース >  >> NoSQL >> HBase

パフォーマンス向上のためのMapReduceのパフォーマンスチューニング

    Hadoopのパフォーマンス調整は、Hadoopクラスターのパフォーマンスを最適化するのに役立ちます。このMapReduceパフォーマンスチューニングの記事では、最初にHadoopクラスターのパフォーマンスを改善するためのさまざまな方法を探り、HadoopでのMapReduceプログラミングから最良の結果を達成します。

    次に、この記事では、Hadoop MapReducePerformanceTuningの7つの重要な方法または概念について説明します。これらの方法は、Hadoopでのメモリ調整、IOパフォーマンスの向上、Hadoopでのマップディスクスピル、マッパーとレデューサータスクの調整、コンバイナーの書き込み、スキュー結合の使用、投機的実行です。

    これらの手法を使用して、最小限の運用コストでパフォーマンスを向上させるために、コモディティハードウェアを使用して本番環境でHadoopクラスターをセットアップできます。

    HadoopMapReduceパフォーマンスチューニングの概要

    本番環境にHadoopクラスターをインストールすることは、勝利した戦いの半分にすぎません。 Hadoop管理者にとって、最大のパフォーマンスを得るには、Hadoopクラスターのセットアップを調整することが非常に重要です。

    Hadoopパフォーマンスチューニングは、Hadoopクラスターのパフォーマンスを最適化し、ビッグデータ企業でMapReduceジョブを実行しながら最高の結果を達成するのに役立ちます。

    Hadoopのインストール中に、Hadoopクラスターはデフォルトの構成設定で構成されます。

    Hadoop管理者は、RAM容量、DataNodeにマウントされているディスクの数、CPUコアの数、物理コアまたは仮想コアの数、NICカードなど、いくつかのハードウェア仕様に精通していることが非常に重要です。

    そのため、ビッグデータの問題を解決しながらすべてのリソース間で平衡をとることは非常に難しいため、すべてのHadoopジョブに適合する単一のパフォーマンス調整手法はありません。

    移動するデータの量と本番環境で実行するHadoopジョブのタイプに基づいて、パフォーマンス調整のヒントとコツを選択できます。最高かつ最も効果的なパフォーマンスチューニングは、最大のパフォーマンスを達成するのに役立ちます。

    同じことを実行するには、目的の出力が最適な方法で達成されるまで、以下のプロセスを繰り返す必要があります。
    ジョブの実行–>ボトルネックの特定–>ボトルネックへの対処

    したがって、基本的に、パフォーマンスチューニングでは、最初にHadoop MapReduceジョブを実行し、ボトルネックを特定してから、以下の方法を使用して問題に対処する必要があります。目的のレベルのパフォーマンスが達成されるまで、上記の手順を繰り返す必要があります。

    MapReduceパフォーマンスチューニングのヒントとコツ

    Hadoop MapReduceのパフォーマンス調整に使用される方法は、2つのカテゴリに分類できます。これらの2つのカテゴリは次のとおりです。

    1.Hadoopランタイムパラメーターベースのパフォーマンスチューニング

    2.Hadoopアプリケーション固有のパフォーマンスチューニング

    次に、これら2つのカテゴリに基づいてHadoopクラスターのパフォーマンスを向上させる方法について説明します。

    1。 Hadoopランタイムパラメータベースのパフォーマンスチューニング

    このカテゴリでは、CPU使用率、メモリ使用量、ディスク使用量、パフォーマンス調整のためのネットワーク使用量の調整など、Hadoopランタイムパラメータの調整を扱います。このカテゴリに含まれる手法は次のとおりです。

    a。メモリチューニング

    Hadoopジョブの最大のパフォーマンスを確保するための最も重要なステップは、サーバーのメモリ使用量を監視することにより、メモリの構成パラメーターを調整することです。

    Hadoopの各MapReduceジョブは、読み取られたさまざまな入力レコード、レデューサーレコードの数、さらに実行するためにパイプライン化されたレコードの数、スワップメモリ​​、ヒープサイズセットなどに関する情報を収集します。

    Hadoopタスクは通常CPUに拘束されません。したがって、最大の関心事は、メモリ使用量とディスクの流出を最適化することです。

    パフォーマンスを最大化するためのメモリ調整の最良の経験則は、MapReduceジョブがスワッピングをトリガーしないようにすることです。つまり、スワッピングをトリガーせずにできるだけ多くのメモリを使用します。

    Cloudera Manager、Nagios、Gangliaなどのソフトウェアを使用して、スワップメモリ​​の使用状況を監視できます。

    スワップメモリ​​の使用率が非常に高い場合は、 mapred.child.java.optsを設定してメモリ使用量を最適化する必要があります。 mapred.child.java.optsの各タスクに割り当てられるRAMの量を減らすことによってプロパティ 。

    mapred.child.java.opts を設定することで、タスクのメモリを調整できます。 〜 -Xmx2048M mapred-site.xmlで。

    b。マップディスクの流出を最小限に抑える

    ディスクIOは、ApacheHadoopのパフォーマンスのボトルネックです。こぼれを最小限に抑えるために調整できるパラメータはたくさんありました。次のようにパラメータを調整できます:

    • マッパー出力の圧縮
    • マッパーがヒープメモリの70%をスピルバッファに使用していることを確認してください。

    しかし、頻繁にこぼすことは本当に良い考えだと思いますか?

    1回こぼした場合は、すべてのデータを再読み取りおよび再書き込みする必要があるため、2回以上こぼさないことを強くお勧めします。IOの3倍です。

    c。マッパータスクの調整

    マップタスクの数を暗黙的に設定できます。マッパーのHadoopパフォーマンスチューニングの最も一般的で効果的な方法は、マッパーの数と各ジョブのサイズを制御することです。

    大きなファイルを処理している間、フレームワークはファイルを小さなチャンクに分割して、マッパーがファイルを並行して実行できるようにします。ただし、新しいマッパージョブの初期化には通常、数秒かかります。これもオーバーヘッドであり、最小限に抑える必要があります。したがって、同じことについての提案は次のとおりです。

    • jvmタスクを再利用する
    • それぞれ1〜3分実行されるマップタスクを目指します。したがって、マッパーの平均実行時間が1分未満の場合は、mapred.min.split.sizeを増やして、スロットに割り当てるマッパーを減らし、マッパーの初期化オーバーヘッドを減らします。
    • 小さなファイルの束には、結合ファイル入力形式を使用します。

    2。 Hadoopアプリケーション固有のパフォーマンスチューニング

    このカテゴリに含まれる手法は次のとおりです。

    a。マッパー出力の最小化

    マッパー出力を最小化することにより、マッパー出力がディスクIO、ネットワークIO、およびシャッフルフェーズのメモリ感度に非常に敏感であるため、パフォーマンスを向上させることができます。これは次の方法で実現できます:

    • レデューサー側ではなくマッパー側でレコードをフィルタリングします。
    • MapReduceでマッパー出力キーと値を形成するために最小限のデータを使用します。
    • マッパー出力の圧縮
    b。レデューサーの負荷のバランスをとる

    不均衡なreduceタスクは、パフォーマンスの問題を引き起こします。一部のレデューサーは、マッパーからの出力の大部分を受け取り、他のレデューサーと比較して非常に長く実行されます。次の方法でレデューサーの負荷のバランスをとることができます:

    • Partitionerクラスでより優れたハッシュ関数を実装します。
    • 複数の出力を使用してキーを分離するための前処理ジョブを記述します。次に、別のmap-reduceジョブを使用して、問題を引き起こす可能性のある特殊キーを処理します。
    c。 Hadoopのコンバイナーで中間データを削減

    さらに、コンバイナーを作成することで、Hadoopクラスターのパフォーマンスを調整できます。コンバイナーは、マッパーからレデューサーに転送されるデータの量を減らします。これは、ネットワークの輻輳を軽減するので有益であることがわかります。

    d。投機的実行

    タスクの実行が完了するまでに時間がかかると、MapReduceジョブのパフォーマンスに深刻な影響があります。 Hadoopでの投機的実行は、代替マシンで低速のタスクをバックアップすることでこの問題を解決するための一般的なアプローチです。

    構成パラメーター「mapreduce.map.tasks.speculative.execution」を設定することで、投機的実行を有効にできます。 および「mapreduce.reduce.tasks.speculative.execution」 本当に。これにより、ジョブの実行時間が短縮されます。

    概要

    最後に、HadoopのパフォーマンスチューニングがHadoopクラスターのパフォーマンスの最適化に役立つことを確認しました。この記事では、Hadoopクラスターのパフォーマンスを調整するためのさまざまなヒントとコツについて説明しました。

    この記事では、パフォーマンスを最大化するための最良かつ最も効果的なトリックのいくつかに焦点を当てています。

    ただし、このトピックについて質問がある場合は、コメントセクションでお気軽に共有してください。


    1. PythonDockerコンテナを取得してRedisDockerコンテナと対話する

    2. MongoDB $ sample

    3. Redisはどのようにして高いスループットとパフォーマンスを実現しますか?

    4. Redisハッシュ用のMGETアナログはありますか?