--2収集したオフライン処理方式をログに記録します。計算データクリーニングと

記事に接続され、この論文ハイブ従来のクリーニングとデータを完了するために、計算

ストレージ。生のログ情報

次のように表ハイブは、保存して読み込むための正規表現の方法をサポートしています。

CREATE EXTERNAL TABLEのnginxlog(
  IPのSTRING、
  時間STRING、
  要求STRING、
  ステータスSTRING、
  サイズSTRING、
  リファラSTRING、
  エージェント文字列)
行形式のSERDEを' org.apache.hadoop.hive.serde2.RegexSerDe ' 
WITH SERDEPROPERTIES(
  "input.regex" = "([ ^ ] *)(\\ [ [^ \\ ] ] * \\])(\" [ ^ \ " ] * \")(- | [ 0-9 ] *)(- |[ 0-9 ] *)(\ " [ ^ ] * \ ")(\" [ ^ \\\" ] * \ ")" 
STORED AS TEXTFILEのLOCATION '/テスト';

次のように私たちのaccess.logログデータの形式は次のとおりです。

192.168.111.1 [29/7月/ 2019:19:58:55 0800]「/big.png?url=http://127.0.0.1/a.html&urlname=a.html&scr=1366x768&ce=1&cnv=0.6735760053703803&ref=をGET 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" の「Mozilla / 5.0(Windows NTの10.0; WOW64)のAppleWebKit / 537.36(KHTML 、ヤモリなど)クローム/ 63.0.3239.132サファリ/ 537.36"

だから、正規表現テーブルステートメントを構築します 

([^] *)(\\ [[^ \\]] * \\])(\ "[^ \"] * \「)( - | [0-9] *)( - | [0-9 ] *)(\「[^] * \」)(\「[^ \\\」] * \「)と、上記のデータと一致している必要があり、
すべての最初は、各パケットの重要性で一致し、この正規表現を理解する必要があります。
  ([^] *) // ^ブラケット表現では、スペース以外の任意の文字に一致する、それが文字のセットを表した時間を受け付けません。
   ( - | [0-9] *)  - 9に桁以上の数字0 //は一致を示します
  (\「[^ \\\」] * \「)  // \」引用符の前に実際の二重引用符を表します\文字が後に二重引用符をエスケープするために、Java言語で、タイプはポジティブとは何の関係もありません

( \\ [^ \\]] * \\]) //
\\ [レギュラータイプ\ [すなわち、式中の実際の左ブラケット正の符号に

好ましいのユニットテストコード検証JAAVにおけるこの正規型前添加ハイブ正式なアプリケーションにおいて:

@Test
     公共 ボイドTESTLOG(){ 

        文字列の正規表現 = "(([^] *)(\\ [[^ \\]] * \\])(\" [^ \ "] * \")( - | [ 0-9] *)( - | [0-9] *)(\ "[^] * \")(\ "[^ \\\"] * \ "))" ; 
        パターンpattern = Pattern.compile( REGEX);
       文字列データ= "192.168.111.1 [21 / Jul- / 2019である:15:53である:07 0800}] \" \ HTTP / 1.1 /favicon.ico GET http://192.168.111.123/ "404 555 \" \ "\"のMozilla / 5.0(Windows NTの10.0; WOW64)のAppleWebKit / 537.36(ヤモリのようにKHTML、)クローム/ 70.0.3538.67サファリ/ 537.36 \ "" ; 
        マッチャーマッチャー = Pattern.matcher(データ);
         
     //注:マッチ()メソッドは、メソッドがサブストリングを照合することによって表すことができる()を見つける、示される文字列全体と一致する
IF (マッチャー。 マッチ()){ int型 i = 0; iはmatcher.groupCount()<; I ++のを){ するSystem.out.println(matcher.group(I +1 ))。 } } { するSystem.out.println( "いいえ一致が見出さ%のN。" ); } }

 

 
 

 

 

 

第二生ログ情報を処理 - >中間処理データが生成されます

 

 

 

III。KPIインジケータは、中間データ処理から最終的な統計データを生成します

 

おすすめ

転載: www.cnblogs.com/hzhuxin/p/11266385.html