需求:过滤输入的log日志,区分特定的网站和其他的网站输出到不同的文件中(文件中每一行是一个网址)
1.LogMapper类:
继承Mapper类之后对应相应的泛型,重写 map() 方法
直接将文件中的网址写出(不做任何处理)
2.LogReducer类:
继承Reducer类之后对应相应的泛型
重写 reducer() 方法,循环将文件中的网址写出(防止有相同的数据丢失)
3.LogOutputFormat类:
继承FileOutputFormat类之后对应相应的泛型,实现 RecordWriter() 方法
根据返回值来创建相应的对象随后新建相应类 LogRecordWriter
最后将job添加到创建的对象中将其与当前任务联系在一起
4.LogRecordWriter类:
继承 RecordWriter 后给相应的泛型,实现其中的方法 write() 和 close()
在类中创建两条流 (全局变量 创建流用 FileSystem客户端
并且用相应的job的Coniguration来建立关系,不能new)
并加入输出路径(不能存在)
在 write() 方法中具体往出写
在 close() 方法中关闭流( IOUtils.closeStream() )
5.LogDriver类:
获取job;设置jar包的路径(Driver类);关联mapper和reducer(自己所写的类)
设置map输出的KV类型;设置最终输出的KV类型;
设置自定义的 outputformat 设置输入和输出路径(存放_SUCCESS文件)
提交job