题记:
近期在做某个大型银行的大数据项目,当在处理非结构化数据时,却发现他们给的数据并不符合hive和pig的处理要求,数据每行必须需要多个分割符才能完美处理,一下午也没有想到完美的办法解决,今天重新审视了一下整个过程。看来hive的命令行没法搞定了。于是乎,只能通过代码来搞定。
1、重新实现hive的InputFormat了,别急放码过来
1 package hiveStream; 2 3 import java.io.IOException; 4 5 import org.apache.hadoop.io.LongWritable; 6 import org.apache.hadoop.io.Text; 7 import org.apache.hadoop.mapred.FileSplit; 8 import org.apache.hadoop.mapred.InputSplit; 9 import org.apache.hadoop.mapred.JobConf; 10 import org.apache.hadoop.mapred.JobConfigurable; 11 import org.apache.hadoop.mapred.RecordReader; 12 import org.apache.hadoop.mapred.Reporter; 13 import org.apache.hadoop.mapred.TextInputFormat; 14 15 public class MyHiveInputFormat extends TextInputFormat implements JobConfigurable{ 16 17 @Override 18 public RecordReader<LongWritable, Text> getRecordReader( 19 InputSplit genericSplit, JobConf job, Reporter reporter) 20 throws IOException { 21 reporter.setStatus(genericSplit.toString()); 22 return new MyRecordReader((FileSplit) genericSplit, job); 23 } 24 25 }