Linux运维实战|大文件切割

介绍

日常工作中需要对日志文件进行分析,当日志文件过大时,Linux中使用vim、cat、vim、grep、awk等这些工具对大文件日志进行分析将会成为梦魇,具体表现在:

  • 执行速度缓慢,文件内容需要加载到内存中,涉及大量的磁盘读;
  • 耗费资源过多,一个4G空间的日志文件需要至少4G的内存,更大的呢?
  • 内容难以复用,分析过滤文件时会用管道对输出文件进行处理,大文件下难以复用;
  • 文件传输困难,大文件需要传输给其他人进行分析,文件太大,全量传输带宽耗费大。

1、查阅大文件之痛

大数据离线处理框架hadoop可以处理这些场景,然而hadoop也需要耗费较长的时间进行计算,而且还需要去编写MapReduce任务,诚然这种方法带来更大的难度和挑战。hadoop中是通过将大文件切割成多个小文件,通过多个mapreduce任务做并行处理,Linux提供了一个简单易用的split工具,可以实现将文件切割成多个小文件。

split提供两种方式对文件进行切割:

  • 根据行数切割,通过-l参数指定需要切割的行数
  • 根据大小切割,通过-b参数指定需要切割的大小

2.1 根据行数切割

如下以一个3.4G大小的日志文件做切割演示,每一个文件按照50000行做切割,指定文件名为split-line,-d参数以数字的方式显示

#源文件大小
# ls -l 2020011702-www.happylauliu.cn.gz -h
-rw-r--r-- 1 root root 3.4G 1月  17 09:42 2020011702-www.happylauliu.cn.gz

#按行切割,50000行为一个文件
# split -l 50000 -d --verbose 2020011702-www.happylauliu.cn.gz split-line
正在创建文件"split-line00"
正在创建文件"split-line01"

#查看切割文件行数确认
# wc -l split-line00
50000 split-line00

#wc -l split-line01
50000 split-line01

#wc -l split-line9170
50000 split-line9170

# wc -l split-line9171
1020 split-line9171

#查看文件大小
# ls -lh split-line0[0-9]
-rw-r--r-- 1 root root 14M 1月  17 16:54 split-line00
-rw-r--r-- 1 root root 14M 1月  17 16:54 split-line01

-rw-r--r-- 1 root root 14M 1月  17 16:54 split-line09

指定行数后会自动做切割,即达到5000行之后自动切割,通过-d参数文件名会自动以数字的

2.2 根据大小切割

按照500M为一个文件,切割。
# split -b 500M -d --verbose 2020011702-www.happylauliu.cn.gz split-size
正在创建文件"split-size00"
正在创建文件"split-size01

# ls -lh split-size0*
-rw-r--r-- 1 root root 500M 1月  17 17:03 split-size00
-rw-r--r-- 1 root root 500M 1月  17 17:03 split-size01

2.3 多文件合并

split是用户将大文件切割为多个小文件,如果需要将多个小文件合并为一个文件怎么处理呢?可以使用文件重定向方式实现,如下演示两个小文件合并为一个文件

# cat split-size01 split-size02 >two-file-merge

# ls -lh two-file-merge
-rw-r--r-- 1 root root 1000M 1月  17 17:20 two-file-merge

合并方式通过读取文件的方式+输出重定向,对于大文件一样会存在性能的问题,建议根据需要使用。

参考链接 :

Linux运维实战|大文件切割 :https://mp.weixin.qq.com/s/33QKfPJTC3K5LR3s4jB58g

发布了314 篇原创文章 · 获赞 57 · 访问量 9万+

猜你喜欢

转载自blog.csdn.net/qq_40907977/article/details/104365916