shell脚本处理大数据系列之(一)方法小结
2013-12-14 22:15
429 查看
转自:http://longriver.me/?p=57
方法1:
单进程处理大规模的文件速度如(上million量级)比较慢,可以采用awk取模的方法,将文件分而治之,这样可以利用充分的利用多核CPU的优势
方法2:
另外也可以使用split的方法,或者hashkey 的办法把大文件分而治之,
该办法的缺陷是需要对大文件预处理,这个划分大文件的过程是单进程,也比较的耗时
方法3:
该方法是方法2的延伸,在预处理之后,可以使用shell脚本起多个进程来并行执行,当然为了防止进程之间因为并行造成的混乱输出,可以使用锁的办法,也可以通过划分命名的办法。下面的例子比较巧妙使用mv 操作。这一同步操作起到互斥锁的作用,使得增加进程更加灵活,只要机器资源够用,随时增加进程,都不会造成输出上的错误。
方法1:
单进程处理大规模的文件速度如(上million量级)比较慢,可以采用awk取模的方法,将文件分而治之,这样可以利用充分的利用多核CPU的优势
for((i=0;i<5;i++));do cat query_ctx.20k | awk 'NR%5=='$i'' |\ wc -l 1> output_$i 2>err_$i & done
方法2:
另外也可以使用split的方法,或者hashkey 的办法把大文件分而治之,
该办法的缺陷是需要对大文件预处理,这个划分大文件的过程是单进程,也比较的耗时
infile=$1 opdir=querys opfile=res s=`date "+%s"` while read line do imei=`./awk_c "$line"` no=`./tools/default $imei 1000` echo $line >> $opdir/$opfile-$no done<$infile
方法3:
该方法是方法2的延伸,在预处理之后,可以使用shell脚本起多个进程来并行执行,当然为了防止进程之间因为并行造成的混乱输出,可以使用锁的办法,也可以通过划分命名的办法。下面的例子比较巧妙使用mv 操作。这一同步操作起到互斥锁的作用,使得增加进程更加灵活,只要机器资源够用,随时增加进程,都不会造成输出上的错误。
output=hier_res input=dbscan_res prefix1=tmp- prefix2=res- for file in `ls $input/res*` do tmp=`echo ${file#*-}` ofile1=${prefix1}${tmp} ofile2=${prefix2}${tmp} if [ ! -f $output/$ofile1 -a ! -f $output/$ofile2 ];then touch $output/aaa_$tmp mv $output/aaa_$tmp $output/$ofile1 if [ $? -eq 0 ] then echo "dealing "$file cat $file | python hcluster.py 1> $output/$ofile1 2> hier.err mv $output/$ofile1 $output/$ofile2 fi fi done
相关文章推荐
- shell 中比较多碰见的符号
- 关于su下bash:xxx :command not found
- 关于su下bash:xxx :command not found
- SHELL下面的正则表达式
- Bash如何取得当前正在执行的脚本的绝对路径?
- Bash的模式和配置文件加载
- Shell 下面的几种运算方式
- linux shell命令提示符号PS1设置
- 解决 Xshell 中不能中文乱码
- python clear shell window
- shell脚本-自定义option参数
- linux shell编程指南第二十六章------shell 工具
- Vim简明教程【CoolShell】
- shell
- 使用shell脚本对Linux系统和进程资源进行监控
- linux ubuntu customize shell prompt
- Android系统在超级终端下必会的命令大全(adb shell命令大全)
- erlang shell 命令中文使用说明
- erlang shell 命令中文使用说明
- 基于mcollective的多种plugins组合使用功能展示 推荐