hive基本介绍以及性能优化
2015-08-28 16:57
253 查看
一、介绍
hive是建立在Hadoop上的数据仓库基础架构。它提供了一系列的工具,可以用来进行数据提取转化加载(ETL),这是一种可以存储、查询和分析存储在Hadoop中大规模数据的机制。最大的有点就是定义了类SQL语言,称为HQL。使用HQL作为查询接口
使用HDFS作为底层存储
使用MapReduce作为执行层
1.1 结构描述
hive的结构可以分为以下几部分:用户接口:包括CLI,Client,WUI
元数据存储。通常是存储在关系数据库如mysql,derby中
解释器、编辑器、优化器、执行器
Hadoop:用HDFS进行存储,利用MapReduce进行计算
1、用户接口主要有三个:CLI,Client,WUI。其中最常用的是CLI,CLI启动的时候,会同时启动一个hive副本。Client是Hive的客户端,用户连接至Hive Server。在启动Client模式的时候,需要指出Hive Server所在节点,并且在改节点启动Hive Server。WUI是通过浏览器访问Hive。
2、Hive 将元数据存储在数据库中,如 mysql、derby。Hive 中的元数据包括表的名字,表的列和分区及其属性,表的属性(是否为外部表等),表的数据所在目录等。
3、解释器、编译器、优化器完成 HQL 查询语句从词法分析、语法分析、编译、优化以及查询计划的生成。生成的查询计划存储在 HDFS 中,并在随后有 MapReduce 调用执行。
4、Hive 的数据存储在 HDFS 中,大部分的查询由 MapReduce 完成
1.2 元数据
Hive将元数据存储在RDBMS中,一般常用的有MYSQL和DERBY。由于后者只支持单客户端登录,所以一般采用MySql来存储元数据。1.3 数据存储
首先,Hive 没有专门的数据存储格式,也没有为数据建立索引,用户可以非常自由的组织 Hive 中的表,只需要在创建表的时候告诉 Hive 数据中的列分隔符和行分隔符,Hive 就可以解析数据。其次,Hive 中所有的数据都存储在 HDFS 中,Hive 中包含以下数据模型:Table,External Table,Partition,Bucket。
二、性能优化
2.1 介绍
在Hadoop的计算框架特性下回衍生哪些问题?数据倾斜
job数较多的作业运行效率相对较低
sum,count,max,min等UDAF,不怕数据倾斜问题,hadoop在map端的汇总合并优化,使数据倾斜不成问题。
count(distinct ),在数据量大的情况下,效率较低,如果是多count(distinct )效率更低,因为count(distinct)是按group by 字段分组,按distinct字段排序,一般这种分布方式是很倾斜的。举个例子:比如男uv,女uv,像淘宝一天30亿的pv,如果按性别分组,分配2个reduce,每个reduce处理15亿数据。
优化手段
好的模型设计事半功倍
解决数据倾斜问题
减少job数
设置合理的map reduce的task数
了解数据分布,自己动手解决数据倾斜问题是个不错的选择。set hive.groupby.skewindata=true;这是通用的算法优化,但算法优化有时不能适应特定业务背景,开发人员了解业务,了解数据,可以通过业务逻辑精确有效的解决数据倾斜问题。
数据量较大的情况下,慎用count(distinct),count(distinct)容易产生倾斜问题。
对小文件进行合并,是行至有效的提高调度效率的方法,假如所有的作业设置合理的文件数,对云梯的整体调度效率也会产生积极的正向影响。
优化时把握整体,单个作业最优不如整体最优。
相关文章推荐
- Hadoop_2.1.0 MapReduce序列图
- 分享Hive的一份胶片资料
- Hadoop生态上几个技术的关系与区别:hive、pig、hbase 关系与区别
- MongoDB中的MapReduce简介
- MongoDB学习笔记之MapReduce使用示例
- MongoDB中MapReduce编程模型使用实例
- MapReduce中ArrayWritable 使用指南
- Java函数式编程(七):MapReduce
- java连接hdfs ha和调用mapreduce jar示例
- 用PHP和Shell写Hadoop的MapReduce程序
- JavaScript mapreduce工作原理简析
- mongodb mapredReduce 多个条件分组(group by)
- HBase基本原理
- HDFS DatanodeProtocol——sendHeartbeat
- HDFS DatanodeProtocol——register
- Hadoop集群提交作业问题总结
- Hadoop源码分析 HDFS ClientProtocol——addBlock
- Hadoop源码分析HDFS ClientProtocol——create
- Hadoop源码分析FSNamesystem几个重要的成员变量
- Hadoop源码分析HDFS ClientProtocol——getBlockLocations