数据源是从华为 XDR 导过来的,每天数据量大概 3.5TB ,目前想从中过滤出一些有用信息(方法是限定大类 ID 、小类 ID ),我用的是 shell 脚本去执行:
work_dir=dirname $0
cd ${work_dir}
my_log=count_103.log
LANG=C
my_conf=ls -l /ftp/S1U-103-20151013*.txt|awk '{print $9}'
for x in $my_conf
do
echo $x >>$my_log
awk -F "|" '{if ($24 =="8" && $25 == "162") print $0}' $x >>$my_log
done
目前脚本跑的情况来看,速度非常慢,两天只过滤出了 90M 左右的数据(预测过滤出的数据量应该在 GB 级别),想问一下有没有更好更快的方法去实现对文本数据的过滤?
1
bigtan 2015-10-16 15:18:14 +08:00
这种场景语言差异很大,试试 c/c++自己写
|
2
Andiry 2015-10-16 15:19:46 +08:00 via Android
mapreduce
|
3
aheadlead 2015-10-16 15:25:36 +08:00
jstorm ?
|
4
songco 2015-10-16 15:33:03 +08:00 1
如果格式固定, 过滤条件比较简单, io 密集型的, 随便什么语言写个程序效率应该都差不多.
这种的处理主要瓶颈是磁盘的性能, 比如之考虑读取, 单机器单普通硬盘, 按 50MB/s 的速度来过滤, 一天差不多 50MB*3600*24/1024/1024≈4.12T 实际上数据导出还要考虑网络, 导出数据的磁盘写入之类的. 用 hadoop 之类的效率会差很多. lz 的需求不是很明确, 比如数据存在哪里, 有多少台机器可以用之类的最好说明一下. |
5
crazyboy2014 2015-10-16 15:51:42 +08:00
尝试 gun parallel
|
6
xfspace 2015-10-16 15:57:55 +08:00
用 SSD 组 RAID10 试试
|
7
inter 2015-10-16 16:04:13 +08:00
用 perl 就行,就你这处理条件,速度基本就是你的磁盘速度。普通家用硬盘速度 10 个小时跑完一天数据,刚刚好
|
8
motopig 2015-10-16 16:25:37 +08:00
spring bath
|
9
aver4vex 2015-10-16 16:31:55 +08:00
my_conf=ls -l /ftp/S1U-103-20151013*.txt|awk '{print $9}'
这句太生猛了,机器内存扛得住吗 |
10
goodryb 2015-10-16 17:18:43 +08:00
你这能快就见鬼了,哈哈
for x in $my_conf do echo $x >>$my_log awk -F "|" '{if ($24 =="8" && $25 == "162") print $0}' $x >>$my_log done 你知道一次 IO 要耗时多久吗? 居然还要分两次写进去 就算你没有大数据处理经验,难道就不能分割,然后并行处理吗? 一台机器慢就不能多用几台机器吗? 好吧,我之前处理过几百 GB 级别的,分在 12 台机器上 8 核机器上,然后并发 8 个进程 用 shell 来处理,核心还是要减少 IO |
12
binux 2015-10-16 20:29:56 +08:00
@goodryb 前面写一句文件名到 log 里面怎么了嘛! 一个文件就写一次有多大的开销啊!
另外吐槽一下 awk, 直接写 awk -F "|" '$24 =="8" && $25 == "162"' 就可以了, 不用 if |
13
402124773 2015-10-16 20:32:45 +08:00
在使用 shell 脚本之前,是否考虑过把大文件分成几块,然后再执行,应该能稍微缓解下
|
14
snopy OP |
15
htc502 2015-10-17 14:08:36 +08:00 1
昨天就想回你,自己作死,被 V2EX 禁言了 1800 秒。。。
1. 并行。切开$x 文件,并行任务。循环也可以部分并行, google ‘ gnu parallel ’有惊喜 2. 敢问那个 LANG = C 是啥意思?没懂。。。撸个 c 版本 或者用 perl 搞一搞, c 的也应该不难啊,,,几十行应该能够搞定。。 光撸 awk 。。。。>>$my_log 那一行就行,其他还用 bash 或 perl 。 perl 也挺快 3. 预测滤出数据量。。。兴许你这两天跑的数据都是那 0.05 的奇葩部分也说不定啊。。 |
16
goodryb 2015-10-18 11:13:51 +08:00
@ryd994 从我个人实际操作来看,影响还是挺大的,我是指用 shell 来处理,我当时也没有记录数据,所以现在只是说个人感受
|