Cascading(一)之日志解析
生活随笔
收集整理的這篇文章主要介紹了
Cascading(一)之日志解析
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
此例子為官網(wǎng)例子,所以直接上代碼:
1 package com.wyf.cascade; 2 3 import java.util.Properties; 4 5 import cascading.flow.Flow; 6 import cascading.flow.FlowConnector; 7 import cascading.operation.regex.RegexParser; 8 import cascading.pipe.Each; 9 import cascading.pipe.Pipe; 10 import cascading.scheme.TextLine; 11 import cascading.tap.Hfs; 12 import cascading.tap.Lfs; 13 import cascading.tap.Tap; 14 import cascading.tuple.Fields; 15 16 /** 17 * 日志解析 18 * 19 * @author: wyf 20 * @version: Jul 12, 2013 2:47:44 PM 21 */ 22 public class LogParser { 23 public static void main(String[] args) { 24 String inputPath = "/home/wyf/workspace/HadoopCascading/data/apache.200.txt"; 25 String outputPath = "/home/wyf/workspace/HadoopCascading/data/output"; 26 27 //從本地文件系統(tǒng)中創(chuàng)建源頭,默認(rèn)TextLine規(guī)則聲明了兩個(gè)字段"offset"和“l(fā)ine” 28 Tap localLogTap = new Lfs(new TextLine(), inputPath); 29 30 //聲明從日志文件解析出來的字段名稱 31 Fields apacheFields = new Fields("ip", "time", "method", "event", "status", "size"); 32 33 // define the regular expression to parse the log file with 34 //設(shè)置解析規(guī)則 35 String apacheRegex = "^([^ ]*) +[^ ]* +[^ ]* +\\[([^]]*)\\] +\\\"([^ ]*) ([^ ]*) [^ ]*\\\" ([^ ]*) ([^ ]*).*$"; 36 37 //設(shè)置輸出組的順序 38 int[] allGroups = { 5, 6, 1, 2, 3, 4}; 39 40 // create the stream parser 41 //創(chuàng)建解析器 42 RegexParser parser = new RegexParser(apacheFields, apacheRegex, allGroups); 43 44 //創(chuàng)建管道元素,指定管道名稱為"parser", 輸入字段名為"line" 45 Pipe importPipe = new Each("parser", new Fields("line"), parser); 46 47 //創(chuàng)建輸出頭,默認(rèn)TextLine輸出所有字段 48 Tap remoteLogTap = new Hfs(new TextLine(), outputPath); 49 50 //設(shè)置當(dāng)前工作jar 51 Properties properties = new Properties(); 52 FlowConnector.setApplicationJarClass(properties, LogParser.class); 53 54 //把輸入源頭與輸出頭用管道鏈接 55 Flow parsedLogFlow = new FlowConnector(properties).connect(localLogTap, remoteLogTap, importPipe); 56 57 //啟動(dòng)解析日志流 58 parsedLogFlow.start(); 59 60 //阻塞等待,直到任務(wù)完成 61 parsedLogFlow.complete(); 62 } 63 }例子理解:
cascading執(zhí)行是以流程處理,先建立一個(gè)"起始節(jié)點(diǎn)"(localLogTap),在建立一個(gè)"終止節(jié)點(diǎn)"(remoteLogTap)(嚴(yán)格講這種說法不準(zhǔn)確,在此例子中暫且這么說),然后在起始節(jié)點(diǎn)與終止節(jié)點(diǎn)間連"一條線"(importPipe),OK現(xiàn)在可以執(zhí)行了
轉(zhuǎn)載于:https://www.cnblogs.com/geopanda/p/3186402.html
《新程序員》:云原生和全面數(shù)字化實(shí)踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀總結(jié)
以上是生活随笔為你收集整理的Cascading(一)之日志解析的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: MySQL字符串截取函数
- 下一篇: c++ 关于char *的类库函数