个人Hive学习笔记

本文详述了Hive的产生原因、基本介绍、架构、数据处理分类和操作,包括解释器、编译器、优化器、执行器的工作流程。深入探讨了Hive的元数据管理、数据仓库与数据库的区别、各种操作如钻取、上卷等。此外,还介绍了Hive的内外部表、分区、动态分区、事务、SerDe、Server2、Beeline、函数、权限管理和调优策略等内容,涵盖了Hive的广泛使用场景和技术要点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Hive

Hive基本介绍

产生原因

  1. 方便对文件及数据的元数据进行管理,提供统一的元数据管理方式;
  2. 提供更加简单的方式来访问大规模的数据集,使用SQL语言进行数据分析。

介绍

Hive在使用过程中,是使用SQL语句来进行数据分析,由SQL语句到具体的任务执行还需要经过解释器编译器优化器执行器四个部分才能完成。

1)解释器

​ 调用语法解释器和语义分析器将SQL语句转换成对应的可执行的Java代码或者业务代码。

2)编译器

​ 将对应的Java代码转换成字节码文件或者Jar包。

3)优化器

​ 从SQL语句到Java代码的解析转换过程中需要调用优化器,进行相关策略的优化,实现最优的查询性能。

4)执行器

​ 当业务代码转换完成之后,需要上传到MapReduce集群中执行。

数据处理分类

​ 数据处理大致可以分成两大类:联机事务处理OLTP(on-line transaction processing)联机分析处理OLAP(on-line analytical processing)

  1. OLTP是传统关系型数据库的主要应用,主要是基本的、日常的事务处理,例如银行交易;
  2. OLAP是数据仓库系统的主要应用,支持复杂的分析操作,侧重决策支持,并且提供直观易懂的查询结果。

操作

在这里插入图片描述

1. 钻取

​ 在维的不同层次间的变化,从上层降到下层,或者说将汇总数据拆分到更细节的数据,比如通过对2019年第二季度的总销售数据进行钻取来查看2019年4、5、6,每个月的消费数据,再例如可以钻取浙江省来查看杭州市、温州市、宁波市等这些城市的销售数据。

2. 上卷

​ 钻取的逆操作,即从细粒度数据向更高汇总层的聚合,如将江苏省、上海市、浙江省的销售数据进行汇总来查看江浙沪地区的销售数据。

3. 切片

​ 选择维中特定的值进行分析,比如只选择电子产品的销售数据或者2019年第二季度的数据。

4. 切块

​ 选择维中特定区间的数据或者某批特定值进行分析,比如选择2019年第一季度到第二季度的销售数据或者是电子产品和日用品的销售数据。

5. 旋转

​ 维的位置互换,就像是二维表的行列转换,比如通过旋转来实现产品维和地域维的互换。

数据库和数据仓库的区别

  1. 数据库是对业务系统的支撑,性能要求高,响应的时间短,而数据仓库则对响应时间没有太多的要求,当然也是越快越好。
  2. 数据库存储的是某一个产品线或者某个业务线的数据,数据仓库可以将多个数据源的数据经过统一的规则清洗之后,进行集中统一管理。
  3. 数据库中存储的数据可以修改,无法保存各个历史时刻的数据,数据仓库可以保存各个时间点的数据,形成时间拉链表,可以对各个历史时刻的数据做分析。
  4. 数据库一次操作的数据量小,数据仓库操作的数据量大。
  5. 数据库使用的是实体-关系(E-R)模型,数据仓库使用的是星型模型或者雪花模型。
  6. 数据库是面向事务级别的操作,数据仓库是面向分析的操作。

Hive的架构

在这里插入图片描述

角色

1. 用户访问的接口(CLI)

​ CLI(Command Line Interface):用户可以使用Hive自带的命令行接口执行HiveQL、设置参数等功能;

​ JDBC/ODBC:用户可以使用JDBC或ODBC的方式在代码中操作Hive;

​ Web GUI:浏览器接口,用户可以在浏览器中对Hive进行操作(2.2之后,淘汰掉了)

2. Thrift Server

​ Thrift服务运行客户端使用Java、C++、Ruby等多种语言,通过编程的方式远程访问Hive。

3. Driver

​ Hive Driver是Hive的核心,其中包含了解释器、编译器、优化器等各个组件,完成从SQL语句到MapReduce任务的解析优化执行过程。

4. MetaStore

​ Hive的元数据存储服务,一般将数据存储再关系型数据库中,为了实现Hive元数据的持久化操作,Hive的安装包中自带了Derby内存数据库,但是在实际的生产环境中一般使用MySQL来存储元数据。

搭建方式

  1. Local/Embedded Metastore Database(Derby)
  2. Remote Metastore Database
  3. Local/Embedded Metastore Server
  4. Remote Metastore Server

根据上述分类,可以简单归纳为以下三类:

  1. 使用Hive自带的内存数据库Derby作为元数据存储;

在这里插入图片描述

  1. 使用远程数据库MySQL作为元数据存储;

在这里插入图片描述

  1. 使用本地 / 远程元数据服务模式安装Hive

在这里插入图片描述

