b*****u 发帖数: 648 | 1 最近面的一家web公司,最后一轮CTO老头。
问了一个经典题,从一个很大的日志文件中找出出现次数最多的ip。
我当时给的是“秒杀99%海量数据”帖里的标准解法,hash+merge
老头嘿嘿一笑,然后问我,你估计你把这一坨东西coding出来,要花多久?一小时?一
天?一个月?
我当然知道不妙,但是也只能顺着他说那就一天吧。
他说,现在让你用一行代码解决这个问题,怎么搞。
跪了。
后来他写了他的办法: 不用hash,直接把日志等分成几个小文件,然后用awk/sed对每
个文件进行类似于SQL里groupby的操作,最后加总取最大值,总共一行bash命令搞定 (
具体的命令我也忘了)。 严格来说并不便于scale,但是便于coding, batch和customize
学术讨论和生产实践的差别。 |
L*******t 发帖数: 782 | 2 这个和那个找电话号码的考grep命令的类似。
(
【在 b*****u 的大作中提到】 : 最近面的一家web公司,最后一轮CTO老头。 : 问了一个经典题,从一个很大的日志文件中找出出现次数最多的ip。 : 我当时给的是“秒杀99%海量数据”帖里的标准解法,hash+merge : 老头嘿嘿一笑,然后问我,你估计你把这一坨东西coding出来,要花多久?一小时?一 : 天?一个月? : 我当然知道不妙,但是也只能顺着他说那就一天吧。 : 他说,现在让你用一行代码解决这个问题,怎么搞。 : 跪了。 : 后来他写了他的办法: 不用hash,直接把日志等分成几个小文件,然后用awk/sed对每 : 个文件进行类似于SQL里groupby的操作,最后加总取最大值,总共一行bash命令搞定 (
|
n**m 发帖数: 122 | 3 赞另类解法 不过只适用于小文件吧
对大文件来说 命令虽短 执行时间不短
如果真是超大文件海量ip 还是map reduce coding方便吧
code就是一个简单的word count翻版 熟悉的话几分钟搞定
当然前提是得有那么多机器和现成的环境可用
(
【在 b*****u 的大作中提到】 : 最近面的一家web公司,最后一轮CTO老头。 : 问了一个经典题,从一个很大的日志文件中找出出现次数最多的ip。 : 我当时给的是“秒杀99%海量数据”帖里的标准解法,hash+merge : 老头嘿嘿一笑,然后问我,你估计你把这一坨东西coding出来,要花多久?一小时?一 : 天?一个月? : 我当然知道不妙,但是也只能顺着他说那就一天吧。 : 他说,现在让你用一行代码解决这个问题,怎么搞。 : 跪了。 : 后来他写了他的办法: 不用hash,直接把日志等分成几个小文件,然后用awk/sed对每 : 个文件进行类似于SQL里groupby的操作,最后加总取最大值,总共一行bash命令搞定 (
|
A**u 发帖数: 2458 | 4 sort | uniq -c | sort -r | head -1
(
【在 b*****u 的大作中提到】 : 最近面的一家web公司,最后一轮CTO老头。 : 问了一个经典题,从一个很大的日志文件中找出出现次数最多的ip。 : 我当时给的是“秒杀99%海量数据”帖里的标准解法,hash+merge : 老头嘿嘿一笑,然后问我,你估计你把这一坨东西coding出来,要花多久?一小时?一 : 天?一个月? : 我当然知道不妙,但是也只能顺着他说那就一天吧。 : 他说,现在让你用一行代码解决这个问题,怎么搞。 : 跪了。 : 后来他写了他的办法: 不用hash,直接把日志等分成几个小文件,然后用awk/sed对每 : 个文件进行类似于SQL里groupby的操作,最后加总取最大值,总共一行bash命令搞定 (
|
j********x 发帖数: 2330 | 5 话说能用awk / sed能处理的不算“很大”吧
另外所谓“秒杀99%海量数据”的标准解法不过是某网友的一家之言吧
另外能透露一下该公司的背景么?
(
【在 b*****u 的大作中提到】 : 最近面的一家web公司,最后一轮CTO老头。 : 问了一个经典题,从一个很大的日志文件中找出出现次数最多的ip。 : 我当时给的是“秒杀99%海量数据”帖里的标准解法,hash+merge : 老头嘿嘿一笑,然后问我,你估计你把这一坨东西coding出来,要花多久?一小时?一 : 天?一个月? : 我当然知道不妙,但是也只能顺着他说那就一天吧。 : 他说,现在让你用一行代码解决这个问题,怎么搞。 : 跪了。 : 后来他写了他的办法: 不用hash,直接把日志等分成几个小文件,然后用awk/sed对每 : 个文件进行类似于SQL里groupby的操作,最后加总取最大值,总共一行bash命令搞定 (
|
f*******t 发帖数: 7549 | 6 大概是这样吧
sed "s/^.*ip=//g" | awk -F' ' 'print {$1}' | sort -r | uniq -c | sort -n -r
-k 1 |
S********o 发帖数: 4 | 7 临时的解决问题或数据需求和正规的解决问题不应是一个方法,要是自己顺便统计用的
,也没有人正规的搞那么复杂。
btw:
awk没有必要吧, 第一个sort不必-r吧
r
【在 f*******t 的大作中提到】 : 大概是这样吧 : sed "s/^.*ip=//g" | awk -F' ' 'print {$1}' | sort -r | uniq -c | sort -n -r : -k 1
|
y*******g 发帖数: 6599 | 8 真很大的话hash merge也不行啊
可能的确要map reduce了
【在 n**m 的大作中提到】 : 赞另类解法 不过只适用于小文件吧 : 对大文件来说 命令虽短 执行时间不短 : 如果真是超大文件海量ip 还是map reduce coding方便吧 : code就是一个简单的word count翻版 熟悉的话几分钟搞定 : 当然前提是得有那么多机器和现成的环境可用 : : (
|
f*******t 发帖数: 7549 | 9 sed是删除ip前的内容,awk是删除IP后面的内容
第一个sort确实不需要-r。命令是随便写的,有没有用还要经过实践验证
【在 S********o 的大作中提到】 : 临时的解决问题或数据需求和正规的解决问题不应是一个方法,要是自己顺便统计用的 : ,也没有人正规的搞那么复杂。 : btw: : awk没有必要吧, 第一个sort不必-r吧 : : r
|
x*********n 发帖数: 28013 | 10 我发现这个很经典啊。
我以前作业好像就是awk出来的。 |
c********t 发帖数: 5706 | 11 hash到multiple machine , find each top 10, then merge result. 不就是map
reduce吗?
【在 y*******g 的大作中提到】 : 真很大的话hash merge也不行啊 : 可能的确要map reduce了
|