转自:http://longriver.me/?p=57

方法1:

单进程处理大规模的文件速度如(上million量级)比较慢,可以采用awk取模的方法,将文件分而治之,这样可以利用充分的利用多核CPU的优势

1
2
3
4
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 的办法把大文件分而治之,
该办法的缺陷是需要对大文件预处理,这个划分大文件的过程是单进程,也比较的耗时

1
2
3
4
5
6
7
8
9
10
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 操作。这一同步操作起到互斥锁的作用,使得增加进程更加灵活,只要机器资源够用,随时增加进程,都不会造成输出上的错误。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
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脚本处理大数据系列之(一)方法小结的更多相关文章

  1. shell编程系列24--shell操作数据库实战之利用shell脚本将文本数据导入到mysql中

    shell编程系列24--shell操作数据库实战之利用shell脚本将文本数据导入到mysql中 利用shell脚本将文本数据导入到mysql中 需求1:处理文本中的数据,将文本中的数据插入到mys ...

  2. 大数据系列(3)——Hadoop集群完全分布式坏境搭建

    前言 上一篇我们讲解了Hadoop单节点的安装,并且已经通过VMware安装了一台CentOS 6.8的Linux系统,咱们本篇的目标就是要配置一个真正的完全分布式的Hadoop集群,闲言少叙,进入本 ...

  3. 玩转大数据系列之Apache Pig高级技能之函数编程(六)

    原创不易,转载请务必注明,原创地址,谢谢配合! http://qindongliang.iteye.com/ Pig系列的学习文档,希望对大家有用,感谢关注散仙! Apache Pig的前世今生 Ap ...

  4. 大数据系列(5)——Hadoop集群MYSQL的安装

    前言 有一段时间没写文章了,最近事情挺多的,现在咱们回归正题,经过前面四篇文章的介绍,已经通过VMware安装了Hadoop的集群环境,相关的两款软件VSFTP和SecureCRT也已经正常安装了. ...

  5. 大数据系列(4)——Hadoop集群VSFTP和SecureCRT安装配置

    前言 经过前三篇文章的介绍,已经通过VMware安装了Hadoop的集群环境,当然,我相信安装的过程肯定遇到或多或少的问题,这些都需要自己解决,解决的过程就是学习的过程,本篇的来介绍几个Hadoop环 ...

  6. 大数据系列(2)——Hadoop集群坏境CentOS安装

    前言 前面我们主要分析了搭建Hadoop集群所需要准备的内容和一些提前规划好的项,本篇我们主要来分析如何安装CentOS操作系统,以及一些基础的设置,闲言少叙,我们进入本篇的正题. 技术准备 VMwa ...

  7. 大数据系列之分布式数据库HBase-1.2.4+Zookeeper 安装及增删改查实践

    之前介绍过关于HBase 0.9.8版本的部署及使用,本篇介绍下最新版本HBase1.2.4的部署及使用,有部分区别,详见如下: 1. 环境准备: 1.需要在Hadoop[hadoop-2.7.3]  ...

  8. 大数据系列之分布式数据库HBase-0.9.8安装及增删改查实践

    若查看HBase-1.2.4版本内容及demo代码详见 大数据系列之分布式数据库HBase-1.2.4+Zookeeper 安装及增删改查实践 1. 环境准备: 1.需要在Hadoop启动正常情况下安 ...

  9. 大数据系列之Flume+kafka 整合

    相关文章: 大数据系列之Kafka安装 大数据系列之Flume--几种不同的Sources 大数据系列之Flume+HDFS 关于Flume 的 一些核心概念: 组件名称     功能介绍 Agent ...

随机推荐

  1. vim的编码设置

    VIM的相关字符编码主要有三个参数 fencs: 它是一个编码格式的猜测列表.当用vim打开某个文件时,会依次取这里面的编码进行解码,如果某个编码格式从头至尾解码正确,那么就用那个编码 fenc:它是 ...

  2. Unity优化之减少Drawcall

    简单来说,Drawcall就是屏幕渲染一次所需要的开销,为了较少消耗,提高性能,一般有以下几种方法. 一: 批处理 1.动态批处理 如果动态物体共用着相同的材质,那么Unity会自动对这些物体进行批处 ...

  3. linux学习笔记3:linux的网络配置,rpm包,shell以及samba服务器的使用和安装

    1.linux下的shell<linux命令.编辑器和shell编程> (1)shell种类有很多,常用的有三种,在linux可以通过ls -l /bin/*sh 来显示所有已安装的she ...

  4. 一个很好介绍js的例子

    function UpdateInit(opt){ this.init(opt);} UpdateInit.prototype={ loadUrl:null, loadParam:null, befo ...

  5. 关于netbeans中的JComboBox(复选框)

    以最近写的选课系统中添加课程项为例 1.往复选框中放入选项(根据数据库添加) (1)首先将  属性—>model中默认Item1234清空 (2)获得数据库中的数据并放入. SelectCour ...

  6. R.java不能自动更新

    1. The type R is already defined. (很多时候我们在导入其他人的程序的时候,会遇到这个错误) 通常在project里有两个R.java,一个在src,一个在gen,通常 ...

  7. 查询某个表或者所有表的字段说明 SQLServer

    查询某个表或者所有表的字段说明SELECT    [Table Name] = OBJECT_NAME(c.object_id),    [Column Name] = c.name,    [Des ...

  8. ERP登录(八)

    登录的存储过程: ALTER PROCEDURE [dbo].[UserLogin] @userid int output, @LoginName nvarchar(50), @Password nv ...

  9. Jumping Cows_贪心

    Description Farmer John's cows would like to jump over the moon, just like the cows in their favorit ...

  10. BZOJ3261 最大异或和 (可持久化Trie)

    ; len=; var x,y,z,n,m,tot,lx,i:longint; sum:..maxn] of longint; rt:..maxn] of longint; time,l,r:..ma ...