[英]how to map a log file in java using spark?
我必須監視一個日志文件,其中寫入了應用程序的使用歷史。 該日志文件的格式如下:
<AppId,date,cpuUsage,memoryUsage>
<AppId,date,cpuUsage,memoryUsage>
<AppId,date,cpuUsage,memoryUsage>
<AppId,date,cpuUsage,memoryUsage>
<AppId,date,cpuUsage,memoryUsage>
... about 800000 rows
AppId
始終相同,因為僅在一個應用程序中引用,所以date
以dd/mm/yyyy hh/mm
cpuUsage
表示cpuUsage
和memoryUsage
以%
表示,例如:
<3ghffh3t482age20304,230720142245,0.2,3,5>
因此,具體來說, 我必須檢查此應用程序將使用spark和map reduce算法監視的CPU使用率和內存使用率的百分比 。
我的輸出是在CPU或內存使用率達到100%時打印警報
關於我如何開始的任何建議?
提前致謝。
這個想法是聲明一個類並將該行映射到一個scala對象中,
讓我們聲明案例類如下,
case class App(name: String, date: String, cpuUsage: Double, memoryusage: Double)
然后初始化SparkContext並從存在數據的文本文件中創建一個RDD,
val sc = new SparkContext(sparkConf)
val inFile = sc.textFile("log.txt")
然后解析每行並將其映射到App對象,以便范圍檢查會更快,
val mappedLines = inFile.map(x => (x.split(",")(0), parse(x)))
其中parse(x)方法的定義如下:
def parse(x: String):App = {
val splitArr = x.split(",");
val app = new App(splitArr(0),
splitArr(1),
splitArr(2).toDouble,
splitArr(3).toDouble)
return app
}
請注意,我假設輸入如下,(這只是為了給您提供想法,而不是整個程序),
ffh3t482age20304,230720142245,0.2,100.5
然后進行過濾器轉換,您可以在其中執行檢查並報告異常狀況,
val anamolyLines = mappedLines.filter(doCheckCPUAndMemoryUtilization)
anamolyLines.count()
doCheckCPUAndMemoryUtilization函數的定義如下,
def doCheckCPUAndMemoryUtilization(x:(String, App)):Boolean = {
if(x._2.cpuUsage >= 100.0 ||
x._2.memoryusage >= 100.0) {
System.out.println("App name -> "+x._2.name +" exceed the limit")
return true
}
return false
}
注意:這僅是批處理,不是實時處理。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.