Hadoop实战-11-hive阅读笔记

导言

hive是Hadoop的一个重要子项目,封装MapReduce编程技术,提供hive QL的类SQL的编程接口,方便快捷的访问和使用MapReduce。

hive简介

hive是一个基于Hadoop文件系统上的数据仓库结构,提供的功能:数据ETL(抽取extern、转换transit和加载loading)工具、数据存储管理和大型数据集的查询与分析能力。

hive不能提供:

  1. 数据排序和查询cache
  2. 不提供在线事务处理
  3. 不提供实时的查询和记录级的更新

hive能提供:

  1. 不变的大规模数据集(网络日志)上的批量任务

hive优点:

  1. 可扩展性(基于Hadoop平台,可以自动适应机器数目和数据量的动态变化)
  2. 可延展性(结合MapReduce和用户定义的函数库)?
  3. 良好的容错和低约束的数据输入格式?

hive体系结构

hive本身建立在Hadoop的体系架构上,提供了一个SQL解析过程,从外部获取命令,通过编译器将外部命令解析成一个MapReduce可执行计划,并按照该计划生成MapReduce任务交给Hadoop集群处理
在这里插入图片描述

hive的数据存储

hive的存储是建立在Hadoop文件系统之上,hive本身没有专门的数据存储格式,也不能为数据建立索引。

hive主要包含四种数据类型:

  • 外部表(external table)
  • 分区(partition)
  • 桶(bucket)

每个表在hive中都对应一个存储目录,例如,一个表htable在HDFS中的路径为/datawarehouse/htable,其中/datawarehouse是由hive-site.xml配置文件中的${hive.metastore.warehouse.dir}指定的数据仓库的目录,所有的表数据(除外部表)都保存在这个目录中。

PS:数据仓库和大数据的区别见数据仓库与大数据的区别?,基于hive构建的是离线数据仓库,提供离线计算;实时的数据仓库:我们是用flink、storm来做;使用大数据技术来实现数据仓库的构建和管理。

分区可以看做是下的子目录

  • 表有多个分区,每个分区都对应数据库中相应分区列的一个索引,表中的一个分区对应表下的一个目录,所有分区的数据都存储在对应的目录中。例如,htable表中包含的ds和city两个分区,分别对应两个目录:对应于ds=20100301,city=Beijing的HDFS子目录为:/datawarehouse/htable/ds=20100301/city=Beijing;对应于ds=20100301,city=shanghai的HDFS子目录为:/datawarehouse/htable/ds=20100301/city=shanghai.

可以看做是分区下的文件

  • 桶对指定列进行哈希计算时,根据哈希值切分数据,每个桶对应一个文件。例如,将属性列user列分散到32个桶中,首先要对user列的值进行hash计算,对应的哈希值为0的桶写入HDFS目录为:/datawarehouse/htable/ds=20100301/city=Beijing/part-00000;对应的哈希值为10的桶写入HDFS目录为:/datawarehouse/htable/ds=20100301/city=Beijing/part-00010

外部表????
创建内部表,会将数据移动到数据仓库指向的路径中;当创建外部表,则仅记录数据所在的路径,不对数据的位置做任何改变。???
但删除表时,内部表的元数据和数据会被一起删除,而外部表只删除元数据,不删除数据。

hive的元数据存储

目前hive将元数据存储在RDBMS中,比如MySQL、Derby中。
hive三种连接Derby数据库的方式:

  • single user mode:此模式连接到一个inmemory数据库Derby,一般用于单元测试
  • multi user mode:通过网络连接到一个数据库中,是最常使用的模式
  • remote server mode:用于非Java客户端访问元数据库,在服务器端启动一个metastoreserver,客户端利用thrift协议通过metastoreserver访问元数据库。

hive安装、配置

error logs错误日志

hive使用log4j记录日志,在默认情况下,日志文件的记录等级为warn(存储紧急程度为warn及以上的错误信息),存储在 /tmp/{user.name}/hive.log 文件夹下。

若想在终端查看到日志内容,可以设置如下参数达到目的
hive -hiveconf hive.root.logger=INFO, console

用户也可以改变日志记录等级
hive -hiveconf hive.root.logger=INFO, DRFA

hive表可存储的数据类型

  1. 纯文本文件 stored as textfile
  2. 可以进行数据压缩,stored as sequencefile
  3. 还支持建立带有分区的表,可以在创建时使用participation by语句

一个表可以拥有一个或多个分区,每个分区单独存放在一个目录下。而且,表和分区都可以对某个列进行clustered by操作,将若干个列放入一个桶中。

hive DDL

创建表

删除表

DROP TABLE table_name

DROP TABLE用于删除表的元数据和数据

修改表、分区语句

ALTER TABLE语句用于改变一个已经存在的表结构,比如增加列或分区,改变serde、添加表和serde的属性或重命名表。

  1. 增加分区
    alter table add partition来对表增加分区,当分区名为字符串时加引号。
    在这里插入图片描述
    例如:
    在这里插入图片描述

  2. 删除分区
    alter table drop partition来删除分区,分区的元数据和数据将被一并删除,例如
    ALTER TABLE page_view
    DROP PARTITION (dt=‘2010-08-08’,country=‘us’)

  3. 重命名表
    alter table table_name rename to new_table_name
    这个命令可以让用户为表更名,但数据所在的位置和分区名并不改变。换而言之,老的表名并未释放,对老表的修改会改变新表的数据

  4. 改变列名字、类型、位置、注释
    alter table table_name change column
    在这里插入图片描述
    注意:列的改变智慧修改hive的元数据,而不会改变实际数据,用户应该确保元数据的定义和实际数据结构的一致性。

  5. 增加、更新列

  6. 增加表属性

  7. 增加SerDe属性

  8. 改变表文件格式和组织

创建、删除视图

  1. 创建 表视图
    在这里插入图片描述
  2. 删除表视图
    drop view view_name

创建/删除函数

  1. 创建函数
    create temporary function function_name as class_name
  2. 删除函数
    drop temporary function function_name

展示描述语句

在hive中,该语句提供一种方法对现有的数据和元数据进行查询

  1. 显示表
    show tables identifier_with_wildards
    列出所有基表与给定正则表达式相匹配的视图
  2. 显示分区
    show participations table_name
    列出给定基表中所有的现有分区,按字母排序
  3. 显示表、分区扩展
    在这里插入图片描述
  4. 显示函数
    show functions “a.*"
  5. 描述表/列
    describe table_name

数据操作

  1. 向表中加载文件
    在这里插入图片描述
  2. 将查询结果插入hive表
  3. 将查询结果写入文件系统
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值