Hive --- データ スキューの生成と解決

1. データスキューの定義

データスキューとは、データ処理を並行して実行する場合、単一のパーティションのデータが他の部分と著しく冗長であるため、分散が不均一になり、その結果、大量のデータが 1 つまたは複数の計算ノードに分散され、処理が困難になることを意味します。この部分の速度は非常に低く、平均的な計算速度のため、データセット全体の処理のボトルネックとなり、全体的な計算パフォーマンスに影響を与えます。

2. データの偏りに対するいくつかの解決策

1. NULL 値によって生じるデータの偏り

データ収集時に、データスキューの原因となるキーが事前にフィルタリングされているかどうかが判断されます。内部結合、つまり内部結合が使用されている場合、Hive はデフォルトで null 値をフィルターで除外しますが、左結合などの場合は左側の値を保持します。空の KEY フィルタリングのシナリオ: 1. 非内部結合; 2. Null フィールドは必要ありません。

2 つのフィルタリング方法:

(1) insert overwrite table joinable select n.* from (select * from nullidtable where id is not null) n left join bigtable o on n.id = o.id;//結合前にnull値をフィルタリングする

(2) あるキーが空であるにもかかわらず、それに対応するデータが大量にある場合がありますが、該当するデータは異常なデータではないので、結合結果に含める必要があります。このとき、キーにランダムな値を割り当てることができます。テーブル a の空のキー フィールド データをさまざまな Reducer にランダムかつ均等に分散させます。

insert overwrite table joinable select n.* from nullidtable n full join bigtable o on nvl(n.id,rand()) = o.id; //nvl(a, b): a が Null の場合、b の値を取得しますaの値として。

2. MapJoin を使用して大きなテーブルが小さなテーブルを結合する

まず、ローカル クライアント上で生成されるタスク A は、HDFS からメモリ ハッシュ テーブルに小さなテーブル データを読み取る役割を担う MapReduce ローカル タスクです。読み取り後、メモリ内のハッシュ テーブルをディスク上のファイルにシリアル化し、ハッシュ テーブル ファイルを tar ファイルに圧縮します。次に
タスク B が来ます。これは、Reduce を使用しない MapReduce タスクです。開始すると、tar ファイルが前のステップは Hadoop 分散キャッシュに配置され、Hadoop 分散キャッシュは tar ファイルを各マッパーのローカル ディスクに書き込み、ファイルを解凍します。次に、マッパーはハッシュ テーブル ファイルをメモリに逆シリアル化し、以前と同様に結合作業を実行します。つまり、大きなテーブルの各レコードを、DistributeCache の小さなテーブルに対応する HashTable に関連付け、結果を直接出力します。

利点: 大量のネットワーク送信を削減するシャッフル ステージや、データ スキューを防ぐリデュース ステージがありません。

3. グループ化によるデータの偏り -> 2 段階の集計を使用する

原則: 2 段階の集約とは、最初にローカルな集約、次にグローバルな集約を指します。部分集約中に、各キー値にランダムなプレフィックスを追加して分散します。元の同じキー値は別の新しいキー値になり、タスクによって最初に処理されたデータは、ランダムなプレフィックスを追加した後の新しいキー値に基づくことができます。複数のタスクに分散して集約することで、単一タスクによる過剰なデータ処理の問題を軽減します。次に、ランダムなプレフィックスを削除し、グローバル集計を実行して最終結果を取得します。

4. パーティションの数が足りないかどうかを考慮して、適切に増やします (Spark のデフォルトのパーティションは 200 ですが、適切に増やすことができます)。

やっと

中級レベルのJavaエンジニアの多くはスキルアップを望んでおり、自分で成長しようとしたり、講座に参加したりすることが多いと思いますが、養成機関の1万元近い授業料は本当にストレスです。独学は効果が非効率で長く、頭打ちになりやすく技術が停滞しやすい!

そこで、「 Java 開発学習教材一式」を集めて整理し、皆さんに配りました。当初の意図も非常に単純で、独学したいけどできない友人を助けたいというものです。どこから始めればよいのかが分かり、同時に全員の負担が軽減されます。

エディターは次のように暗号化しました: aHR0cHM6Ly9kb2NzLnFxLmNvbS9kb2MvRFVrVm9aSGxQZUVsTlkwUnc==セキュリティ上の理由から、Web サイトは Base64 でエンコードされており、URL は Base64 でデコードできます。

おすすめ

転載: blog.csdn.net/m0_67265464/article/details/126790203