Hadoop - 分析日志文件(Java)

Jus*_*irl 6 java logging hadoop

日志文件如下所示:

Time stamp,activity,-,User,-,id,-,data
Run Code Online (Sandbox Code Playgroud)

-

2013-01-08T16:21:35.561+0100,reminder,-,User1234,-,131235467,-,-
2013-01-02T15:57:24.024+0100,order,-,User1234,-,-,-,{items:[{"prd":"131235467","count": 5, "amount": 11.6},{"prd": "13123545", "count": 1, "amount": 55.99}], oid: 5556}
2013-01-08T16:21:35.561+0100,login,-,User45687,-,143435467,-,-
2013-01-08T16:21:35.561+0100,reminder,-,User45687,-,143435467,-,-
2013-01-08T16:21:35.561+0100,order,-,User45687,-,-,-,{items:[{"prd":"1315467","count": 5, "amount": 11.6},{"prd": "133545", "count": 1, "amount": 55.99}], oid: 5556}
...
...
Run Code Online (Sandbox Code Playgroud)

编辑

此日志中的具体示例:

User1234已经得到了reminder-这reminderid= 131235467,在此之后,他作出了order与以下data:{items:[{"prd":"131235467","count": 5, "amount": 11.6},{"prd": "13123545", "count": 1, "amount": 55.99}], oid: 5556} 在这种情况下idprddata都是一样的,所以我想总结一下count*amount- >在这种情况下,5*11.6 = 58和输出它像

User 1234    Prdsum: 58    
Run Code Online (Sandbox Code Playgroud)

User45687还有一个做order,但他并没有收到reminder这样没有总结他的data

输出:

User45687    Prdsum: 0
Run Code Online (Sandbox Code Playgroud)

此日志的最终输出:

User 1234    Prdsum: 58    
User45687    Prdsum: 0
Run Code Online (Sandbox Code Playgroud)

我的问题是:我该如何比较这值- >(?) id,并prddata?关键是用户.自定义Writable是否有用 - > value =(id,data).我需要一些想法.

Sum*_*man 0

我建议按照第一次 Hadoop 作业的结果获取原始输出总和,因此在 Hadoop 作业结束时,您会得到如下结果:

User1234     Prdsum: 58    
User45687    Prdsum: 0
Run Code Online (Sandbox Code Playgroud)

然后有第二个 Hadoop 作业(或独立作业)来比较各个值并生成另一个报告。

您是否需要“状态”作为第一个 Hadoop 作业的一部分?如果是这样,那么您将需要在映射器或化简器中保留一个 HashMap 或 HashTable 来存储要比较的所有键(在本例中为用户)的值 - 但这不是一个好的设置,恕我直言。您最好只在一项 Hadoop 作业中进行聚合,然后在另一项作业中进行比较。