海量数据topk问题(shell版本)

shell版本:

Q1 为什么 用这个方式实现?

因为在真实环境中

一般方式:

  • 首先通过脚本,excel等工具,(很多公司也是excel完成事情)
  • 可以快速验证,出结果.
  • 然后利用strom等大数据分析平台,通过写对应的jobs来统计指标。

第一题

问: 从一亿个数据中找出 出现次数最多的前10个值?

答:

如果一个数据一行:cat number.txt|sort -n |uniq -c |sort -k1nr -k2nr |head -10|awk -F " " '{print $2}'如果多个数据一行:cat number.txt|awk '{for(i=1;i<=NF;i++) a[$i]++} END{for(i in a) print i,a[i]}' |sort -k1nr -k2nr |head -10|awk -F " " '{print $2}'

分析

 假如该数据是是个整数 long 类型 在64位 sizeof(long)=8 字节, 一亿个记录占用内存=762M (一亿一个记录占用内存762M)一个普通云主机2G内存(足够)计算过程: 这需要统计每个单词出现次数,并且按照次数,数值排序

sort -n: 对数字进行排序 按照从小到大顺序

uniq -c: 统计数字出现次数 ,uniq命令只能对相邻行进行去重复操作

sort -k1nr -k2nr : 根据第一列数据次数 排序,根据数值排序

|awk -F " " '{print $2}': 输出结果

第二题

问: 海量日志数据,提取出某日访问百度次数最多的那个IP。

答 :

单个任务:find ./ -name visit.log | xargs -n1 awk -F " " '{a[$1]+=1} END{for (i in a) {print i"-"a[i]}}' |sort -t'-' -k2nr |awk '{print $1 }'| head -n 10多任务1 大文件分割成小文件 split -l 10 visit.log new2 统计小文件ip出现次数(8个进程并行处理124个任务,输出结果写到各自文件中) find ./ -name visit.log | xargs -n1 -P 8 -I{} awk -F " " '{a[$1]+=1} END{for (i in a) {print i"-"a[i] >>"{}.99"}}' {}2排序 (8个进程并行处理124个任务,输出结果写到各自文件中) find ./ -name "*99"|xargs -n1 -I {} -P 8 sh -c 'sort -t'-' -k2nr {} -o{}'3 最后输出ip  find ./ -name "*99" |xargs awk -F "-" '{print $1}'多机器: parallel可以代替xargs If you use xargs and tee today you will find GNU parallel very easy to use as GNU parallel is written to have the same options as xargs

分析

初步估算:日志存储空间 16G

 1个unsigned int占用4字节,40亿大约是4G个数不到,那么一共大约要用16G的内存空间
  • 初步估算:IP个数 16G
  • IP地址是32位,共有N=2^32=4G个不同的IP地址。
  • 一个IP地址 sizeof(int)=4, 存储ip需要消耗 4G*4=16G
  • 初步拆分数据(日志存储空间=IP存储空间)
  • 单核允许的内存空间512M
  • 512M/4=128M 即512M内存可以统计128M个不同的IP地址的访问次数.而N/128M =4G/128M = 32 ,
  • 所以只要把IP地址划分成32个不同的区间。
  • 因为4核:
  • 32*4=124个小文件
  • 文件大小 128M/4=62M
  • 初步估算开启并发进程数量:16
  • 假设单cpu单位时间处理 8个任务, 4个任务/8个任务=0.5 ,负载为0.5
  • 为了重复利用cpu 开启4*4=16个进程。系统整体负载为2。
  • 系统正常运行;

理解Linux系统负荷 参考

说明:下面信息来源网络:

  • 就像2018 年春晚直播期间「淘宝崩溃事件」,也估算错误过一次,
  • 文件大小 3.2G,需要一小时来统计

简单来说数据量大,需要内存小,需要拆分文件批量处理,

批量处理特点就是耗时,就需要多线程。

第三题

问:

有一个1GB大小的文件,里面的每一行是一个词,词的大小不超过16个字节,内存限制大小是10MB。返回频数最高的100个词。

答:

10M内存还写什么程序,现实生活中还没有遇到这样的情况.

思路回到题目1和题目2

分析

可以参考 <>

可以简化成下面请看 parallel

seq 1 10 |parallel -j10 "sleep 1;echo {}" //10秒的任务 变成1秒完成

参考

  1. 情景linux--shell如何实现多线程
  2. 理解Linux系统负荷

关键字:shell 并发

有什么疑问吗,请留言

