この記事では、Azure HDInsight クラスターで Interactive Query コンポーネントを使用するときのトラブルシューティングの手順と問題の可能な解決策について説明します。
問題
insert into table1 partition(a,b) select a,b,c from table2
などのクエリを実行すると、クエリ プランによって一連のレジューサーが開始されますが、各パーティションのデータは 1 つのレジューサーに送信されます。 その結果、最も大きなパーティションのレジューサーの場合と同じくらいにクエリが遅くなります。
原因
beeline を開き、set hive.optimize.sort.dynamic.partition
の値を確認します。
この変数の値は、データの性質に基づいて true または false に設定されます。
入力テーブル内のパーティション数が少なく (たとえば 10 未満)、出力パーティション数も同様であり、変数が true
に設定されている場合は、パーティションごとに 1 つのレジューサーを使用してデータの並べ替えと書き込みがグローバルに行われます。 使用可能な Reducer の数が多い場合でも、データ スキューが原因でいくつかの Reducer が遅れ、最大並列処理を実現できない可能性があります。 false
に変更すると、複数の Reducer で 1 つのパーティションを処理できるようになり、複数の小さいファイルが書き出されるため、挿入がより高速になります。 この場合、小さなファイルが存在するため、クエリへの影響がさらに大きくなる可能性があります。
true
の値は、パーティション数が多く、データ スキューが発生していない場合に適しています。 このような場合、マップ フェーズの結果は 1 つの Reducer で各パーティションが処理されるように書き出されるため、後続のクエリ パフォーマンスが向上します。
解決方法
複数のパーティションに正規化するようにデータのパーティションを再分割してみます。
1 を実行できない場合は、Beeline セッション内で config の値を false に設定してから、クエリを再度試します。 [https://login.microsoftonline.com/consumers/](
set hive.optimize.sort.dynamic.partition=false
) クラスター レベルで値を false に設定することは推奨されません。true
の値が最適なので、データとクエリの性質に基づいて必要に応じてこのパラメーターを設定します。
次のステップ
問題がわからなかった場合、または問題を解決できない場合は、次のいずれかのチャネルでサポートを受けてください。
Azure コミュニティのサポートを通じて Azure エキスパートから回答を得る。
カスタマー エクスペリエンスを向上させるための Microsoft Azure の公式アカウントの @AzureSupport に連絡する。 Azure コミュニティで適切なリソース (回答、サポート、エキスパートなど) につながる。
さらにヘルプが必要な場合は、Azure portal からサポート リクエストを送信できます。 メニュー バーから [サポート] を選択するか、 [ヘルプとサポート] ハブを開いてください。 詳細については、「Azure サポート要求を作成する方法」を参照してください。 サブスクリプション管理と課金サポートへのアクセスは、Microsoft Azure サブスクリプションに含まれていますが、テクニカル サポートはいずれかの Azure のサポート プランを通して提供されます。