输入输出主要有下面种类: '''文件类型输入:''' TextInputFormat [[BR]] 用于读取纯文本文件,文件被分为一系列以LF或者CR结束的行,key是每一行的位置(偏移量,LongWritable类型),value是每一行的内容,Text类型。[[BR]] 这个在我们的项目中比较常用,不做说明hadoop会使用这个作为输入,只要往里面添加文件路径就可以了 {{{ FileInputFormat.addInputPath(job, path); }}} KeyValueTextInputFormat [[BR]] 同样用于读取文件,如果行被分隔符(缺省是tab)分割为两部分,第一部分为key,剩下的部分为value;如果没有分隔符,整行作为 key,value为空[[BR]] SequenceFileInputFormat (这种方式性能会比较好)[[BR]] 用于读取sequence file。 sequence file是Hadoop用于存储数据自定义格式的binary文件。[[BR]] 它有两个子类:SequenceFileAsBinaryInputFormat,将 key和value以BytesWritable的类型读出;[[BR]] SequenceFileAsTextInputFormat,将key和value以 Text的类型读出[[BR]] SequenceFileInputFilter[[BR]] 根据filter从sequence文件中取得部分满足条件的数据,通过setFilterClass指定Filter,内置了三种 Filter,RegexFilter取key值满足指定的正则表达式的记录;PercentFilter通过指定参数f,取记录行数%f==0的记录;MD5Filter通过指定参数f,取MD5(key)%f==0的记录。 关系数据库: 对mysql支持比较好 读oracle时候split有问题 OracleDBRecordReader 这个类 84行 if (split.getLength() > 0 && split.getStart() > 0){ 这个判断有问题,第一个split start值就是为0,要去掉 另外要增加驱动,jobtracker 机器上的hadoop/lib目录要放驱动,不用重启, 其他的机器使用下面语句增加到class path上 {{{ DistributedCache.addFileToClassPath(new Path("/lib/ojdbc14.jar"), conf, FileSystem.get(conf)); }}} HBASE