一、HDFS数据格式详解
1、文件格式
·面向行,txt文本文件,适合学习练习
seq序列文件,适合生产环境,map输出的默认环境
·面向列,rc行列文件,学习生产都可以
· orc升级版行列文件,学习生产都可以
2、压缩格式
可切分 | lzo(.lzo) |
---|---|
可切分 | bzip2(.bz2) |
不可切分 | gzip(.gz) |
不可切分 | snappy(.snappy) |
3、设置压缩格式
1)Gzip
·在运行jar包时加上-Dmapred.output.compress=true 和
-Dmapred.output.compression.codec=org.apache.hadoop.io.compress.GzipCodec
2)bizp2
·在运行jar包时加上-Dmapred.output.compress=true 和
-Dmapred.output.compression.codec=org.apache.hadoop.io.compress.BZip2Codec
二.自定义Partition
1.默认的partition
//source code: package org.apache.hadoop.mapreduce.lib.partition; import org.apache.hadoop.classification.InterfaceAudience; import org.apache.hadoop.classification.InterfaceStability; import org.apache.hadoop.mapreduce.Partitioner; /* Partition keys by their {@link Object#hashCode()}. / @InterfaceAudience.Public @InterfaceStability.Stable public class HashPartitionerextends Partitioner /* Use {@link Object#hashCode()} to partition. / public int getPartition(K key, V value, int numReduceTasks) { return (key.hashCode() & Integer.MAX_VALUE) % numReduceTasks; } }{
2.自定义reduce数量
1.shell调用时新加
-Dmapred.reduce.tasks=2 \
3.自定义Partition
1.新加类MyHashPartitioner
public static class MyHashPartitionerextends Partitioner /* Use {@link Object#hashCode()} to partition. / public int getPartition(K key, V value, int numReduceTasks) { return (key.toString().charAt(0) < ‘q’ ? 0 : 1) % numReduceTasks; // return key.toString().charAt(0); } }{
2.driver中新加
// 指定partition类——————————————————————start job.setPartitionerClass(MyHashPartitioner.class); // 指定partition类——————————————————————end