一、HDFS数据格式详解

1、文件格式

面向行:.txt .sql
面向列:.rc .orc

2、压缩格式

可切分:.loz .bz2
不可切分:.gz snappy

3、文件格式的使用

以设置为zip格式为例

  1. 通过shell命令改动,添加参数设置模板:
  2. yarn jar jar_path main_class_path -Dk1=v1参数列表 <in> <out>
  3. 具体应用:
  4. yarn jar TlHadoopCore-jar-with-dependencies.jar \
  5. com.tianliangedu.examples.WordCountV2 \
  6. -Dmapred.output.compress=true \
  7. -Dmapred.output.compression.codec=org.apache.hadoop.io.compress.GzipCodec \
  8. /tmp/tianliangedu/input /tmp/tianliangedu/output19

Driver类下加入代码

  1. //参数解析器
  2. GenericOptionsParser optionParser = new GenericOptionsParser(conf, args);
  3. String[] remainingArgs = optionParser.getRemainingArgs();

二、自定义partition

1、自定义reduce数量

  1. yarn jar TlHadoopCore-jar-with-dependencies.jar \
  2. com.tianliangedu.examples.WordCountV2 \
  3. -Dmapred.output.compress=true \
  4. -Dmapred.output.compression.codec=org.apache.hadoop.io.compress.GzipCodec \
  5. -Dmapred.reduce.tasks=2 \
  6. /tmp/tianliangedu/input /tmp/tianliangedu/output38

2、自定义partition实现

  1. /**
  2. 自定义Partition的定义
  3. */
  4. public static class MyHashPartitioner<K, V> extends Partitioner<K, V> {
  5. /** Use {@link Object#hashCode()} to partition. */
  6. public int getPartition(K key, V value, int numReduceTasks) {
  7. return (key.toString().charAt(0) < 'q' ? 0 : 1) % numReduceTasks;
  8. // return key.toString().charAt(0);
  9. }
  10. }