在写impala的技术文档前,先做一下工作的整理。
架构是 日志收集到kafka ,经过清洗后存放到kudu中,然后定时去做mapreduce 任务,将kudu中的老表的数据分配到hdfs 中。
其中 hdfs 是用hive来管理, 文件格式是parquet格式(列式存储)。 通过impala 去查询parquet格式文件和kudu表,做一个union all的聚合。
因此在这里我用到了impala 。就简单的对impala做一个介绍和输出。
impala 是Apache 的顶级项目,http://impala.apache.org/
是cloudera 开源, 通过对各节点的hdfs文件 的直接查询,能够获得很好的一个查询效果。测试过, impala>presto >sparksql>hive
当然列式存储是有一定的io优势的。 parquet 格式,列式存储,每一列的数据类型固定,能够获得一个更好的编码效果。
列式存储的 格式是
header + broker*n +footer
其中header 中是有文件格式的类型。像parquet就是par1
borker 就是数据, 其中 一个broker 其实可以认为是一个row group 的数据
row group 数据下面是多个column chunk的数据,每个column chunk文件下面又是多个page ,每个column chunk 是一列数据,page 是压缩和编码单元。 footer 里面就有很多的元数据信息和broker的一些索引的信息。
具体的一些测试方面的可以看 http://blog.51cto.com/11964104/2071800