Hive企业级应用

本文简单汇总个人长期以来,工作中使用hive所总结的一些,比较可靠的使用策略。包括数据收集、数据存储、数据计算等各个方面。

数据收集

首选当然是flume-ng,它可以将各个地方的日志实时收集并汇总至hdfs中,同时也可以添加策略来对日志进行一些格式化修饰。

建议不要通过普通的应用log文件来收集日志,因为这样做数据的完整性难以保证,日志的格式与分类也难以甄别,同时大量日志会经过无意义的磁盘R/W从而影响系统性能。

flume-ng所写入hdfs中的日志文件,可以直接用作hive表的源数据。优先采用lzo压缩和json格式来保存日志数据,因为这样做即可以保证日志文件足够小,同时也支持日志格式的调整。

还有一点比较重要,就是需要配置日志tmp文件前缀加“.”,这是unix系统的隐藏文件标识,这样是为了告诉hive忽略flume正在使用的日志缓存文件。

日志文件的提交时间间隔可以参考实际情况进行设定。如果你想每十分钟就跑hive任务计算最新数据,那么提交间隔可以设定为5min等等。

还需要做的一点就是分区,一般企业级应用都需要考虑分区,最常见的就是日期/小时。

数据存储

数据收集之后,自然是存储在lzo压缩的日志文件中,但是此时直接使用这些lzo格式日志文件来进行计算的话,每个hive任务都需要再解压缩每一行数据,效率还是挺低的。

建议定时将lzo压缩的日志文件,按照分区合并至lzo表中。lzo表的存储空间、使用性能都远远高于lzo压缩json格式源数据。

在实际应用中,orc表的存储空间和hive任务执行时间,相对于lzo压缩能够减少大概90%~70%,这个数字是我根据线上数据进行简单的估算结果。

而lzo压缩转换为orc表一般耗时也就是240MB/min,这个也是我根据线上数据进行的估算,具体情况还得具体分析。

数据计算

每日离线统计,每小时离线统计。