前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >大数据场景下,如何快速将Linux 大文件处理小

大数据场景下,如何快速将Linux 大文件处理小

作者头像
用户6543014
发布于 2020-10-09 02:11:20
发布于 2020-10-09 02:11:20
76400
代码可运行
举报
文章被收录于专栏:CU技术社区CU技术社区
运行总次数:0
代码可运行
来源:twt社区 整理:大数据肌肉猿

1.背景

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

2. 采用的方法

a. 方法1

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
!/bin/bash
count=0
cat oriTest.txt | while read data
do
count=$(( $count+1 ))
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

原始数据格式如下:

name mark id dir

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

b. 方法2

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
!/bin/bash
source ~/.bashrc

判断路径是否存在

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
readdata(){
cat $1 | 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 10000 oriTest.txt

declare -a files # 声明数组

files=($(ls x*)) # 分割后的小文件名保存数组

遍历,并后台执行

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
for i in ${files[@]};do
echo $i
readdata $i &
done
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-09-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 SACC开源架构 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Linux运维常用shell脚本之文件和字符串管理实例
编写shell脚本,将/usr/local/test目录下大于100k的文件转移到/tmp目录下:
菲宇
2022/12/02
5770
Linux 【Shell脚本经典案例】
===============Talk is cheap, show me the code,bye-bye================
IT茂茂
2020/09/17
3.4K0
Linux 【Shell脚本经典案例】
Node 转录组数据库批量下载指南
随着转录组研究的深入,研究人员需要从转录组数据库中获取大量的 RNA 测序数据以支持基因表达、选择性剪接等分析。除了我们常用的 GEO(基因表达总库)和 ArrayExpress 数据库,还有一些数据库可以获得 RNA 测序数据比如 Node 转录组数据库 (National Omics Data Encyclopedia, 国家组学数据百科全书:多组学大数据共享平台,Node 数据库)。在本文中,我们将详细介绍 Node 转录组数据库的特点及其批量下载方法,帮助您高效获取所需数据。
叶子Tenney
2025/03/24
2380
Node 转录组数据库批量下载指南
101个shell脚本
emm。。这个脚本是因为tomcat没有自带的能够给service开机启动的脚本,我就琢磨着自己写了一个简单的启动脚本,如下:
端碗吹水
2020/09/23
1.4K0
101个shell脚本
Shell编程学习笔记
常用命令介绍 历史命令(History) history:查看历史命令,默认1k条 !!:上一条命令 !$:获取上一条命令的最后一个参数 !+数字:运行第几条历史命令 !+字符串:从历史命令最近一条开始匹配,以该字符串开头的命令 别名(alias) 列出所有的别名设置:alias 设置别名:alias a=’b’ 取消别名设置:unalias a 重定向 重定向符号 重定向,覆盖原来的内容:> 重定向,追加到原来的内容:>> 反向重定向,目标是一个程序:< 错误重定向,覆盖原来的内容:2> 错误重定向,追
skyyws
2022/05/20
5680
100 个 Linux Shell 脚本经典案例解析
1)编写 hello world 脚本#!/bin/bash# 编写hello world脚本echo "Hello World!"2)通过位置变量创建 Linux 系统账户及密码#!/bin/bash# 通过位置变量创建 Linux 系统账户及密码#$1 是执行脚本的第一个参数,$2 是执行脚本的第二个参数useradd    "$1" echo "$2"  |  passwd  ‐‐stdin  "$1"3)备份日志#!/bin/bash# 每周 5 使用 tar 命令备份/var/log 下的所有日志
星哥玩云
2022/07/09
3.6K0
大数据开发工程师基本功修炼之Linux学习笔记(三)
uniq 命令用于检查及删除文本文件中重复出现的行,一般与 sort 命令结合使用。
Maynor
2021/12/07
4930
Linux/Unix shell 脚本清除归档日志文件
      对于DEV以及UAT环境,有些时候,数据库需要处于归档模式,但并不需要备份数据库。因此,archive归档日志不停的增长导致磁盘空间被大量耗用。对于这种情形,可以使用一个shell脚本来定时自动清除这些归档日志。本文给出了清除归档日志的脚本。
