`
weitao1026
  • 浏览: 1056125 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论
阅读更多

小技术点:

(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代码 复制代码 收藏代码
  1. #获取当前的年份   
  2. y=$1  
  3. #year=`date +%Y`  
  4. #获取当前的月份  
  5. #month=`date +%m`  
  6.   
  7.   
  8. for m in `seq -w 12`  
  9.   
  10. do  
  11.   
  12. #创建月的文件夹  
  13. mkdir -p  $y/$m  
  14.   
  15.   
  16. #得到每月的最后一天  
  17. lastday=`cal $m  $y | egrep "28|29|30|31" | tail -1 | awk '{print $NF}'`  
  18.   
  19. for d in `seq -w 01 $lastday `  
  20.   
  21. do  
  22. #创建日的文件夹  
  23. mkdir -p $y/$m/$d/  
  24.   
  25. for h in `seq -w 00 23`  
  26. do  
  27.   
  28.   
  29. #创建小时的文件夹  
  30. mkdir -p  $y/$m/$d/$h  
  31.   
  32. echo "$y年$m月$d日$h小时里的造的数据"  >> $y/$m/$d/$h/$y-$m-$d-$h.txt  
  33.   
  34.   
  35.   
  36. done  
  37.   
  38. done  
  39.   
  40. #echo $m  
  41.   
  42. done  
  43.   
  44.   
  45. echo "创建完毕!"  
#获取当前的年份 
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'`  
s2=`date -d "$end"  '+%s'`



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

Java代码 复制代码 收藏代码
  1. time=`date -d @$timestamp '+%Y-%m-%d %H:%M:%S'`  
time=`date -d @$timestamp '+%Y-%m-%d %H:%M:%S'`



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

Java代码 复制代码 收藏代码
  1. for (( i=0; i<=10; i++ ))  
  2. do  
  3.   
  4. echo $i  
  5.   
  6. done  
for (( i=0; i<=10; i++ ))
do

echo $i

done


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

Java代码 复制代码 收藏代码
  1. before=`date '+%Y/%m/%d/%H' -d  '-24 hour' `  
before=`date '+%Y/%m/%d/%H' -d  '-24 hour' `



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

Java代码 复制代码 收藏代码
  1. brb=`echo  $brb | sed 's/^0/''/' `  
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&/'`  
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]$   
[search@dnode1 checklist]$ seq -w 12
01
02
03
04
05
06
07
08
09
10
11
12
[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]$   
[search@dnode1 checklist]$ seq -w 12
01
02
03
04
05
06
07
08
09
10
11
12
[search@dnode1 checklist]$ 


(10)linux下,查看日历

