一、HDFS数据格式详解

1、文件格式

·面向行,txt文本文件,适合学习练习

  1. 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 HashPartitioner extends 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 MyHashPartitioner extends 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