前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >你有一个好的归档习惯吗?

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

作者头像
我是攻城师
发布2018-05-11 17:23:17
8810
发布2018-05-11 17:23:17
举报
文章被收录于专栏:我是攻城师

备忘和扯一扯最近散仙在工作用到的几个不错的小技术点: (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! 有了这个思路,你就可以自己使用自己擅长的语言的写一个类似这样的程序,技术上,没啥难度,注意下不同的年份中月的天数可能不一样的问题即可。 如果你不会写程序,没关系,自己手动创建目录,也没多困难嘛,以后就可以把排列满满的桌面的文件,定时归档起来了。 脚本源码如下:

Shell代码

代码语言:javascript
复制
#获取当前的年份   
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 这样的日期,转换成毫秒

Java代码

  1. s2=`date -d "$end" '+%s'`

(3)将一个毫秒数转换成日期

Java代码

  1. time=`date -d @$timestamp '+%Y-%m-%d %H:%M:%S'`

(4)C风格版的shell的for循环

Java代码

代码语言:javascript
复制
for (( i=0; i<=10; i++ ))  
do 
 
echo $i  
 
done  

(5)计算日期差,可以传入小时,天,月等

Java代码

  1. before=`date '+%Y/%m/%d/%H' -d '-24 hour' `

(6)去掉01,02,类似数字的0,还原成可计算的数字

Java代码

  1. brb=`echo $brb | sed 's/^0/''/' `

(7)给单位数字补位,1,2,3,4,5,改成01,02,03,04,05类似

Java代码

  1. ss=`echo $ss | sed 's/^[0-9]$/0&/'`

(8)使用seq命令,生成带0序列数字:

Java代码

  1. [search@dnode1 checklist]$ seq -w 12
  2. 01
  3. 02
  4. 03
  5. 04
  6. 05
  7. 06
  8. 07
  9. 08
  10. 09
  11. 10
  12. 11
  13. 12
  14. [search@dnode1 checklist]$

(9)使用seq命令,生成范围区间

Java代码

  1. [search@dnode1 checklist]$ seq -w 12
  2. 01
  3. 02
  4. 03
  5. 04
  6. 05
  7. 06
  8. 07
  9. 08
  10. 09
  11. 10
  12. 11
  13. 12
  14. [search@dnode1 checklist]$

(10)linux下,查看日历

Java代码

代码语言:javascript
复制
[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]$   
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2015-02-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 我是攻城师 微信公众号,前往查看

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
大数据
全栈大数据产品,面向海量数据场景,帮助您 “智理无数,心中有数”!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档