`
qindongliang1922
  • 浏览: 2187846 次
  • 性别: Icon_minigender_1
  • 来自: 北京
博客专栏
7265517b-f87e-3137-b62c-5c6e30e26109
证道Lucene4
浏览量:117629
097be4a0-491e-39c0-89ff-3456fadf8262
证道Hadoop
浏览量:126029
41c37529-f6d8-32e4-8563-3b42b2712a50
证道shell编程
浏览量:59984
43832365-bc15-3f5d-b3cd-c9161722a70c
ELK修真
浏览量:71371
社区版块
存档分类
最新评论

你有一个好的归档习惯吗?

阅读更多
备忘和扯一扯最近散仙在工作用到的几个不错的小技术点:

(1)使用shell写了一个根据年份能生成此年份下归档文件目录,精确到年-月-日-小时
谈谈本意:
由于散仙最近是在搞我们平台的搜索日志分析的工作,日志记录的数据是存在我们的Hadoop集群的HDFS上,日志记录的形式,自然也是按照年月日小时这样一个目录存储的,至于为啥这么设计,通过时间维度来准确归档:

好处: 这样在分析数据时,便能任意指定时间范围来分析,最细精确到小时上,最大可按年统计,所以,例如最近1小时,3小时,最近7天,最近一个月,三个月,1年等等时间维度都可以统计,非常灵活。

坏处: 即使在使用了Snappy压缩后,存储使用Flume收集过来的小文件仍然比较多,每个小时下的数据有好多1M,3M,50M类似这样的snappy压缩包,在HDFS上存储过多的小文件会导致NameNode的元数据映射信息倍增,这会占掉更多的内存,所以这样存储,从长久来看,并不是一个好的规划。
是否可以解决?

以散仙来看,解决办法其实也不太难
(1)在Flume写入HDFS的过程中,可以把flume汇总收集的缓冲时间给延长一点,或者把写入大小的阈值给调大,理想情况下,一个小时的数据,最好只压缩成一个大的文件包。
(2)写一个定时合并小文件的程序来把每个小时下的数据合并成一个大的文件,当然这种做法,相当于补救措施了,尽量使用第一种方法,在写入时就解决this problem。

好了,扯的有点多了,下面说正经的,写这个shell的目的,是为了模拟线上的hadoop存储日志的目录结构,便于在测试的hadoop集群上进行各种仿真测试和折腾,因为直接从线上的hadoop导一份完整的数据比较费时,所以就在使用这个脚本在linux上,创建一份,写入一点测试数据,然后上传到HDFS上,就可以进行各种时间的维度的统计测试了。


最后还有一个不错的想法分享给眼前的各位帅哥,美女们,养成归档的好习惯,从现在做起,如果你还在为找以前的某个txt文件,某个excel文件,某个hadoop源码包,某个岛国的avi影片,或某个照片,某个简历等等等等找不到而发愁的时候,是否有种冲动的想法,
“老娘以后再也不乱放东西了,总是害得用的时候找不到了! ”。

那就来吧,这个脚本对你很适合,你只需要稍稍微创新一下,就能改造的非常个性化,比如你在年,月,日,小时目录下,新建了分类很细的目录,对各种常用的文件归档,根据文件后缀名,都建立一个文件夹,在各个文件夹下你还可以继续分类,总之,只有你想不到的,没有做不到的,再到用的时候,你只需要记得你要找的东西后缀名,然后根据大概时间,就能很快find it!

有了这个思路,你就可以自己使用自己擅长的语言的写一个类似这样的程序,技术上,没啥难度,注意下不同的年份中月的天数可能不一样的问题即可。

如果你不会写程序,没关系,自己手动创建目录,也没多困难嘛,以后就可以把排列满满的桌面的文件,定时归档起来了。

脚本源码如下:

#获取当前的年份 
y=$1
#year=`date +%Y`
#获取当前的月份
#month=`date +%m`


for m in `seq -w 12`

do

#创建月的文件夹
mkdir -p  $y/$m


#得到每月的最后一天
lastday=`cal $m  $y | egrep "28|29|30|31" | tail -1 | awk '{print $NF}'`

for d in `seq -w 01 $lastday `

do
#创建日的文件夹
mkdir -p $y/$m/$d/

for h in `seq -w 00 23`
do


#创建小时的文件夹
mkdir -p  $y/$m/$d/$h

echo "$y年$m月$d日$h小时里的造的数据"  >> $y/$m/$d/$h/$y-$m-$d-$h.txt



done

done

#echo $m

done


echo "创建完毕!"




最后,在备忘几个shell小知识

(2)将类似2015-01-02 12:33:33 这样的日期,转换成毫秒
s2=`date -d "$end"  '+%s'`


(3)将一个毫秒数转换成日期
time=`date -d @$timestamp '+%Y-%m-%d %H:%M:%S'`


(4)C风格版的shell的for循环
for (( i=0; i<=10; i++ ))
do

echo $i

done

(5)计算日期差,可以传入小时,天,月等
before=`date '+%Y/%m/%d/%H' -d  '-24 hour' `


(6)去掉01,02,类似数字的0,还原成可计算的数字
brb=`echo  $brb | sed 's/^0/''/' `


(7)给单位数字补位,1,2,3,4,5,改成01,02,03,04,05类似
ss=`echo $ss  | sed 's/^[0-9]$/0&/'`


(8)使用seq命令,生成带0序列数字:
[search@dnode1 checklist]$ seq -w 12
01
02
03
04
05
06
07
08
09
10
11
12
[search@dnode1 checklist]$ 

(9)使用seq命令,生成范围区间
[search@dnode1 checklist]$ seq -w 12
01
02
03
04
05
06
07
08
09
10
11
12
[search@dnode1 checklist]$ 

(10)linux下,查看日历
[search@dnode1 checklist]$ cal 2015
                               2015                               

       January               February                 March       
Su Mo Tu We Th Fr Sa   Su Mo Tu We Th Fr Sa   Su Mo Tu We Th Fr Sa
             1  2  3    1  2  3  4  5  6  7    1  2  3  4  5  6  7
 4  5  6  7  8  9 10    8  9 10 11 12 13 14    8  9 10 11 12 13 14
11 12 13 14 15 16 17   15 16 17 18 19 20 21   15 16 17 18 19 20 21
18 19 20 21 22 23 24   22 23 24 25 26 27 28   22 23 24 25 26 27 28
25 26 27 28 29 30 31                          29 30 31

        April                   May                   June        
Su Mo Tu We Th Fr Sa   Su Mo Tu We Th Fr Sa   Su Mo Tu We Th Fr Sa
          1  2  3  4                   1  2       1  2  3  4  5  6
 5  6  7  8  9 10 11    3  4  5  6  7  8  9    7  8  9 10 11 12 13
12 13 14 15 16 17 18   10 11 12 13 14 15 16   14 15 16 17 18 19 20
19 20 21 22 23 24 25   17 18 19 20 21 22 23   21 22 23 24 25 26 27
26 27 28 29 30         24 25 26 27 28 29 30   28 29 30
                       31
        July                  August                September     
Su Mo Tu We Th Fr Sa   Su Mo Tu We Th Fr Sa   Su Mo Tu We Th Fr Sa
          1  2  3  4                      1          1  2  3  4  5
 5  6  7  8  9 10 11    2  3  4  5  6  7  8    6  7  8  9 10 11 12
12 13 14 15 16 17 18    9 10 11 12 13 14 15   13 14 15 16 17 18 19
19 20 21 22 23 24 25   16 17 18 19 20 21 22   20 21 22 23 24 25 26
26 27 28 29 30 31      23 24 25 26 27 28 29   27 28 29 30
                       30 31
       October               November               December      
Su Mo Tu We Th Fr Sa   Su Mo Tu We Th Fr Sa   Su Mo Tu We Th Fr Sa
             1  2  3    1  2  3  4  5  6  7          1  2  3  4  5
 4  5  6  7  8  9 10    8  9 10 11 12 13 14    6  7  8  9 10 11 12
11 12 13 14 15 16 17   15 16 17 18 19 20 21   13 14 15 16 17 18 19
18 19 20 21 22 23 24   22 23 24 25 26 27 28   20 21 22 23 24 25 26
25 26 27 28 29 30 31   29 30                  27 28 29 30 31


[search@dnode1 checklist]$ 




想了解更多有关电商互联网公司的搜索技术和大数据技术的使用,请欢迎扫码关注微信公众号:我是攻城师(woshigcs)
本公众号的内容是有关搜索和大数据技术和互联网等方面内容的分享,也是一个温馨的技术互动交流的小家园,有什么问题随时都可以留言,欢迎大家来访!







1
0
分享到:
评论

相关推荐

    为何数据库归档日志名称为空

    然而,有时用户可能会遇到一个奇怪的现象:查询V$ARCHIVED_LOG视图时,发现归档日志的文件名称为空。这可能是由于多种原因造成的,尤其是在使用ASM(Automatic Storage Management)作为存储解决方案的Oracle RAC...

    照片的归档重命名处理程序源码

    标题中的“照片的归档重命名处理程序源码”指的是一个专门用于管理和整理照片的软件应用,其核心功能包括照片的归档和批量重命名。这个程序能够帮助用户按照特定的规则有效地组织他们的照片库,使得查找和管理照片变...

    喜马拉雅FM文件命名归纳.zip_feathersify_plainvoq_命名归档_喜马拉雅FM_喜马拉雅命名

    另一方面,"plainvoq"可能是一个命令行工具或者插件,专门用于处理音频文件的元数据,如提取音频标题、主播姓名等信息,以便于生成有意义的新文件名。 "命名归档"这一标签表明这个过程不仅涉及简单的重命名,还涉及...

    使用UNIX的20个习惯

    为此,可以使用逻辑运算符如`&&`(表示前一个命令成功后才执行后一个命令)和`||`(表示前一个命令失败时才执行后一个命令)。例如: ```bash cd /path/to/directory && echo "Success" || echo "Failed" ``` ...

    embed-report:一个 Jenkins CI 插件,用于将归档的工件直接嵌入到作业和或构建的顶级状态页面中

    嵌入报告插件是Jenkins持续集成系统中的一个扩展工具,专为提升构建报告的可视化效果而设计。它允许用户将各种类型的归档工件,如测试报告、日志文件或者图表,直接在作业的顶级状态页面上进行展示,提供了一种直观...

    良好的电脑应用习惯完整版.pdf

    养成定期整理和归档的习惯,创建有组织的文件夹结构,以便快速定位所需文件。 - 建立文件命名和分类规则,使文件查找更容易。例如,按照日期、项目名称或文件类型进行命名和分组。 - 定期备份重要文件,以防止意外...

    信息化背景下文书档案在线归档的初步探索.docx

    ### 信息化背景下文书档案在线归档的初步探索 #### 一、文书档案管理信息化的基本概念 文书档案作为记录社会发展历程的重要载体,对于单位的历史沿革、决策过程等有着不可或缺的作用。随着信息技术的进步,传统的...

    防止崩溃的措施

    例如,如果你有一个包含3个元素的数组,并试图访问第4个元素,就会发生越界。为避免这种情况,开发者应该始终在访问数组元素之前检查索引的有效性。此外,可以使用Swift的安全访问语法(如`array[safe: index]`)或...

    洛阳契约文书博物馆归档分单文书数据集(1408-1949).rar

    总的来说,“洛阳契约文书博物馆归档分单文书数据集”是一个综合性的历史资料库,其内容丰富多样,对于研究中国古代社会经济与法律文化具有极高的价值。通过深入挖掘和分析这些数据,我们可以更全面地认识那个时代的...

    洛阳契约文书博物馆归档魏醇、魏庭璋科举试卷数据集.rar

    它提供了一个公平竞争的平台,让更多的平民有机会通过自己的学识和努力改变命运,进而促进了社会的流动性和文化的发展。在长达一千多年的运行中,科举制度逐步形成了较为成熟的考试体系,不仅考察考生的文化知识,也...

    前归档

    "前归档"在IT行业中通常指的是在进行某种操作(如发布、备份或迁移)之前,将数据或项目整理并...在实际工作中,良好的代码管理和归档习惯能帮助开发者更好地协同工作,快速定位和修复问题,以及保护宝贵的代码资产。

    归档的内容

    例如,一个有效的归档系统应具备以下特点: 1. **分类明确**:根据文件的类型、项目、日期或其他相关标准进行分类,便于查找和管理。 2. **命名规范**:文件命名要清晰明了,避免使用模糊的缩写或无意义的数字,...

    中文3dMax一键找回贴图插件

    Collect Asset的归档功能可以打包整个项目,包括场景文件、贴图和其他依赖项,形成一个完整的档案。这样,即使在不同的电脑上打开,也能确保项目正常运行,避免因资源丢失导致的问题。 安装Collect Asset插件非常...

    档案管理系统JSP源码

    一个好的档案管理系统应设计为模块化,方便添加新功能或进行维护。使用标准的开发规范和良好的编程习惯有助于系统的长期稳定运行。 通过以上这些技术点的综合应用,我们可以构建出一个功能齐全、易于维护的档案...

    zhoujiameng_20221215.tar.gz

    以“zhoujiameng_20221215.tar.gz”为例,这代表了一个由周嘉孟在2022年12月15日创建或整理的压缩文件,它采用的是Linux/Unix系统中常见的归档格式——tar,以及gzip的压缩算法。这个文件名遵循了一种常见的命名规范...

    java 多个小文件合成一个文件

    在Java编程语言中,将多个小文件合并成一个文件是一个常见的需求,特别是在处理大量数据或者进行文件归档时。这个过程通常称为文件拼接或文件合并。以下将详细讲解如何使用Java来实现这一功能。 首先,我们需要理解...

    meteor-todo:一个易于使用但高度可扩展的待办事项清单,支持#tags,@ people,到期日和归档

    一个易于使用但高度可扩展的待办事项列表,支持#tags , @people ,截止日期和归档。 触摸和移动友好。 现在有了API! 此待办事项列表当前不支持协作或多用户。 这是一个故意的设计决定,因为我从来不希望别人看到...

    phpdesktop-chrome-130.1-php-8.3

    所有这些都被整合到一个单一的应用程序中,即一个便携式文件夹,您可以通过将其打包为 ZIP 归档文件或为您的应用程序制作安装程序来轻松分发给最终用户。嵌入的 Web 服务器是 Mongoose 的一个定制版本,该 Web ...

    takeout-20221120T123441Z-001.zip

    【标题】"takeout-20221120T123441Z-001.zip" 是一个归档文件,通常用于存储多个文件或文件夹以便于传输或备份。这个文件名中的 "takeout" 可能指的是 Google Takeout 服务,这是一个让用户导出其在 Google 各项服务...

Global site tag (gtag.js) - Google Analytics