Hive基础(一)

Hive基础

  1. 什么是Hive

    1. 由fecebook开源,基于Hadoop的==离线数仓工具==
    2. 可用于结构化数据文件==映射==为一张表,提供类SQL查询
    3. 将SQL转换为MapReduce程序
  2. 用途

    1. 离线数仓(SQL–MapReduce)
    2. SQL–>MapReduce–>运算结果–>客户端
  3. 优缺点

    1. 优点
      1. 采用类SQL
      2. 避免直接写MapReduce
    2. 缺点
      1. 延迟高
      2. 对小数据处理没有优势,因为1
  4. 数据库和数据仓库的区别

  5. datagrip连接hive

    1
        
  6. 数仓的分层架构

    1
        
  7. 设计丐版Hive

    1. 需求

      1. 用户只需要写SQL
      2. 自动将SQL转化为MapReduce
      3. 能处理位于HDFS上的结构化数据
    2. 需求分析

      1. SQL–>MapReduce

        1
        2
        3
        4
        1、数据文件在哪
        2、用什么符号作为列的分隔符
        3、那些列可以作为city使用
        4、city列是什么类型数据
      2. 存储在关系型数据库里面(MySQL)

      3. 构建分布式MySQL

        1. 元数据管理功能:记录各类元数据信息
          1. 数据位置
          2. 数据结构
          3. 数据描述【字段名】
        2. 写一个SQL解析器(JAVA):完成SQL–>MapReduce的转换
          1. 分析SQL
          2. SQL–>MapReduce
          3. 提交MapReduce运行,并搜集结果
      4. 流程图

        image-20230909121356170

    3. 基本架构

      image-20230909143044334

      1. 用户接口

      2. 元数据存储

        1. 客户端连接MetaStore

        2. metastore连接MySQL

        3. MetaStore服务连接方式

          1. 本地模式

            1. 优点:可以单独使用外部数据库(MySQL),元数据共享
            2. 缺点:想对浪费支援,MetaStore嵌入到Hive,每启动一次Hive,都内置启动了
          2. 内嵌模式

            1. 优点:解压Hive安装包到hive/bin,可以直接连接
            2. 缺点:
          3. 远程模式(推荐)

            1. 优点:可以单独使用外部数据库(MySQL),元数据共享;可以连接MetaStore服务,也可以连接hiveserver2服务
            2. 缺点:==如果要启动hiveserver2服务,需要先启动MetaStore服务==
            内嵌模式 本地模式 远程模式
            单独配置、启动
            存储介质 derby mysql mysql
        4. 启动MetaStore服务

          1. cd /export/server/hive/bin
          2. [nohup] ./hive –server metastore & :不挂起用hive在后台启动MetaStore服务
          3. [nohup] ./hive –server hiveserver2 &
      3. lsof -i:10000 查看该端口有哪些进程在运行

    4. Beeline

           1. 启动beeline,/export/server/hive/bin/beeline
           2. ! connect jdbc:hive2://node1:1000
      
      1. crtl+d 退出
    5. 配置环境变量,快速启动hive

      image-20230909160704761

      1
      2
      3
      4
      sudo vim /etc/profile
      echo '#HIVE_HOME'
      echo 'export HIVE_HOME=/export/server/apache-hive-3.1.2-bin' >> /etc/profile
      echo 'export PATH=$PATH:$HIVE_HOME/bin:$HIVE_HOME/sbin' >> /etc/profile
  8. 数据仓库和数据库

    1
    2
    3
    4
    5
    6
    1. 数据库(OLTP):用于把数据结果给外部各类程序使用,侧重于CRUD
    2. 数据仓库(OLAP):
    1. 面向主题
    2. 集成的
    3. 非易失的(不可更新)
    4. 时变的
  9. ETL和ELT(将数据加载到数仓中)

    1. ETL:先从数据源池中,抽取数据,保存在临时数据仓库中(ODS)
      1. Extract 抽取
      2. Transform 转化
      3. Load 装载
      4. 工具:kettle
    2. ELT:数据在数据源中抽取后立即加载,没有临时数据库(ODS),数据会立即加载到单一的集中存储库中
  10. Hive数据库操作

  11. HQL

    1. DDL:数据定义语言/数据描述语言

    2. 数据对象:数据库、数据表、视图、索引

    3. 核心语法:

      1. 创建:create
      
      1. 删除:drop
      2. 修改:alter
      3. 不涉及表内操作
    4. 创建数据库(可以用schema表示数据库)

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      # 全英文,不要有中文
      # 创建数据库
      create database [if not exists] 数据库名 [设置编码格式];
      [comment '解释说明'] #注释说明语句
      [location '存储到HDFS路径名'] # 默认路径 hdfs://node1:8020/user/hive/warehouse
      [with dbproperties (属性='值', ...)] # 数据库的属性配置,键值对

      -- 1 在默认路径新建一个班级db1、db2, 给其中一个库添加一些注释
      CREATE DATABASE db1;
      create database db2 comment "database db2 for sz40";

      -- 2 新建一个添加了属性信息的班级——DB4
      create database db3 with dbproperties ("cls_name"="sz_pyb_40");

      -- 3 新建DB3,并指定存储路径为:/itheima
      create database db4 location "/ithaima";
    5. 查看数据库

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      desc database extended 数据库名;
      1)extended用于显示更多信息,比如位置路径等;

      -- 查看所有数据库
      show databases;

      -- 查看创建数据库语句
      show create database 数据库名;

      -- 切换数据库
      use 数据库名;

      -- 查看当前正在使用的数据库
      select current_database();

    6. 删除数据库

      1
      2
      3
      drop database 数据库名 [restrict | cascade];
      -- restrict是默认行为,表示限制,即仅在数据库为空时才删除它;
      -- cascade 数据库中带表时,需要加
    7. 修改数据库

      1
      2
      3
      4
      -- 修改数据库存储路径
      alter database 数据库名 set locatio 存储路径;(绝对路径)
      -- 修改或新增数据库配置
      alter database 数据库名 set dbproperties (属性名=值, ...)