特点

  • 可扩展:可以自由的扩展集群的规模,一般情况下不需要重启服务
  • 延展性:Hive支持用户自定义函数,用户可以根据自己的需求来实现自己的函数
  • 容错良好的容错性,节点出现问题SQL仍然可以完成执行
  • 弱事务的:因为要处理海量的数据,所有可以有小的错误。

元数据

存储: Hive将元数据存储在元数据库中(mysql/derby).

**内容:**元数据包括表的名字、表的列和分区及其属性,表的属性(是否为外部表等),表的数据所在的目录。

Hive与Hadoop的关系

再看Hive(1)---基本概念(表)

Derby元数据库

hive默认使用自带的Derby数据库来存储元数据,当在bin目录下进入hive时,derby数据库会在bin目录下生成一个metastore_db目录,将元数据信息存在这个目录下。

而当我们换一个目录启动hive的时候,derby数据库又会在当前目录生成一个metastore_db目录,存储元数据,这种情况会导致上次hive中的元数据丢失。

内部表

先有Hive表,再有数据

特点:当内部表被删除的时候,hive中该表的元数据和对应的文件也会被删除掉

create table t1(id int,name string)row format delimited fields terminated by ‘,’;

load data local inpath ‘/home/software/1.txt’ into table t1;

外部表

先有文件,里面存储了数据,通过hive创建一张表来管理这个文件数据,在建表的同时指定一个指向实际数据的路径(LOCATION),这样的表称之为外部表

特点:删除外部表的时候,只是删除hive中这个表的元数据,而不会删除外部文件

create external table s(id int,name string) row format delimited fields terminated by ‘,’ location ‘hdfs://192.168.1.111:90000/hive/my’;

分区表

内部表和外部表都可以是分区表。

**概念:**对数据按照某列或者某些列进行分区管理。

例:当前互联网应用每天都要存储大量的日志文件,几G、几十G甚至更大都是有可能。存储日志,其中必然有个属性是日志产生的日期。在产生分区时,就可以按照日志产生的日期列进行划分。把每一天的日志当作一个分区。

**作用:**可以避免查询整表,在生产环境下基本都是建立带有分区字段的表。

实现细节:

  1. 一个表可以拥有一个或者多个分区,每个分区以文件夹的形式在表文件夹的目录下
  2. 表和列名不区分大小写
  3. 分区是以字段的形式在表结构中存在,但是在建表的时候不能在字段中,不存储实际的数据内容。

语法:

  1. 创建分区表:create table bok(id int,name string) partitioned by(category string) row format delimited fields terminated by ‘\t’
  2. 分区表加载数据:load data locak inpath ‘/home/cn.txt’ insert into table book partation(category=‘cn’);
  3. 从一个分区中查询数据:select * from book where category=‘cn’

分桶表

概念: 对于每一个表或者分区,Hive可以进一步组织成桶,也就是说桶是更为细粒度的数据范围划分。Hive也是针对某一列进行桶的组织,采用对列值哈希,然后除以桶的个数求余的方式决定该条记录放在哪个桶当中。

开启分桶机制: set hive.enforce.bucketing=true;

语法:

创建分桶表:create table teacher(name string) clustered by (name) into 3 buckets row format delimited fields terminated by ’ ';

.往表中插入数据:insert overwrite table teacher select * from tmp;

**注意:**对于分桶表不允许以外部文件方式导入数据,只能从另外一张表导入数据,分桶表只能是内部表

Hive的UDF

实现步骤:

  1. 新建一个java工程,导入hive相关的包
  2. 创建类继承UDF
  3. 自己编写一个evaluate方法,返回值和参数任意。自己编写一个evaluate方法,返回值和参数任意。

相关文章:

  • 2021-07-08
  • 2021-04-10
  • 2021-06-27
  • 2022-12-23
  • 2021-05-12
  • 2021-10-18
  • 2022-12-23
  • 2021-06-05
猜你喜欢
  • 2021-08-02
  • 2021-08-25
  • 2022-12-23
  • 2021-09-08
  • 2021-11-17
相关资源
相似解决方案