hiveにおけるorder by、distribute by、sort by、cluster byの違いと連絡

1897 ワード

order by
order byはデータをグローバルにソートし、oracleやmysqlなどのデータベースのorder by効果と同じように、
それは1つのreduceでしか行われないので、データ量が特に大きい場合は効率が非常に低い.
また、設定:set hive.mapred.mode=strictの場合limitを指定せず、selectを実行するとエラーが表示されます.以下のようにします.
LIMIT must also be specified.
sort by
sort byはそれぞれのreduceで単独でソートされるため、グローバル秩序は保証されず、一般的にdistribute byとともに実行され、distribute byはsort byの前に書く
もしそうならreduce.tasks=1はorder by効果と同様に、1より大きい場合はいくつかのファイルに分けて出力され、各ファイルは指定したフィールドでソートされ、グローバル秩序は保証されません.
义齿mapred.modeがstrictであるかどうか、nostrictの影響
distribute by
distribute byを使用すると、指定したフィールドに対してhashCode値に従ってreduceの個数を型取りし、対応するreduceにタスクを割り当てて実行します.
mapreduceプログラムのpatitionパーティション化プロセスであり、デフォルトでは指定keyに従う.hashCode()&Integer.MAX_VALUE%numReduceこのタスクを処理するreduceを決定
例は次のとおりです.
public class myPartitioner extends Partitioner<TextPair, Text>{

    @Override
    public int getPartition(TextPair key, Text value, int num) {
        // TODO Auto-generated method stub

        if(num == 0 ){
            return 0;
        }
        int a = (key.getFirst().hashCode()&Integer.MAX_VALUE)%num;
        return a;
    }

}

Cluster By
distribute byとsort byを併用するとcluster byに相当しますが、cluster byはascまたはdescにソートするルールを指定することはできません.desc逆シーケンス配列のみです.