简介

Hive是一个基于Hadoop文件系统之上的数据仓库架构。为数据仓库管理提供了许多功能:数据ETL工具、数据存储管理和大型数据集的查询和分析能力。
高延迟性。不提供数据排序和查询cache功能,不提供在线事务处理,不提供实时查询和记录级的更新,但能更好地处理不变的大规模数据集上的批量任务。

最大价值:1、可扩展性(自动适应机器数目和数据量的动态变化);2、可延展性(结合MapReduce和用户定义的函数库);3、良好的容错性;4、低约束的数据输入格式。

数据存储

四种模型:表(table),外部表(External Table),分区(Partition),桶(Bucket)

优化策略

1、列裁剪:在读取数据的时候,只读取查询中需要用到的列,而忽略其它列。
2、Map Join操作:Join操作在Map阶段完成,不再需要Reduce,前提条件是需要的数据在Map过程中可以访问。

  • Join生排序 在Reduce阶段,对一大一小的数据表类型进行Join操作,交大数据表数据拷入化到外存,以此避免消耗内在过大的问题。

3、Group By操作:Group By操作对Hive性能影响非常大,特别是处理海量数据的情况下。

  • 1、Map端部分聚合:并不是所有的聚合操作都要在Reduce端完成,很多聚合操作都可以先 Map端进行部分聚合,最后 在Reduce端得出最终结果。Map端部分聚合基于Hash。
  • 2、有数据倾斜的时候进行负载均衡:参数为hive.groupby.skewindata = false,默认为false。当选项设定为true,生成的查询计划会有两个MR Job。第一个MR Job中,Map的输出结果集合会随机分布到Reduce中,从而达到负载均衡的目的。第二个MR Job再根据预处理的数据结果按照Group By Key分到Reduc中(保证相同的Group By Key被 分布到同一个Recuce中),最后完成最终的聚合操作。

4、合并小文件:文件数目过多,会给HDFS带来压力,并且会影响处理效率,可以通过合并Map和Reduce的结果来消除这样的影响。


Standing on shoulders of Giants