--2 수집 오프라인 처리 방식의 로그를 취합니다. 계산 데이터 정제 및

기사, 본 논문 하이브 종래의 세척에 연결하고 데이터를 완료하기 위해 계산

스토리지. 원시 로그 정보

다음 표 하이브, 저장하고 읽을 수있는 정규 표현식 방법을 지원합니다 :

CREATE EXTERNAL TABLE의 nginxlog ( 
  IP를 STRING, 
  시간 문자열, 
  요청 STRING, 
  상태 STRING, 
  크기 STRING, 
  리퍼러 STRING, 
  에이전트 STRING) 
행 형식의 SERDE을 ' org.apache.hadoop.hive.serde2.RegexSerDe ' 
와 함께 SERDEPROPERTIES ( 
  "input.regex" = "( [ ^ ] * ) (\\ [ [^ \\ ] ] * \\]) (\" [ ^ \ " ] * \") ( - | [ 0-9 ] * ) ( - |[ 0-9 ] * ) (\ " [ ^ ] * \") (\ " [ ^ \\\" ] * \ ")" 
) 
STORED AS TEXTFILE의 LOCATION '/ 시험';

다음과 같이 우리의 access.log의 로그 데이터 형식은 다음과 같습니다

192.168.111.1 [/ 7월 / 2,019 29 : 19 : 58 : 55 0800] "GET /big.png?url=http://127.0.0.1/a.html&urlname=a.html&scr=1366x768&ce=1&cnv=0.6735760053703803&ref= http://127.0.0.1/b.html&stat_uv=67256303183188720208&stat_ss=6553789412_7_1564401535833 HTTP / 1.0 "200 37700"http://127.0.0.1/a.html ""모질라 / 5.0 (윈도우 NT 10.0; WOW64) AppleWebKit / 537.36 (KHTML 게코) 크롬 같은 / 63.0.3239.132 사파리 / 537.36 "

그래서 정규 표현식 테이블 문을 작성 

([^] *) (\\ [^ \\] * \\]) (\ "[^ \"* \ ") (- | [0-9] *) (- | [0-9 *) (\ "[^] * \") (\ "[^ \\\"* \ ")과 상기 데이터와 일치해야 
우선 각 패킷의 중요도에 일치하는 정규 표현을 이해해야한다 :
  ([^] *) // ^ 브래킷 식에서, 공간 이외의 문자에 대응하는 그것의 문자 세트를 표현하는 시간을 허용하지 않는다.
   (- | [0-9] *)   - 0 9를 더 자리 //는 일치를 나타냅니다
  (\ "[^ \\\"] * \ ")   //은 \"따옴표 \ 문자가 뒤에 큰 따옴표 문자를 탈출하기 위해 유형이 긍정적와 아무 상관이 자바 언어 이전에 실제 큰 따옴표 문자를 나타냅니다 

( \\ [^ \\] * \\]) //
\\ [일반 타입 \ [즉, 식 실제 왼쪽 브래킷에 긍정적

바람직 단위 테스트 코드 검증 JAAV이 레귤러 타입 전에 첨가 하이브 공식 애플리케이션에서 :

@Test
     공개  공극 TESTLOG () { 

        문자열 정규식 = "(([^] *) (\\ [^ \\] * \\]) (\"[^ \ "* \") (- | [ 0-9] *) (- | [0-9] *) (\ "[^] * \") (\ "[^ \\\"* \ "))" ; 
        무늬 패턴 = 는 Pattern.compile ( ; REGEX)
        는 HTTP /favicon.ico는 GET / 1.1 \ "404 555 \"http://192.168.111.123/ 문자열 데이터 = "\ 192.168.111.1 [15 : 53 07 0,800 21} / Jul- / 2,019이다]" \ "\"모질라 / 5.0 (윈도우 NT 10.0; WOW64) AppleWebKit / 537.36 (게코 같은 KHTML) 크롬 / 70.0.3538.67 사파리 / 537.36 \ "" ; 
        Matcher를 Matcher를 = Pattern.matcher (데이터);
         
     // 참고 : 일치 () 메소드는 메소드 문자열 매칭 표현 될 수있다 () 찾을 나타내는 전체 문자열과 일치하는
경우 (Matcher를. 경기 ()) { 에 대한 (int로 I = 0; i가 matcher.groupCount () ";을 난 ++ ) { 에서 System.out.println (matcher.group (I +1 )); } } 다른 { 에서 System.out.println ( "없음 일치를 찾을 수 없습니다 % n을합니다." ); } }

 

 
 

 

 

 

제 2 처리 원시 로그 정보 -> 중간 처리 데이터 생성

 

 

 

III. KPI 지표 중간 데이터 처리에서의 최종 통계 데이터를 생성

 

추천

출처www.cnblogs.com/hzhuxin/p/11266385.html