2017-12-04 26 views
0

には、ここではサンプルデータが正規表現[文字列]複数行

2017-02-04 04:48:11,123 DEBUG [org.quartz.core.QuartzSchedulerThread] - <batch acquisition of 0 triggers> 
2017-02-04 04:48:20,892 INFO [org.jasig.inspektr.audit.support.Slf4jLoggingAuditTrailManager] - <Audit trail record BEGIN 
============================================================= 
WHO: audit:unknown 
WHAT: TGT-7d937-yRqp6ObM7JOtkUZ7Ff4yEo95-casino1.example.org 
ACTION: TICKET_GRANTING_TICKET_DESTROYED 
APPLICATION: CASINO 
WHEN: Sat Feb 04 04:48:20 AEDT 2017 
CLIENT IP ADDRESS: 160.50.201.557 
SERVER IP ADDRESS: login.cfu.asg 
============================================================= 

> 
2017-02-04 04:48:32,165 INFO [org.jasig.cas.services.DefaultServicesManagerImpl] - <Reloading registered services.> 
2017-02-04 04:48:32,167 INFO [org.jasig.casino.services.DefaultServicesManagerImpl] - <Loaded 2 services.> 
2017-02-04 04:48:38,889 DEBUG [org.quartz.core.QuartzSchedulerThread] - <batch acquisition of 1 triggers> 
2017-02-04 04:48:52,790 DEBUG [org.quartz.core.QuartzSchedulerThread] - <batch acquisition of 0 triggers> 
2017-02-04 04:48:52,790 DEBUG [org.quartz.core.JobRunShell] - <Calling execute on job DEFAULT.serviceRegistryReloaderJobDetail> 
2017-02-04 04:48:52,790 INFO [org.jasig.casino.services.DefaultServicesManagerImpl] - <Reloading registered services.> 
2017-02-04 04:48:52,792 DEBUG [org.jasig.casino.services.DefaultServicesManagerImpl] - <Adding registered service ^(https?|imaps?)://.*> 
2017-02-04 04:48:52,792 DEBUG [org.jasig.casino.services.DefaultServicesManagerImpl] - <Adding registered service 
2017-02-04 04:48:52,792 INFO [org.jasig.casino.services.DefaultServicesManagerImpl] - <Loaded 2 services.> 
2017-02-04 04:49:14,365 INFO [org.jasig.casino.services.DefaultServicesManagerImpl] - <Reloading registered services.> 
2017-02-04 04:49:14,366 INFO [org.jasig.casino.services.DefaultServicesManagerImpl] - <Loaded 2 services.> 
2017-02-04 04:49:19,699 DEBUG [org.quartz.core.QuartzSchedulerThread] - <batch acquisition of 0 triggers> 
2017-02-04 04:49:43,465 DEBUG [org.quartz.core.QuartzSchedulerThread] - <batch acquisition of 0 triggers> 
2017-02-04 04:50:00,978 INFO [org.jasig.casino.authentication.PolicyBasedAuthenticationManager] - <JaasAuthenticationHandler successfully authenticated > 
2017-02-04 04:50:00,978 INFO [org.jasig.casino.authentication.PolicyBasedAuthenticationManager] - <Authenticated 3785973 with credentials.> 
2017-02-04 04:50:00,978 INFO [org.jasig.inspektr.nhgij.support.Slf4jLogggbhAuditTrailManaver] - <Audit trail record BEGIN 
============================================================= 
WHO: z3705z73 
WHAT: supplied credentials: [d37c5973] 
ACTION: AUTHENTICATION_SUCCESS 
APPLICATION: casinoINO 
WHEN: Sat Feb 04 04:50:00 AEDT 2017 
CLIENT IP ADDRESS: 101.181.28.555 
SERVER IP ADDRESS: login.cfu.asg 
============================================================= 

> 

され、データが上になり、そこにすることができ私の解析には関係のないパターン間の他のログデータ。私は約40GBのファイルがあり、それぞれに1日分のデータが含まれています。

これらのファイルはすべてgzip圧縮されています。 sc.wholeTextFilesを使用してRDDのペアを取得しようとしましたが、各ファイルが400MBから800MB(非圧縮)になるとJavaのヒープスペースエラーが発生します。

私はsc.textFileを使い始め、1つのファイルを読むことを試みました。私はRDD [String]を作成することができます。幸いなことに、このRDDでアクションを実行すると、sc.textFileはヒープスペースの問題を返しません。

ここに私が試したコードです。

val casinop2 = sc.wholeTextFiles("/logdata/casino/catalina.out-20150228.gz")

val casop = casinop2.flatMap(x=>x.split("\n")) .filter(x=> !(x.contains("Reloading registered services") || x.contains("Loaded 2 services.") || x.contains("DEBUG") || x.contains("ERROR") || x.contains("java.lang.RuntimeException") || x.contains("Caused by:") || x.contains("Granted ticket") || x.contains("java.lang.IllegalStateException") || x.startsWith("\t") || x.contains("org.jasig.cas.authentication.PolicyBasedAuthenticationManager")))

