Hadoop学习笔记1--Hadoop基础

      从今天开始重新从头学习Hadoop,并每章写读书笔记一篇,记于次。

      这篇笔记将主要概括mapreduce的基本原理和输入输出类。


       1. Hadoop数据类型。

       在Mapreduce中,key必须为实现了WritableComparable<T>的类,值则至少实现writable<T>接口,其中,writableComparable《T》为writable和java.lang.comparable《T》的合体。

         在hadoop中,hadoop已经实现了几个可以用作value的类,这些类均实现了WritableComparable<T>接口,所有的基本类型都有相对应得包装类。如BooleanWritable,DoubleWwritable等,另外还有用于Text的Text类。

      同时,也可以实现自己的writable类,通过实现相应接口,实现writableComparable接口主要实现以下三个方法。

      public void readFields(DataInput In);

      public void write();

      public compareTo(T);

     2. Mapper

       得到相应的数据后,即可开始第一步Mapper,Mapper必须实现Mapper接口并继承MapreduceBase类。 MapreduceBase类是mapper和reducer的共同父类,主要包括两个方法,void configure(JobConf job)及void close.即构造方法和销毁方法.

     Mapper接口主要负责数据的处理,在这个接口中只有一个方法。

      void map(k1 key,V1 value,OutputCollector<k2,v2 output,Reporter reporter>){

}

   其中K1,V1为输入,outputcollector搜集mapper的输出,reporter用来记录额外的信息。

  3. Reducer

    reducer的任务是将从mapper的输出作为输入,将拥有相同key的value结合起来作为输入,然后在经过reduce的过程,尽可能的得到key3,Value3的输出。所以在reducer接口中,与mapper接口相似,reducer也只有一个方法。

    void reduce(k2 key, Iterator<v2> values,OutputCollector<k3,v3> output, reporter reporter} throws exception.

  4. Partitioner

   当数据从map中输出时,在有多个reducer的情况下,系统需要决定怎样分配这些键值对,这些过程是由partitoner完成的,partition默认的是用hash的方法,不过可以自定义。

 5. Combiner

  Combiner是先于partitioner的,combiner的目的是将map的输出先进行一个预先reduce,如将相同key的键值对合并。(需要更多阅读)


 6. hadoopd处理输入的方式

   hadoop处理的文件多为非常大的文件,更多的情况,则是一个单独的大文件,hadoop处理文件的一个原则是将输入文件分片,即input split。hadoop分片主要有几个特点,一,分片为random,这样节点可以随机的读取任意一段的分片,另外分片为此文件的逻辑分片,而分块则为文件的物理分隔,当物理分隔和逻辑分隔处于一个节点时,hadoop处理文件的效率最高,而文件被分片的方式由inputformat类决定。

 7. InputFormat

    输入文件如何被分片和读取取决于InputFormat这个接口的实现。Hadoop已经提供了几个常用的实现,如TextInputFormat。我们也可以根据数据的情况自己实现inputFormat类,inputFormat主要包括两个方法需要实现。

     InputSplit【】 getSplits(JobConf job,int numSplits) throws Exception.
     将输入文件进行分片,并将一片分配给一个map作业。

     RecordReader<K,V> getRecordReader(Input)

     提供一个迭代器,跌代每个分片中的每一条记录.当我们想要重新定义inputformat时,主要需要改动的则是getRecordReader方法,recordReader方法决定了如何读取Key,Value值,所以主要需要实现RecordReader接口。record接口主要是将分片读为key value键值对。

   

  public interface RecordReader<K, V> {
  boolean next(K key, V value) throws IOException;
  K createKey();
  V createValue();
  long getPos() throws IOException;
  public void close() throws IOException;
  float getProgress() throws IOException;
}

 

 8. OutputFormat

      与上述相似,主要负责的是将数据输出到最后的文件系统上的文件中,并且文件的格式将会是part-nnn,其中nnn为reducer的ID。

      outputFormat将主要继承自FileOutputFormat,其中hadoop已经实现了多个这样的类。

    


   

 

   

   

         

    


  

  


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值