Hive系列(二)Hive的基本原理与操作--全的不行!!!

一:Hive的基本架构原理:

在这里插入图片描述

1.用户接口:Client

CLI(hive shell)、JDBC/ODBC(java访问hive)、WEBUI(浏览器访问hive)

2.元数据:Metastore

元数据包括:表名、表所属的数据库(默认是default)、表的拥有者、列/分区字段、表的类型(是否是外部表)、表的数据所在目录等;
默认存储在自带的derby数据库中,推荐使用MySQL存储Metastore

3.Hadoop

使用HDFS进行存储,使用MapReduce进行计算。

4.驱动器:Driver

(1)解析器(SQL Parser):将SQL字符串转换成抽象语法树AST,这一步一般都用第三方工具库完成,比如antlr;对AST进行语法分析,比如表是否存在、字段是否存在、SQL语义是否有误。
(2)编译器(Physical Plan):将AST编译生成逻辑执行计划。
(3)优化器(Query Optimizer):对逻辑执行计划进行优化。
(4)执行器(Execution):把逻辑执行计划转换成可以运行的物理计划。对于Hive来说,就是MR/Spark。

在这里插入图片描述

Hive通过给用户提供的一系列交互接口,接收到用户的指令(SQL),使用自己的Driver,结合元数据(MetaStore),将这些指令翻译成MapReduce,提交到Hadoop中执行,最后,将执行返回的结果输出到用户交互接口。

二:Hive的作用和优势:

  • 基于Hadoop的数据仓库解决方案

    • Hive是基于Hadoop的一个数据仓库工具,将结构化的数据文件映射为数据库表
    • 提供类sql的查询语言HQL(Hive Query Language)
    • 数据不放在hive上,放在HDFS上
    • 由Facebook开源用于解决海量结构化日志的数据统计。
    • 执行程序运行在Yarn

  • 优势:

    • 提供了简单的优化模型
    • HQL类sql语法,简化MR开发
    • 支持在HDFS和HBase上临时查询数据
    • 支持用户自定义函数,格式
    • 成熟JDBC和ODBC驱动程序,用于ETL和BI
    • 稳定可靠的批处理
    • 支持在不同计算框架运行

  • 缺点:

    • Hive的执行延迟比较高,因此Hive常用于数据分析,对实时性要求不高的场合

    • 迭代式算法无法表达

    • 数据挖掘方面不擅长

    • Hive自动生成的MapReduce作业,通常情况下不够智能化

    • Hive调优比较困难,粒度较粗

三:Hive的数据类型:

类型 示例 类型 示例
TINYINT 10Y SMALLINT 10S
INT 10 BIGINT 100L
FLOAT 1.342 BINARY 1010
DECIMAL 3.14 STRING ’Book’ or "Book"
BOOLEAN TRUE VARCHAR ’Book’ or "Book"
CHAR ’YES’or"YES" TIMESTAMP ’2013-01-31 00:13:00:345’
DATE ’2013-01-31’ DOUBLE 1.234
ARRAY [‘Apple’,‘Orange’] ARRAY a[0] = 'Apple’
MAP {‘A’:‘Apple’,‘0’:‘Orange’} MAP<STRING, STIRNG> b[‘A’] = 'Apple’
STRUCT {‘Apple’,2} STRUCTfruit: c.weight = 2

四:Hive元数据结构:

元数据管理:

**元数据包括:**表名、表所属的数据库(默认是default)、表的拥有者、列/分区字段、表的类型(是否是外部表)、表的数据所在目录等

  • 记录数据仓库中的模型定义
  • 默认存储在自带的derby数据库中,推荐使用MySQL存储Metastore
数据结构 描述 逻辑关系 物理存储
Database 数据库 表的集合 文件夹
Table 行数据的集合 文件夹
Partition 分区 用于分割数据 文件夹
Buckets 分桶 用于分布数据 文件
Row 行记录 文件中的行
Columns 列记录 每行指定的位置
Views 视图 逻辑概念,可跨越多张表 不存储数据
Index 索引 记录统计数据信息 文件夹

五:Hive的数据库表分类:

内部表:

HDFS中为所属数据库目录下的子文件夹
数据完全由Hive管理,删除表(元数据)会删除数据,虽然存储路径在HDFS上,但由Hive自己管理。

外部表:

数据保存在指定位置的HDFS路径中
Hive不完全管理数据,删除表(元数据)不会删除数据

注意:

PS:
内部表数据存储的位置是hive.metastore.warehouse.dir(默认:/user/hive/warehouse),
外部表数据的存储位置由自己制定(如果没有LOCATION,Hive将在HDFS上的/user/hive/warehouse文件夹下以外部表的表名创建一个文件夹,并将属于这个表的数据存放在这里)


六:Hive基本命令:

命令语句hql结构几乎和mysql一致

  • 创建数据库:
    create database mydemo;
    
  • 创建内部表:
    create table userinfos(
    	userid int,
        username string
    );
    
  • 创建外部表:
    create external table customs(
        cust_id string,
        cust_name string,
        age int
    )
    row format delimited fields terminated by ','
    location '/data';
    
  • 插入表数据:
    insert into userinfos values('1','zs');
    
  • 查询表数据:
    select count(*) from userinfos;
    
  • 修改表元数据:
    ALTER TABLE employee RENAME TO new_employee;
    ALTER TABLE c_employee SET TBLPROPERTIES ('comment'='New name, comments');
    ALTER TABLE employee_internal SET
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值