shell 分割文本_五分钟shell系列第三节-海量数据topk问题相关推荐

  1. STM32F103五分钟入门系列(十三)独立看门狗IWDG

    参考:STM32F103五分钟入门系列(十三)独立看门狗IWDG 作者:自信且爱笑' 发布时间:2021-07-31 19:50:28 网址:https://blog.csdn.net/Curnane ...

  2. STM32F103五分钟入门系列(二)GPIO的七大寄存器+GPIOx_LCKR作用和配置

    摘自:STM32F103五分钟入门系列(二)GPIO的七大寄存器+GPIOx_LCKR作用和配置 作者:自信且爱笑' 发布时间: 2021-05-01 12:08:32 网址:https://blog ...

  3. STM32F103五分钟入门系列(一)跑马灯(库函数+寄存器)+加编程模板+GPIO总结

    摘自:STM32F103五分钟入门系列(一)跑马灯(库函数+寄存器)+加编程模板+GPIO总结 作者:自信且爱笑' 发布时间: 2021-04-28 21:17:40 网址:https://blog. ...

  4. STM32F103五分钟入门系列(八)SysTick滴答定时器+SysTick中断实现跑马灯

    学习板:STM32F103ZET6 往期博客: STM32F103五分钟入门系列(一)跑马灯(库函数+寄存器)+加编程模板+GPIO总结 STM32F103五分钟入门系列(二)GPIO的七大寄存器+G ...

  5. STM32F103五分钟入门系列(十六)输入捕获(精雕细琢-.-)

    学习板:STM32F103ZET6 往期博客: STM32F103五分钟入门系列(一)跑马灯(库函数+寄存器)+加编程模板+GPIO总结 STM32F103五分钟入门系列(二)GPIO的七大寄存器+G ...

  6. 正则表达式里转义字符_五分钟搞定正则表达式,如果没搞定,再加两分钟

    五分钟搞定正则表达式,如果没搞定,再加两分钟 [这是 ZY 第 18 篇原创文章] 文章概览 一.正则表达式介绍 正则表达式,又称规则表达式.(英语:Regular Expression,在代码中常简 ...

  7. 截取小数点_五年级上册系列| 小数点位置变化名师微课+课本+学案,暑假预科,很香!...

    点击蓝字关注我们 李艳玲工作室微课展播[总142期] 主讲教师:徐素平 电子课本 学 案 小数乘法 [学习目标] 1.熟练掌握小数点的移动引起小数大小变化的规律,并能举一反三,灵活运用. 2.自主探索 ...

  8. 前缀表达式后缀表达式_五分钟小知识之什么是后缀表达式

    点击蓝色"五分钟学算法"关注我哟 加个"星标",一起学算法 后缀表达式,又称逆波兰式,指的是不包含括号,运算符放在两个运算对象的后面,所有的计算按运算符出现的顺 ...

  9. markdown 本地链接_五分钟快速入门Markdown

    前言 开篇第一问,什么是markdown?我为什么选择用它而不是用word? markdown是一种极为简洁的标记语言,使用markdown可以更集中于写作内容本身而不必过分纠结于格式排版问题,可以把 ...

最新文章

  1. 番外:Spring MVC环境搭建和Mybatis配置避坑篇
  2. 差异表达基因火山图(ggplot函数)
  3. CentOS开机自动运行程序的脚本
  4. Windows8/Silverlight/WPF/WP7/HTML5周学习导读(1月1日-1月6日)
  5. Pytorch中nn.Conv2d的用法
  6. vue写自定义指令(全局或者组件内部)
  7. c#.net 无法直接启动带有“类库输出类型”的项目
  8. Activity保存状态saving activity state和onPause()
  9. vscode中java打包exe
  10. vue常用的几个框架
  11. html状态码206,http状态码204/206/200理解
  12. 绝了,hutool导出excel 图片居然没有调用方法
  13. 【腾讯云】云服务器 Nginx 内网访问 COS 省流量费
  14. 《安富莱嵌入式周报》第266期:真正模拟DA神的威力,全开源nV级测量仪表挑战赛结束,欣赏震撼设计过程
  15. python怎么关闭浏览器_/python里webbrowser怎么关闭游览器
  16. int类型转换为string类型
  17. pandas -----变形(透视表、melt、stack、unstack),哑变量与因子变化
  18. QString::fromLocal8Bit()函数
  19. Deepin v20 手动安装大黄蜂驱动(清华同方T45PRO-GAR-21053)
  20. 详细聊聊固码——第三方支付收单方的机会

热门文章

  1. 魔方HIS 医院信息系统 诊所软件 门诊管理 预约挂号 医疗收费系统
  2. 转载CSDN积分获取规则
  3. 福利 | 520,感谢30万小伙伴的关注和同行
  4. 《被嫌弃的松子一生》微评有感
  5. R语言dplyr包group_by函数、summarise函数、where函数和across函数计算dataframe数据中所有的数值数据列的均值、across函数对多个列执行相同的操作
  6. 【erlang】根据奇数位的概率随机求偶数位 概率列表求随机值
  7. Windows上配置host
  8. 证途网可靠吗?证途网成就了我的梦想
  9. 解决chrome插件安装时出现的“程序包无效”问题信息:程序包无效。
  10. 鸿蒙os价格表,搭载鸿蒙 OS!华为智慧屏新品来袭:价格 3000+