MapReduce进阶

一、HDFS数据格式

  1. 文件格式
    面向行:.txt .seq
    面向列 .rc .orc
    面向列的优点:
    1.空间利用率高
    2.查询效率高:数据分析(olap)
    3.可扩展性强

  2. 压缩格式
    物理上可切分:.lzo 压缩速度快,压缩率低,适合大文件的压缩
    .bz2 压缩速度慢,压缩率高,适合归档等不要求压缩速度情况
    物理上不可切分:.gz 压缩速度快,适合压缩后<128M的文件
    .snappy压缩速度快,适合作为map->reduce或job数据流中间的数据传输格式

  3. 文件格式的使用
    1.设置输出格式为gzip
    -Dmapred.output.compress=true
    -Dmapred.output.compression.codec=org.apache.hadoop.io.compress.GzipCodec

       //参数解析器
       GenericOptionsParser optionParser = new GenericOptionsParser(conf, args);
      String[] remainingArgs = optionParser.getRemainingArgs(); 	
    
    2.设置输出格式为lzo格式
    -Dmapred.output.compress=true 
    

-Dmapred.output.compression.codec=com.hadoop.compression.lzo.LzopCodec

  1. 自定义Partition
    通过继承Partitioner类,自定义实现Partition

    自定义Partition的定义
    public static class MyHashPartitioner<K, V> extends Partitioner<K, V> {

    /** 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);
    }

}
指定partition类
    job.setPartitionerClass(MyHashPartitioner.class)
	
	通过配置指定参数来实现:
	自定义分区类的独立类代码如下:
	package com.tianliangedu.examples;
	import org.apache.hadoop.mapreduce.Partitioner;
	public class MyHashPartitioner<K, V> extends Partitioner<K, V> {
	   public int getPartition(K key, V value, int numReduceTasks) {
	      return (key.toString().charAt(0) < 'q' ? 0 : 1) % numReduceTasks;
	   }
	}
-Dmapreduce.job.partitioner.class=com.tianliangedu.examples.MyHashPartitioner
指定partition类
job.setPartitionerClass(MyHashPartitioner.class);
  1. 自定义reduce数量
    -Dmapred.reduce.tasks=2

  2. Configuration传递
    实现基于input_filter目录中文件数据的一次排序,即Map和Reduce的读入和归约处理。
    将本地文件whitelist.txt传给Driver类,读取到该文件内容txtContent
    将txtContent通过Configuration的set方法传递给map和reduce任务
    在map任务中通过Configuration对象的get方法获取传递过来的值txtContent
    将txtContent解析成Set对象,对map任务中的map方法进行过滤输出
    由于map端已经做了过滤,reduce端将不需任何改变

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值