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を決定
例は次のとおりです.
Cluster By
distribute byとsort byを併用するとcluster byに相当しますが、cluster byはascまたはdescにソートするルールを指定することはできません.desc逆シーケンス配列のみです.
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逆シーケンス配列のみです.