hive基础知识

959 阅读3分钟

1. hive基本概念

1.1. hive简介

① 什么是hive

  • hive由facebook实现并开源
  • hive是基于hadoop的一个数据仓库工具
  • hive存储的数据其实底层存储在hdfs上
  • hive将hdfs上的结构化数据映射成一张数据库表
  • hive提供hql(hive sql)查询功能
  • hive的本质是将sql语句转换成mapreduce任务运行,使不熟悉mapreduce的用户很方便的利用hql语句处理和计算hdfs上的结构化数据,适用于离线的批量数据计算
  • hive使用户可以极大的简化分布式计算程序的编写,而将精力集中于业务逻辑

②为什么使用hive

直接使用mapreduce所面临的问题:

  • 人员学习成本太高
  • 项目周期要求短
  • mapreduce实现复杂开发逻辑开发难度大

使用hive:

  • 更友好的接口:操作接口采用类sql的语法,提供快速开发的能力
  • 更低的学习成本:避免写mapreduce,减少开发人员学习成本
  • 更好的扩展性:可自由扩展集群规模而无须重启服务,还支持用户自定义函数

③hive特点

优点:

  1. 可扩展性,横向扩展(可自由扩展集群规模,一般情况不需要重启服务)
  2. 延展性:hive支持自定义函数,用户可以根据自己的需求来实现自己的函数
  3. 良好的容错性:可以保障即使有节点出现问题,sql语句仍可完成执行

缺点:

  1. hive不支持记录级别的增删改操作
  2. hive的查询延时很严重
  3. hive不支持事务

1.2. hive的数据存储

  1. hive的存储结构包括数据库,表,视图,分区和表数据等。数据库,表,分区等等都对应hdfs上的一个目录,表数据对应hdfs目录的文件;
  2. hive中所有的数据都存储在hdfs中;
  3. 只用在创建表时告诉hive数据的列分隔符,行分隔符,hive就能解析数据;
  4. hive中包含以下数据模型:database,table,external table, partition,bucket,view;
  5. hive中表分为内部表,外部表,分区表和分桶表;

内部表和外部表的区别:

删除内部表,删除表元数据和数据

删除外部表,删除元数据,不删除数据;

如果所有数据都用hive处理,则倾向选择内部表,如果是hive和其他工具针对相同的数据集进行处理,外部表比较合适;

分区表和分桶表的区别:

分区和分桶都是细化数据管理,但是分区表是手动添加分区,由于hive是读模式,所以对添加进分区的数据不做模式校验,分桶表中的数据是按照某些字段进行hash散列形成的多个文件,所以数据的准确性也高很多;

2. hive的基本使用

  1. 创建库:create databases if not exists mydb;
  2. 查看库:show databases;
  3. 切换数据库:use mydb;
  4. 创建表:create table if not exists t_user(id string, name string) row format delimited fields terminated by ';';
  5. 查看表:show tables;
  6. 查看表的详细信息:desc formatted t_user;
  7. 插入数据 insert into table t_user values ('1','huangbo'), ('2','xuzheng'), ('3','wangbaoqiang');
  8. 查询数据:select * from t_user;
  9. 导入数据:①导入hdfs数据:load data inpath '/user.txt' into table t_user; ②导入本地数据:load data local inpath '/hoe/hadoop/user.txt' into table t_user;