本文共 2556 字,大约阅读时间需要 8 分钟。
grep
来处理大量的数据的时候, busybox
中带的 grep
速度慢的让人痛苦。 解决之道是向容器添加一个(真正的) grep
。 grep
来匹配亚结构。我把文件分拆到5个Pi,每个都会处理大约730个文件,约840M的数据,我然后用 xargs
实现多核并行处理。跑了几次后,所有的数据会被读到缓存中,然后Pi可以在1-2秒内处理完毕,以备实时的搜索。在1300万数据中找出所有含碳的化合物只需要花8-10秒,这相当不可思议。 voxxit/alpine-rpi
来作为基础镜像 - 它相当小,大概只有5M,几乎包含所有需要的东西。但我发现其带的 xargs
不支持 -P
选项,因此我添加了 xargs
: apk --update add findutils
/opt/smiles # date;time /bin/ash -c " ls | xargs -P 4 -n 50 grep -h 'C1CCCCC1C=O'| wc -l ";dateSun Apr 19 14:25:54 GMT 201519real 1m 4.21suser 3m 57.52ssys 0m 3.52sSun Apr 19 14:26:58 GMT 2015
/proc
和 /sys
下面的内容,并且Ddocker之外试了搜索后,我决定是否我该使用一个更快的grep,结果,该容器使用了busybox: /opt/smiles # ls -li /bin/grep501101 lrwxrwxrwx 1 root root 12 Mar 6 13:27 /bin/grep -> /bin/busybox
grep
要慢许多。突然我好像柳暗花明,我决定安装下 grep
: /opt/smiles # apk search grepngrep-1.45-r1grep-doc-2.20-r1grep-2.20-r1/opt/smiles # apk --update add grepfetch http://repos.lax-noc.com/alpine/v3.1/main/armhf/APKINDEX.tar.gz(1/2) Installing pcre (8.36-r1)(2/2) Installing grep (2.20-r1)Executing busybox-1.22.1-r14.triggerOK: 6 MiB in 18 packages/opt/smiles # which grep/usr/bin/grep/opt/smiles # ls -li /usr/bin/grep66417 -rwxr-xr-x 1 root root 189840 Feb 2 11:05 /usr/bin/grep
bash/opt/smiles # date;time /bin/ash -c " ls | xargs -P 4 -n 50 grep -h 'C1CCCCC1C=O'| wc -l ";dateSun Apr 19 14:30:35 GMT 201519real 0m 1.81suser 0m 4.39ssys 0m 2.38sSun Apr 19 14:30:36 GMT 2015
转载地址:http://jrvdm.baihongyu.com/