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特点
优点:
- 可扩展性,横向扩展(可自由扩展集群规模,一般情况不需要重启服务)
- 延展性:hive支持自定义函数,用户可以根据自己的需求来实现自己的函数
- 良好的容错性:可以保障即使有节点出现问题,sql语句仍可完成执行
缺点:
- hive不支持记录级别的增删改操作
- hive的查询延时很严重
- hive不支持事务
1.2. hive的数据存储
- hive的存储结构包括数据库,表,视图,分区和表数据等。数据库,表,分区等等都对应hdfs上的一个目录,表数据对应hdfs目录的文件;
- hive中所有的数据都存储在hdfs中;
- 只用在创建表时告诉hive数据的列分隔符,行分隔符,hive就能解析数据;
- hive中包含以下数据模型:database,table,external table, partition,bucket,view;
- hive中表分为内部表,外部表,分区表和分桶表;
内部表和外部表的区别:
删除内部表,删除表元数据和数据
删除外部表,删除元数据,不删除数据;
如果所有数据都用hive处理,则倾向选择内部表,如果是hive和其他工具针对相同的数据集进行处理,外部表比较合适;
分区表和分桶表的区别:
分区和分桶都是细化数据管理,但是分区表是手动添加分区,由于hive是读模式,所以对添加进分区的数据不做模式校验,分桶表中的数据是按照某些字段进行hash散列形成的多个文件,所以数据的准确性也高很多;
2. hive的基本使用
- 创建库:create databases if not exists mydb;
- 查看库:show databases;
- 切换数据库:use mydb;
- 创建表:create table if not exists t_user(id string, name string) row format delimited fields terminated by ';';
- 查看表:show tables;
- 查看表的详细信息:desc formatted t_user;
- 插入数据 insert into table t_user values ('1','huangbo'), ('2','xuzheng'), ('3','wangbaoqiang');
- 查询数据:select * from t_user;
- 导入数据:①导入hdfs数据:load data inpath '/user.txt' into table t_user; ②导入本地数据:load data local inpath '/hoe/hadoop/user.txt' into table t_user;