Leshami
2018/08/14
1.3K0
超牛逼!100 个开箱即用的 Shell 脚本,拿好了~
shell脚本是帮助程序员和系统管理员完成费时费力的枯燥工作的利器,是与计算机交互并管理文件和系统操作的有效方式。区区几行代码,就可以让计算机接近按照你的意图行事。
民工哥
2021/05/11
1.6K0
Linux-MySQL数据备份和定时清理
最近接了个新需求,需要将我们经常使用的几个数据库,MySQL、influxdb在Linux系统上实现定时自动备份,比如每天备份一次,间隔31天清理31天之前备份的数据,研究了一下,准备先从MySQL实现。
框架师
2021/08/05
2.1K0
Linux 常用命令(五)
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
小徐
2018/09/21
2K0
Linux 常用命令(五)
Linux运维基础技能: 脚本编程与Linux命令
本系列文章一共三篇,分别为《脚本编程与 Linux 命令》、《接入层与网络基础》和《 MySQL 与 SQL 优化》,由腾讯高级工程师 luaruan(阮永顺) 原创、张戈博客整理分享,如有勘误请在博客留言。
张戈
2018/11/29
3K0
Linux运维基础技能: 脚本编程与Linux命令
实用Shell脚本
假设服务器为lnmp环境,近期访问经常出现502现象,且502错误在重启php-fpm服务后消失,因此编写监控脚本,一旦出现502,则自动重启php-
花落花相惜
2021/11/26
1.3K0
用 shell 脚本做命令行工具扩展
公司开发机与远程服务器之间有严格的隔离策略,不能直接使用 ssh 登录,而必需通过跳板机。这样一来,本地与服务器之间的一些文件传输变得非常不便。经过咨询,运维教了我一招:
海海
2022/08/31
1.3K0
用 shell 脚本做命令行工具扩展
Linux运维面试收藏
mount.cifs //IP地址/server /mnt/server -o user=administrator,password=123456 linux 下的server需要自己手动建一个 后面的user与pass 是windows主机的账号和密码 注意空格 和逗号。
菲宇
2019/06/13
1.1K0
linux工作中常用文件操作命令
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/haluoluo211/article/details/77714264
bear_fish
2018/09/14
1.2K0
linux工作中常用文件操作命令
大数据开发工程师基本功修炼之史上最全Linux学习笔记(建议收藏)
Linux是大数据中的基础,无论是运维或开发,都免不了要学,而且学的越扎实越好,下面为大家带来Linux学习笔记
Maynor
2021/06/29
1.7K0
一线工作高频率使用的shell脚本汇总
哈喽大家好!我是波哥! ---- 1、检测两台服务器指定目录下的文件一致性 #!/bin/bash ###################################### 检测两台服务器指定目录下的文件一致性 ##################################### #通过对比两台服务器上文件的md5值,达到检测一致性的目的 dir=/data/web b_ip=192.168.88.10 #将指定目录下的文件全部遍历出来并作为md5sum命令的参数,进而得到所有文件的md5值,并写
IT运维技术圈
2022/06/27
3380
Shell编程100例,超赞!
7、检测本机当前用户是否为超级管理员,如果是管理员,则使用 yum 安装 vsftpd,如果不是,则提示您非管理员(使用字串对比版本)
C语言中文社区
2022/05/31
3.7K0
日常shell练习题-03(持续更新…)
打印乘法口诀 #! /bin/bash ##printing 9*9 list ##written by zhdya_20171004 for m in `seq 1 9` do for n in `seq 1 $m` do dd=$[$m*$n] echo -ne "$n x $m = $dd \t" done echo done 写脚本,用来实现交换两个文件或目录的名字。 #! /bin/bash ##change the file or dir's name. ##writ
老七Linux
2018/05/31
1.1K0
相关推荐
Linux运维常用shell脚本之文件和字符串管理实例
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验