需求:导出一个月数据提供测试分析

实施:

直接hive -e “xxxxx”> testdata.txt

然后看输出信息,map%1 %2 %3...... %100,但是reduce一直是0%,等啊等,等了十几个小时,还是0%,最后杀掉进程,再试了几次,现象一样,可知每次等十几个小时,一转眼,两天了。

于是怀疑集群有问题,排查了好久,没发现问题。

又怀疑where条件有问题,折腾了半天还是一样。

后来加上了limit先看看有没有结果,有的话就证明语法没错;果然limit 10很快就出来了10条记录,语法正确。

又接着换了spark去提取,总是报buffer不足,加到原来10倍,还提示不足。

难道数据这么大?

准备count一下,等等等,一个月总共2亿8千万多条,mygod!!!我错了

于是先用hive导出一天的数据,等等等,重定性写文件就写了20分钟,我心想这得有多少啊,等写完了用wc -l  一看,800多万条,文件大小4G,哦哦哦,顿时明白了,不是集群问题,是因为数据太多reduce执行很慢。

最后,估算了每条约是600B,然后每天取1000条,连续取7天,最后文件大小约4MB

命令如下:

hive -e "set hive.cli.print.header=true;use dw;select * from aem where day ='2015-08-24' limit 1000" > aem_pg_8_24_30.txt

hive -e "use dw;select * from aem where day ='2015-08-25' limit 1000" >> aem_pg_8_24_30.txt

hive -e "use dw;select * from aem where day ='2015-08-26' limit 1000" >> aem_pg_8_24_30.txt

hive -e "use dw;select * from aem where day ='2015-08-27' limit 1000" >> aem_pg_8_24_30.txt

hive -e "use dw;select * from aem where day ='2015-08-28' limit 1000" >> aem_pg_8_24_30.txt

hive -e "use dw;select * from aem where day ='2015-08-29' limit 1000" >> aem_pg_8_24_30.txt

hive -e "use dw;select * from aem where day ='2015-08-30' limit 1000" >> aem_pg_8_24_30.txt


收获:

大数据处理的思路要稍微不同。首先估算数据量,这个很重要;然后确定导出方式,太大的话缩小颗粒度,多次导出。

思路很重要!思路很重要!思路很重要!