Java代码 复制代码 收藏代码
  1. [search@dnode1 checklist]$ cal 2015  
  2.                                2015                                 
  3.   
  4.        January               February                 March         
  5. Su Mo Tu We Th Fr Sa   Su Mo Tu We Th Fr Sa   Su Mo Tu We Th Fr Sa  
  6.              1  2  3    1  2  3  4  5  6  7    1  2  3  4  5  6  7  
  7.  4  5  6  7  8  9 10    8  9 10 11 12 13 14    8  9 10 11 12 13 14  
  8. 11 12 13 14 15 16 17   15 16 17 18 19 20 21   15 16 17 18 19 20 21  
  9. 18 19 20 21 22 23 24   22 23 24 25 26 27 28   22 23 24 25 26 27 28  
  10. 25 26 27 28 29 30 31                          29 30 31  
  11.   
  12.         April                   May                   June          
  13. Su Mo Tu We Th Fr Sa   Su Mo Tu We Th Fr Sa   Su Mo Tu We Th Fr Sa  
  14.           1  2  3  4                   1  2       1  2  3  4  5  6  
  15.  5  6  7  8  9 10 11    3  4  5  6  7  8  9    7  8  9 10 11 12 13  
  16. 12 13 14 15 16 17 18   10 11 12 13 14 15 16   14 15 16 17 18 19 20  
  17. 19 20 21 22 23 24 25   17 18 19 20 21 22 23   21 22 23 24 25 26 27  
  18. 26 27 28 29 30         24 25 26 27 28 29 30   28 29 30  
  19.                        31  
  20.         July                  August                September       
  21. Su Mo Tu We Th Fr Sa   Su Mo Tu We Th Fr Sa   Su Mo Tu We Th Fr Sa  
  22.           1  2  3  4                      1          1  2  3  4  5  
  23.  5  6  7  8  9 10 11    2  3  4  5  6  7  8    6  7  8  9 10 11 12  
  24. 12 13 14 15 16 17 18    9 10 11 12 13 14 15   13 14 15 16 17 18 19  
  25. 19 20 21 22 23 24 25   16 17 18 19 20 21 22   20 21 22 23 24 25 26  
  26. 26 27 28 29 30 31      23 24 25 26 27 28 29   27 28 29 30  
  27.                        30 31  
  28.        October               November               December        
  29. Su Mo Tu We Th Fr Sa   Su Mo Tu We Th Fr Sa   Su Mo Tu We Th Fr Sa  
  30.              1  2  3    1  2  3  4  5  6  7          1  2  3  4  5  
  31.  4  5  6  7  8  9 10    8  9 10 11 12 13 14    6  7  8  9 10 11 12  
  32. 11 12 13 14 15 16 17   15 16 17 18 19 20 21   13 14 15 16 17 18 19  
  33. 18 19 20 21 22 23 24   22 23 24 25 26 27 28   20 21 22 23 24 25 26  
  34. 25 26 27 28 29 30 31   29 30                  27 28 29 30 31  
  35.   
  36.   
  37. [search@dnode1 checklist]$   
分享到:
评论