安装步骤
无ThriftServer
  1. 解压安装

  2. 修改环境变量

    vi /etc/profile

    export HIVE_HOME=/opt/bigdata/hive-2.3.4

    并且将HIVE_HOME/bin加到PATH路径中。

  3. 修改配置文件,进入到$HIVE_HOME/conf中,

    mv hive-default.xml.template hive-site.xml

    增加配置,将原有的配置删除,增加以下配置

        <property>
            <name>hive.metastore.warehouse.dir</name>
            <value>/user/hive/warehouse</value>
        </property>
        <property>
            <name>javax.jdo.option.ConnectionURL</name>
            <value>jdbc:mysql://node01:3306/hive?createDatabaseIfNotExist=true</value>
        </property>
        <property>
            <name>javax.jdo.option.ConnectionDriverName</name>
            <value>com.mysql.jdbc.Driver</value>
        </property>
        <property>
            <name>javax.jdo.option.ConnectionUserName</name>
            <value>root</value>
        </property>
        <property>
            <name>javax.jdo.option.ConnectionPassword</name>
            <value>root</value>
        </property>
    
  4. 添加MySQL的驱动包到$HIVE_HOME/lib目录中;

  5. 执行初始化元数据数据库的步骤

    schematool -dbType mysql -initSchema

  6. 执行hive启动对应的服务。

    hive

有ThriftServer
  1. 解压安装(ThriftServer和Thrift的Client都要)

  2. 修改环境变量(ThriftServer和Thrift的Client都要)

    vi /etc/profile

    export HIVE_HOME=/opt/bigdata/hive-2.3.4

    并且将HIVE_HOME/bin加到PATH路径中。

  3. ThriftServer服务端中修改配置文件,进入$HIVE_HOME/conf目录中

    mv hive-default.xml.template hive-site.xml

    将原有配置删除,增加以下配置(与原本的无ThriftServer的配置一样,这里不过把数据库名称和hdfs的路径做了对应修改)

        <property>
            <name>hive.metastore.warehouse.dir</name>
            <value>/user/hive_remote/warehouse</value>
        </property>
        <property>
            <name>javax.jdo.option.ConnectionURL</name>
            <value>jdbc:mysql://node01:3306/hive_remote?createDatabaseIfNotExist=true</value>
        </property>
        <property>
            <name>javax.jdo.option.ConnectionDriverName</name>
            <value>com.mysql.jdbc.Driver</value>
        </property>
        <property>
            <name>javax.jdo.option.ConnectionUserName</name>
            <value>root</value>
        </property>
        <property>
            <name>javax.jdo.option.ConnectionPassword</name>
            <value>root</value>
        </property>
    
  4. ThriftServer的客户端中修改配置文件,进入$HIVE_HOME/conf目录中

    mv hive-default.xml.template hive-site.xml

    将原有配置删除,增加以下配置

    ThriftServer的端口默认是9083

        <property>
            <name>hive.metastore.warehouse.dir</name>
            <value>/user/hive/warehouse</value>
        </property>
        <property>
            <name>hive.metastore.uris</name>
            <value>thrift://node03:9083</value>
        </property>
    
  5. 添加MySQL的驱动包到$HIVE_HOME/lib目录中;

  6. ThriftServer服务端执行初始化元数据数据库的步骤

    schematool -dbType mysql -initSchema

  7. ThriftServer服务端启动

    hive --service metastore

    这个启动后,是一个阻塞的窗口,可以做一个脚本去执行就可以了。

  8. ThriftServer客户端启动

    hive

Hive

数据类型

  1. primitive_type(基本数据类型)

    下面列举一些常用的

    • INT
    • BOOLEAN
    • FLOAT
    • DOUBLE
    • STRING
    • DECIMAL(precision, scale)
    • DATE
    • 等等…………
  2. array_type(数组数据类型)

    • ARRAY < data_type >
  3. map_type(key-value键值对形式的数据类型)

  4. struct_type(结构数据类型)

  5. union_type

常用命令

  1. CREATE TABLE

    格式

    行数据格式化中可以灵活指定下面这些分隔符:

    1. 属性的分隔符(fields)
    2. 集合的分隔符(collection)
    3. map的分隔符(map key)
    (......)
    row format delimited
    feilds terminated by ','
    collection items terminated by '-'
    map keys terminated by ':'
    
  2. LOAD

    load data local inpath '/root/data' into table psn;

    其中,'local’可加可不加,加了则指本地linux路径,不加则指hdfs的路径。

    如果从本地路径load,其实是将文件复制一份到hive的hdfs目录中;而若是使用hdfs的路径,则会是将文件移动到hive的hdfs目录中。

    这里涉及到一个HIVE的机制,HIVE是读时检查,而在写入的时候就进行检查的机制叫写时检查。

  3. INSERT INTO … VALUES…

    衍生用法:从其他表中查询数据插入到另一张表中

    from psn 
    insert overwrite table psn1
    select id, name
    where ......
    

内、外部表

​ Hive默认情况下,创建的是内部表。

​ 创建外部表需要用到’external’和’location’关键字。

create external table psn4
(
    id int,
    name string,
    likes array<string>,
    address map<string, string>
)
row format delimited
fields terminated by ','
collection items terminated by '-'
map keys terminated by ':'
location '/data'

内外部表的区别:

  1. 内部表创建的时候,数据存储在hive的默认目录中;

外部表创建时,需要指定’external’关键字,并且指定location(存储目录)

  1. 内部表在删除的时候,会将
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值