val pattern = new Regex("""((\d{4})-(\d{2})-\d{2}\s\d{2}:\d{2}:\d{2}),\d{3}\s+(\w+)\s+\[(.*)\]\s+\-\s+\<.*\s\=*\s+([W][H][O]\:)\s+(.*)\s+([W][H][A][T]\:)\s+(.*)\s+([A][C][T][I][O][N]\:)\s+(.*)\s+([A][P][P][L][I][C][A][T][I][O][N]\:)\s+(.*)\s+([W][H][E][N]\:)\s+(.*)\s+([A-Z\s]{17}\:)\s+(.*)\s+([A-Z\s]{17}\:)\s+(.*)\s+\=*\s\s\>""") pattern: scala.util.matching.Regex = ((\d{4})-(\d{2})-\d{2}\s\d{2}:\d{2}:\d{2}),\d{3}\s+(\w+)\s+\[(.*)\]\s+\-\s+\<.*\s\=*\s+([W][H][O]\:)\s+(.*)\s+([W][H][A][T]\:)\s+(.*)\s+([A][C][T][I][O][N]\:)\s+(.*)\s+([A][P][P][L][I][C][A][T][I][O][N]\:)\s+(.*)\s+([W][H][E][N]\:)\s+(.*)\s+([A-Z\s]{17}\:)\s+(.*)\s+([A-Z\s]{17}\:)\s+(.*)\s+\=*\s\s\>

case class MLog(datetime: String, message: String, process: String, who: String, what: String, action: String, application: String, when: String, clientipaddress: String, serveripaddress: String,year: String, month: String)

pattern.findAllMatchIn(casop.collect.toString).toList

今、最後の文は私にheapspaceエラーがスローされます。私は文字列変数にrddを必要とする理由は、正規表現は複数の行の入力、単一の行が必要です。一行のために、私はマップを使用することになり、flatmapなど

私は、ログファイルから取得する必要があり、出力は、我々正規表現するために複数行入力してフィードを読むことができますどのように

|2017-02-04 04:54:41| INFO|org.jasig.inspekt...|  s4542732|supplied credenti...|AUTHENTICATION_SU...|  CAS|Sat Feb 04 04:54:...| 175.163.28.77|login.vu.edu.au|2017| 02| 
|2017-02-04 04:54:41| INFO|org.jasig.inspekt...|  s4542732|TGT-78959-EX63Wf2...|TICKET_GRANTING_T...|  CAS|Sat Feb 04 04:54:...| 175.163.28.77|login.vu.edu.au|2017| 02| 
|2017-02-04 04:54:41| INFO|org.jasig.inspekt...|  4542732|ST-474481-jTxCJFB...|SERVICE_TICKET_CR...|  CAS|Sat Feb 04 04:54:...| 175.163.28.77|login.vu.edu.au|2017| 02| 
|2017-02-04 04:54:44| INFO|org.jasig.inspekt...|audit:unknown|ST-474481-jTxCJFB...|SERVICE_TICKET_VA...|  CAS|Sat Feb 04 04:54:...| 203.13.194.68|login.vu.edu.au|2017| 02| 
|2017-02-04 04:55:02| INFO|org.jasig.inspekt...|  s3785573|supplied credenti...|AUTHENTICATION_SU...|  CAS|Sat Feb 04 04:55:...| 101.181.28.125|login.vu.edu.au|2017| 02| 
|2017-02-04 04:55:02| INFO|org.jasig.inspekt...|  s3785573|TGT-78960-yWaWkcN...|TICKET_GRANTING_T...|  CAS|Sat Feb 04 04:55:...| 101.181.28.125|login.vu.edu.au|2017| 02| 
|2017-02-04 04:55:02| INFO|org.jasig.inspekt...|  3785573|ST-474482-rARxdUG...|SERVICE_TICKET_CR...|  CAS|Sat Feb 04 04:55:...| 101.181.28.125|login.vu.edu.au|2017| 02| 
|2017-02-04 04:55:02| INFO|org.jasig.inspekt...|audit:unknown|ST-474482-rARxdUG...|SERVICE_TICKET_VA...|  CAS|Sat Feb 04 04:55:...| 203.13.194.68|login.vu.edu.au|2017| 02| 
+-------------------+-------+--------------------+-------------+--------------------+--------------------+-----------+--------------------+---------------+---------------+----+-----+ 

すべきですか?

私は固定されており、あなたの正規表現を改善し、それが複数のライン上にあるあなたの最後のログに動作するようになりましたしている
+0

は、あなたのヒープサイズを大きくしようとしたことがありますか?例: '--executor-memory 10g' – Allan

+0

私の答えは満足ですか?私はそれがあなたを助けたことを願っています! – Allan

+0

改良された正規表現をお寄せいただきありがとうございます。--executor-memory 10gを試しましたが、 "java.lang.OutOfMemoryError:GCオーバーヘッドの上限を超過しました"というメッセージが表示されます – Marsi

答えて

1

正規表現は次のような獣である:

(\d{4}-\d{2}-\d{2}\s\d{2}:\d{2}:\d{2}),\d{3}\s+(\w+)\s+\[(.*)\]\s+\-\s+<[^>]*\s\=*\s+WHO\:\s+([^>\n]*)\s+WHAT\:\s+([^>\n]*)\s+ACTION\:\s+([^>\n]*)\s+APPLICATION\:\s+([^>\n]*)\s+WHEN\:\s+([^>\n]*)\s+([A-Z\s]{17}\:)\s+([^>\n]*)\s+([A-Z\s]{17}\:)\s+([^>\n]*)\s+\=*\s\s> 

私はあなたにそれを試してみましたあなたはあなたの正確なニーズに応じて適応させる必要があり、次の置換パターンを使用してログ:ここ

\1 | \2 | \3 | WHO:\4 | WHAT: \5 | ACTION: \6 | APPLICATION: \7 | WHEN: \8 | \9 $10 | $11 $12 

が結果です:

before changes

after changes

なく、少なくとも最後に、あなたはあなたのヒープサイズを変更する必要があります:--executor-memory 10g

関連する問題