1如果需要自定义Bean类型来充当输出的Key或Value,则自定义的Bean类要继承Writable接口并实现序列化及反序列化方法,序列化反序列化顺序要一致,要有空参构造器,要提供toString
2.如果自定义序列化类充当输出的Key或Value的同时,还需要自定义排序规则,则可以继承WritableComparable接口实现序列化反序列话方法和compareTo方法进行排序(二次排序等等都可)
3.若要进行分区,则需要自定义类继承Partitioner类重写getPartition方法,并在drive中用setPartitionerClass方法建立job与Partitioner实现类的连接,同时设置reduceTask数量,reduceTask数量要与分区数量一致
4.若要启动combiner组件,则自定义一个类同时继承reduce,同时重写Reduce方法,同时在Drive中用setCombinerClass方法建立job与此类的连接(更像提前进行reduce)通常情况下,都是判断好能用combiner组件提前聚合,然后直接在drive中调用SetCombinerclass方法,用reducer类来充当引用类
5.若默认的自带的outputformat都不能满足客户需求(inputformat也可以自定义),则可以自定义outputformat类继承FileOutputFormat接口,重写getRecordWriter,重写getRecordWriter方法时要再用一个自定义类(流的方向要在此构造器中声明)继承RecordWriter类重写Writer和close方法,其中Write是核心方法写输出流用于输出等,close是流的关闭,,最后还要在drive中设置(setOutputFormatClass)自定义的outputformat,同时要设置一个_success文件的输出位置
6.若需要进行连接操作,可以用map连接和reduce连接,reduce连接要重写的map类中重写初始化方法(setup)来获取文件的信息,map连接要再drive驱动中加载小表到内存中,然后要重写map类中的setup方法来获取缓存文件的信息