欢迎投稿

今日深度:

Hive相关,

Hive相关,


Hive介绍

Hive是一个数据仓库工具。
可以通过类SQL的语句快速实现MR统计,十分适合数据仓库的统计分析。
Hive是建立在Hadoop上的数据仓库基础架构,可以用来进行数据提取,转化,加载。

数据仓库的特征
数据库是面向事务设计的,数据仓库是面向主题设计的。
面向主图设计是指围绕一些重要的主题来操作 比如顾客 供应商 产品等注意
1、数据库一般存储在线交易数据,而数据仓库一般存储历史数据。
2、数据库设计师尽量避免冗余,数据仓库是有意设计冗余。
3、数据库是捕获数据,而数据仓库是为了分析数据
4、数据仓库仓库是时变的,数据存储从历史的角度提供信息
5、数据仓库最大的特点是弱事务,因为数据仓库存的是历史数据

数据仓库和数据库的区别?
数据库属于OLTP(Online Transaction Processing)系统。联机事务处理系统。涵盖了大部分日常操作
数据仓库属于OLAP(Online Analytical Processing)系统。联机分析处理系统。
OLTP是面向用户的,用于程序员事务处理以及客户的查询处理
OLAP是面向市场的,用于知识工人的数据分析。

OLAP通常会集成多个异构数据源的数据,数量巨大
OLTP的系统主要保证原子性,还有事务机制和恢复机制
OLAP一般存储的是历史数据,所以大部分是读操作,不需要事务

Hive的内部表和外部表

内部表的概念
    现在Hive里创建一个数据表,然后向这个表中插入数据,这样的表成为Hive内部表
外部表概念
    HDFS里已经有数据了,比如有一个txt文件,然后创建了一个hive表来管理这些数据,这样的表称之为外部表
        注:Hive外部表管理的HDFS某一目录下的文件和数据
        创建外部表命令
            create external table stu (id int,bane string) row format  delimited fields terminted  by ' ' location '/文件目录'

*Hive分区表

  • hive也支持分区表,对数据进行分区可以提高查询时的效率
    普通表和分区表的区别:有大量数据增加的需求建表分析
    执行 create table book (id int,name string)partitioned by (自定义的分区字段名(比如 category)) 字段属性(比如string)
    row format delimited fields terminted by “\t”;
    注:在创建分区表时,partitioned字段可以不再字段列表当中,列表 生成的表中自动就会具有该字段。

      分区表加载数据
      load data local inpath'文件路径' overwrite into table book partition (category='cn')
      select * from book;查询book目录下所有的数据
      select * from book where category='cn'
      此外,通过查看mysql的sds表来查询元数据信息
    
      如果需要将自己创建的分区也能被识别
      需要执行:Alter table book add partition (category='jp') location'/user/hive/warehouse/park.db/book/category=jp'
      这个行名令是在元数据dock表里面创建对应的元数据信息。
    

    分区命令
    显示分区
    show partitions iteblog;
    添加分区
    alter table book add partition (category=‘fr’)location ‘/user/hive/warehouse/park.db/book/category=fr’;
    或者:
    msck repair table book;

      删除分区
      alter table book drop partition(category='cn')
      修改分区
      alter table book partition(category='french') rename to partition (category='hh');
    
      				如果希望手动创建的分区能够被表识别到,只需要在元数据库的SDS表中增加一个分区记录即可。
      		但不推荐直接修改元数据库,很容易损坏元数据,而是要通过hql命令来修改表结构增加分区信息。
    

**hive的分桶表**
    分桶表示更细粒度的分配方式
    一张表可以同时分桶和分区
    分桶的原理是根据指定的列的计算hash值模余分桶数量后将数据分开存放
    分桶的主要作用就是:对于一个庞大的数据集我们经常需要抽样,然后在样本上验证我们的查询,优化我们的程序

    创建带桶的程序
        create table teacher(id string name string)clustered by id into 3 buckets row format delimited fields terminted by '\t';
    开启分桶机制
    set hive.enforce.bucketing = true
    分桶表不允许以外部文件的形式导入数据,只能从另一张表来导入数据

hive的数据类型

    基本数据类型
        tinyint(byte) smallint(short) int bigint(long) boolean float double string binary(byte[]) timestamp decimal char varchar data
    复杂数据类型
        array   array类型是由一系列形同数据类型的元素组成。并且可以通过下标来进行访问
        map     map包含key-value键值对,可以通过key来访问元素
        struct  struct可以包含不同数据类型元素,相当于一个对象结构,可以通过对象属性来访问

**hive的UDF**
        如果hive的内置函数不够用,我们可以自定义函数来使用,这样的函数称为hive的用户自定义函数,简称UDF

    实际步骤
        1、创建java工程,导入hive相关jar包
        2、创建类集成UDF
        3、自己编写一个evaluate方法,返回值和参数任意

**hive的工作流程**
    1、通过客户端提交一跳hql语句
    2、通过complier(编译组建)对hql进行语法分析,在这一步,编译器要知道回hql语句到底要操作那张表
    3、去元数据库找表信息
    4、得到信息
    5、complier编译器提交hql语句分析方案
    6.1、executor执行器收到方案后,执行方案(DDL)过程,在这里注意,执行器在执行方案时,会判断如果当前方案不涉及到MR组件,
    比如表添加分区信息,比如字符串操作等,此时就会直接和元数据库交互,然后去HDFS上去找具体数据。如果方案需要转换成MR JOB,
    则会将job提交给hadoop的jobTracker。
    6.2、MR job完成,并且将运行结果写入到hdfs上。
    6.3 执行器和HDFS交互,获取结果信息
    7、如果客户端HQL语句是带有查询结果性的,则会发生:7-8-9步,完成结果的查询。

hive的特点

    1、针对海量数据的高性能查询和分析系统
    2、类SQL的查询语言
    3、HiveQL灵活的可扩展性
    4、高扩展性和容错性
    5、与Hadoop其他产品完全兼容

**

hive解决数据倾斜问题

**
如何产生的:
简单来说,造成数据倾斜的原因是key值的分化严重不均,造成一部分数据多,一部分数据很少的局面。
日常使用过程中,容易造成数据侵写的原因可以归纳为几点:
1、group by
2、distinct count(distinct xx)
3、join
如何处理数据侵写问题?
1、调优参数
set hive.map.aggr=true;
在mao中会作部分聚集操作,效率更高但需要大量的内存
set hive.groupby.skewindata = true;
在数据侵写是负载均衡,当选项设定为true,生成的查询文件计划会有两个MRJob。第一个MRJob中,
map的输出结果集合会随机分布到reduce中,每个reduce做部分聚合操作,最后输出结果,这样处理的结果是相同的groupby
可能会分配到不同的reduce中,从而达到负载均衡的目的,第二个MRJob再根据预处理的数据结果按照GroupBy分不到reduce中
(这个过程可以保证相同的group by被分配到同一个reducer中),最终完成聚合操作

www.htsjk.Com true http://www.htsjk.com/hive/39020.html NewsArticle Hive相关, Hive介绍 Hive是一个数据仓库工具。 可以通过类SQL的语句快速实现MR统计,十分适合数据仓库的统计分析。 Hive是建立在Hadoop上的数据仓库基础架构,可以用来进行数据提取,转...
相关文章
    暂无相关文章
评论暂时关闭