2017-04-09 7 views
1

私は次のプロパティcombineInputFormatはHiveでどのように動作しますか?

  • Unbucketed
  • が3.5メガバイト各
  • の50個のファイルを持つ

  • パーティションが作成されていない
    • TextFileのフォーマットでハイブテーブルを持っているがフォーマットの記述」からテーブルパラメータに従います"コマンド

      テーブルパラメータ:

      COLUMN_STATS_ACCURATE true 
          numFiles    50 
          totalSize    170774650 
      

      私はこのテーブルの上にCOUNT(*)の操作を行っておりますし、それがAWSのクラスタ上

      • 4マッパーと1つの減速
      • 1マッパーと私のスタンドアロンクラスタ上の1つの減速機で実行されています[疑似クラスタモードインストール]

      両方ハイブセッションの最大分割サイズは256メガバイト

      結合入力形式の仕組みを知りたいですか?

      すべてのファイル/ブロックが同じマシン上にあり、結合されたファイルの合計サイズが最大分割サイズより小さいため、1台のマシンではデータがまとめられているため、1つの分割と1つのマッパーが求められている。

      もう一方のケースでは、AWSクラスタでは4つのマッパーが使用されました。私は、CombineInputFormatはラック/マシンのローカリティを採用していますが、正確にはどのように使用していますか?

      ご回答いただきありがとうございます。

  • 答えて

    0

    応答なし!!!私は時間をかけてそれを理解し、今日Stack Overflowアカウントを訪れていて、この不運な質問が無回答のまま座っていることがわかりました。それでは、詳細に従ってください。

    スプリットは、入力パスの下のファイルから作成されます。スプリットは異なるプールのファイルを持つことはできません。返される各分割には、異なるファイルのブロックが含まれる場合があります。 maxSplitSizeを指定すると、同じノード上のブロックが結合されて1つの分割が形成されます。残りのブロックは、同じラック内の他のブロックと結合されます。 maxSplitSizeが指定されていない場合、同じラックからのブロックが1つの分割で結合されます。ノードローカル分割を作成する試みは行われません。 maxSplitSizeがブロックサイズと等しい場合、このクラスはHadoopのデフォルトの分割動作に似ています。各ブロックはローカルで処理された分割です。サブクラスはInputFormat.createRecordReader(InputSplit、TaskAttemptContext)を実装して、CombineFileSplitのRecordReaderを構築します。

    似たような質問のある方に役立つことを願っています!

    関連する問題