1. 背景

  工作中使用MapReduce任务导出一批含有路径的文件,共计行数300W+,需要检测文件是否在对应的服务器中存在,而文件所在的服务器并非hadoop集群的服务器,因此打算采用bash脚本进行。具体的方法如下(可直接看方法2,方法1效率较低):

  2. 采用的方法

  a. 方法1

  原本打算使用如下脚本,进行简单验证:

#!/bin/bash
count=
cat oriTest.txt | while read data
do
count=$(( $count+ ))
echo $count
dir=`echo "$data" | awk -F "\t" '{print $5}'`
if [ -e $dir ];then
echo "$data" >> exist.txt
else
echo "$data" >> noexist.txt
fi
done

  原始数据格式如下:

1      name  mark        id  dir

  运行时发现处理5000行需要将近4、5分钟的时间(机器为8核),果断不行啊,随后打算采用多进程的方法来执行,见方法2

  b. 方法2

  主要是通过将大文件分为小文件,然后对小文件进行后台遍历读取,脚本如下:

#!/bin/bash

source ~/.bashrc

# 判断路径是否存在
readdata(){
cat $ | while read data
do
dir=`echo "$data" | awk -F "\t" '{print $5}'`
if [ -e $dir ];then
echo "$data" >> "exist_$1.txt"
else
echo "$data" >> "noexist_$1.txt"
fi
done
} # 大文件切分为小文件,生成文件名为xaa,axb等(可以自己命名文件)
split -l oriTest.txt declare -a files # 声明数组
files=($(ls x*)) # 分割后的小文件名保存数组 # 遍历,并后台执行
for i in ${files[@]};do
echo $i
readdata $i &
done

  执行效率因机器性能不同而不同,使用8核的机器执行300W的数据需要十几分钟完成

Linux大文件快速处理小方法的更多相关文章

  1. linux打开文件数量的查看方法

    linux打开文件数量的查看方法 linux打开文件数量的查看方法在网上查到两种查看linux打开文件数量的查看方法,但结果不相同,linux查看文件打开数量是以那个文件或命令为标准呢? 搜索过关于u ...

  2. Linux大文件分割splite

    /********************************************************************** * Linux大文件分割splite * 说明: * 编 ...

  3. Linux的文件的打包(tar方法)

    Linux的文件的打包(tar方法) tar -c: 建立压缩档案 -x:解压 -t:查看内容 -r:向压缩归档文件末尾追加文件 -u:更新原压缩包中的文件 这五个是独立的命令,压缩解压都要用到其中一 ...

  4. linux查看文件的编码格式的方法 set fileencoding PYTHON

    linux查看文件的编码格式的方法 set fileencoding   乱码原因:因为你的文件声明为utf-8,并且也应该是用utf-8的编码保存的源文件.但是windows的本地默认编码是cp93 ...

  5. Linux大文件分割split和合并cat使用方法

    本文主要介绍linux下两个命令:split和cat.其中,相信大家都熟悉cat命令,一般用来查看一个文件的内容,但是它还其它的功能,比如这里要介绍的文件合并功能,它可把多个文件内容合并到一个文件中. ...

  6. PHP读取大文件的几种方法介绍

    读取大文件一直是一个头痛的问题,我们像使用php开发读取小文件可以直接使用各种函数实现,但一到大文章就会发现常用的方法是无法正常使用或时间太长太卡了,下面我们就一起来看看关于php读取大文件问题解决办 ...

  7. 实战|Linux大文件切割

    一个执着于技术的公众号 日常工作中需要对日志文件进行分析,当日志文件过大时,Linux中使用vim.cat.grep.awk等这些工具对大文件日志进行分析将会成为梦魇,具体表现在: 执行速度缓慢,文件 ...

  8. Linux大文件已删除,但df查看已使用的空间并未减少解决

    在我的生活当中遇到磁盘快满了,这时候准备去删除一些大文件 于是我使用ncdu 查看了一下当前系统占用资源比较多的是那些文件,结果一看是elasticsearch的日志文件,好吧,竟然找到源头了,那就把 ...

  9. linux大文件读取

    在生产环境中有时候可能会遇到大文件的读取问题,但是大文件读取如果按照一般的手法.如cat这种都是对io的一个挑战,如果io扛得住还好,如果扛不住 造成的后果,如服务器内存奔溃,日志损坏 方法一: se ...

随机推荐

  1. SharpCompress压缩和解压缩,并解决压缩的中文乱码问题

    一.下载SharpCompress库 二.解压缩 (1)不带密码 /// <summary> /// 解压缩(支持rar,zip) /// </summary> /// < ...

  2. JavaScript CheckBox实现全选和部分选择

    <html> <head> <script> function BatchAddToBasket() { var questionNums = ''; var ch ...

  3. Sql Server中常用的6个自定义函数分享

    转自:http://www.jb51.net/article/56691.htm IF OBJECT_ID('DBO.DISTINCT_STR') IS NOT NULL DROP FUNCTION ...

  4. delay JS延迟执行

    window.onscroll = function () {    throttle(trrigerAdd,window);};function trrigerAdd(){    var $dHei ...

  5. UncategorizedSQLException Mybatis中jdbcType的作用

    使用MyBatis框架做更新操作时,在该字段需要更新的内容为空时,就会出现1111错误,也就是无效的列类型,这个时候你就要使用jdbcType.至于什么时候要使用到javaType我还没遇到过,而且我 ...

  6. 【转】C#中HttpWebRequest的GetRequestStream执行的效率太低,甚至偶尔死掉

    http://www.cnblogs.com/summer_adai/archive/2013/04/26/3045261.html

  7. 牛客寒假算法基础集训营4 I Applese 的回文串

    链接:https://ac.nowcoder.com/acm/contest/330/I来源:牛客网 自从 Applese 学会了字符串之后,精通各种字符串算法,比如……判断一个字符串是不是回文串. ...

  8. List<T>中 GetRange (int index, int count)的使用

    GetRange:在源 List<T> 中创建元素范围的浅表复制. ; ) { List<T> uplist = new List<T>(); u++; <= ...

  9. maven 打包 包含xml

    <build> <finalName>dc-exam</finalName> <!-- 包含xml文件 --> <resources> &l ...

  10. maven 中 指定jdk 和 编译编码,仓库位置

    <!-- 配置编译选项 --> <profile> <id>jdk1.8</id> <activation> <activeByDef ...