相关推荐

    pig官方基础教程

    通过Pig基础教程,用户将能够掌握Pig的主要概念和操作,为进一步学习Pig的高级特性和优化技术打下坚实的基础。对于希望在Hadoop上进行高效数据处理的开发者和数据分析师来说,Pig提供了一个比传统的MapReduce编程...

    pig-0.7.0.tar.gz

    6. **更丰富的社区支持**:作为开源项目,Pig 0.7.0拥有活跃的社区,这意味着用户可以获得广泛的技术支持和不断更新的文档资源。 在云计算环境中,Pig与Hadoop的结合尤其强大。Hadoop的分布式存储系统HDFS和分布式...

    pig编程指南源码

    通过源码,我们可以看到Pig如何与其他大数据技术协同工作,增强数据处理能力。 总之,"programmingpig-master"源码提供了丰富的Pig编程实例,涵盖了从基本操作到复杂场景的全面应用,对于理解Pig的工作原理和提升大...

    pig-0.9.2.tar.gz下载

    随着大数据技术的发展,Pig也在不断演进。未来可能会与Spark等新一代计算框架更好地融合,提供更快、更灵活的数据处理能力。 总结,"pig-0.9.2.tar.gz"是一个重要的数据处理工具,它通过Pig Latin语言简化了Map-...

    大数据技术基础实验报告-pig的安装配置与应用.doc

    【大数据技术基础实验报告——Pig的安装配置与应用】 Pig是Apache Hadoop项目中的一个数据处理工具,它提供了一种高级的编程语言,称为Pig Latin,用于编写复杂的数据处理作业。在这个实验报告中,我们将深入理解...

    基于Python的Peppa Pig面部关键点检测设计源码

    该项目是一款基于Python的Peppa Pig面部关键点检测...该项目利用机器学习技术,能够自动识别并精确标记Peppa Pig面部关键特征点,如眼睛、鼻子和嘴巴。其算法原理具有通用性,适用于类似卡通人物或动物的脸部检测任务。

    pig格式图片编辑工具

    此外,为了保证用户体验,该工具可能还设计了用户友好的界面,使得操作流程直观易懂,即使是对技术不太熟悉的用户也能快速上手。可能还包含批量处理功能,允许用户一次性处理多张图片,大大提高了工作效率。 总之,...

    Hadoop技术-Pig简介.pptx

    总的来说,Pig作为Hadoop技术的一部分,通过Pig Latin语言为大数据分析提供了一种高效、灵活的解决方案,尤其适用于需要进行复杂数据转换和处理的场景。通过Pig,用户可以更专注于业务逻辑,而不需要过多关注底层的...

    HADOOP 系统之hadoop pig hive 整合版

    以下是对这些技术的详细解释: **Hadoop** 是一个开源的分布式计算框架,由Apache软件基金会开发。它允许在廉价硬件上处理和存储海量数据,提供高容错性和高可靠性。Hadoop的核心组件包括Hadoop Distributed File ...

    Hadoop技术Pig简介共11页.pdf.zip

    【Hadoop技术Pig简介共11页.pdf.zip】是一个压缩文件,包含了关于Hadoop技术中的Pig组件的详细介绍。Pig是Apache Hadoop生态系统中的一个高级数据处理工具,它提供了一种高级语言(称为Pig Latin)来抽象和执行大...

    pig-0.12.0-cdh5.5.0.tar.gz

    7. **社区与文档**:Apache Pig 拥有活跃的社区,用户可以在其中获取技术支持、交流经验或参与项目开发。同时,官方文档详尽地介绍了 Pig 的使用方法、API 和最佳实践,为初学者和高级用户提供有力的指导。 总的来...

    Hadoop大数据技术-pig操作

    Pig是Hadoop生态系统中的一个高级数据处理工具,它为用户提供了名为Pig Latin的脚本语言,使得数据分析师能够方便地进行数据挖掘和分析工作,而无需深入学习MapReduce编程模型。 Pig操作主要包括以下几个方面: 1....

    大数据pig实战

    ### 大数据Pig实战知识点 #### Hadoop数据分析平台背景 在大数据分析领域,Hadoop作为一个开源的分布式存储与计算框架,拥有着广泛的应用。然而,随着数据量的日益增加,对性能的要求越来越高,传统的关系型数据库...

    Pig Programming

    它简化了大数据分析的复杂性,使得数据科学家和分析师能够更加专注于数据的价值挖掘,而不是底层的技术细节。随着数据驱动决策的趋势不断加强,Pig编程将成为企业和组织应对大数据挑战的关键工具。

    Programming Pig Dataflow Scripting with Hadoop 2nd EditionPDF

    9. **最新版本特性**:第二版通常会包含Pig的最新版本更新和改进,如新的功能、API或性能提升,使读者掌握最新的技术发展。 10. **社区与工具支持**:书中可能还会提到Pig的社区资源,如邮件列表、论坛、文档,以及...

    《pig编程指南》英文非图片电子版 Programming.Pig.pdf

    这本书不仅是Pig初学者的一本指南,同时也为有经验的数据处理开发者提供了深入的技术细节。通过阅读这本书,读者能够学习如何使用PigLatin语言来编写高效的数据处理脚本,以及如何在生产环境中部署和优化Pig应用。...

    pig权限管理系统 v3.6.6

    pig权限管理系统是一个基于 Spring Cloud Hoxton 、Spring Boot 2.3、 OAuth2 的 RBAC 权限管理系统。同时也基于数据驱动视图的理念封装 element-ui,即使没有 vue 的使用经验也能快速上手。软件功能:提供对常见...

    开源项目-esimov-pigo.zip

    开源项目-esimov-pigo.zip 是一个基于Go语言编写的面部检测库,名为Pigo,由Esimov开发。这个库的独特之处在于...通过研究Pigo,你不仅可以掌握面部检测技术,还能进一步提升在Go语言编程和计算机视觉领域的专业技能。

    log4j-pig-master_java_

    本项目“log4j-pig-master_java_”便是一个基于这两个框架的微服务RBAC权限管理系统,融入了Alibaba的技术栈,并实现了OAuth2认证授权。下面将详细探讨这些技术在项目中的应用和重要性。 1. **Spring Boot 2.4**:...

    hadoop_hbase_pig

    标题 "hadoop_hbase_pig" 暗示了这个压缩包包含与Hadoop、HBase和Pig相关的技术知识。Hadoop是一个开源框架,主要用于处理和存储大量数据,而HBase是建立在Hadoop之上的分布式列式数据库,Pig则是一个用于大数据分析...

Global site tag (gtag.js) - Google Analytics