복붙노트

[HADOOP] 돼지 스크립트에서 정규식 로그에서 문자열을 추출

HADOOP

돼지 스크립트에서 정규식 로그에서 문자열을 추출

나는 로그 데이터를하고 난 변수에 각 정보를 추출 할

다음은 샘플 한 줄의 로그입니다. {식> 306 : 이름 => "bblite": CPU => {용량 => 4 : => 4 할당} => 0 실제 : 메모리 => {용량 => 8192 : 할당 => 8192 : 실제 => 8578} : cluster_stats => { "wc1104"=> {CPU => 0 : MEM => 8578}}}

나는 모든 IDS, 모든 이름이 변수 모든 클러스터 통계가 CPU를 가지고 변수와 변수가 변수가 필요합니다

다음은 내 돼지 스크립트의 부분이다. 나는 ID를 저장할 수 있지만 정규식을 사용하여 나머지를 추출하는 방법을 모른다.

. . .

matching_messages = FILTER raw_lines BY (LOWER(message) MATCHES '.*cc_altus-plaform.*');

ids = FOREACH matching_messages GENERATE REGEX_EXTRACT(message,'id=>\\d*',0);

names = FOREACH matching_messages GENERATE REGEX_EXTRACT(message,'name=>\\"\\",',0);

line_with_date = FOREACH matching_messages GENERATE
DateFormatter(timestamp) AS formatted_time: chararray, message;

DUMP names;

해결법

  1. ==============================

    1.다음 코드 조각은 작동 내가 쓴 정규식입니다 :

    다음 코드 조각은 작동 내가 쓴 정규식입니다 :

    id = FOREACH matching_messages GENERATE REGEX_EXTRACT(message,'(?<=id=>)\\d*',0);
    
    name = FOREACH matching_messages GENERATE REGEX_EXTRACT(message,'name=>\\"[\\w]*\\"',0);
    
    cpu = FOREACH matching_messages GENERATE REPLACE( REGEX_EXTRACT(message, 'cpu=>\\{.*?\\}',0), ',','');
    
    memory = FOREACH matching_messages GENERATE REGEX_EXTRACT(message,'memory=>\\{.*?\\}',0);
    
    cluster = FOREACH matching_messages GENERATE REGEX_EXTRACT(message,'cluster_stats=>\\{.*?\\}',0);
    
  2. from https://stackoverflow.com/questions/47184158/extracting-string-from-logs-with-regex-in-pig-script by cc-by-sa and MIT license