Hive学习整理

写在前面

吃水不忘挖井人

视频课地址:https://www.bilibili.com/video/BV1W4411B7cN?from=search&seid=3089375730995965944&spm_id_from=333.337.0.0
学习参考书籍:
书中内容需要拥有hive和hadoop的基础,通读一遍感觉还需要在实际工作中翻读,但是也算有些收获
在这里插入图片描述

Hive学习笔记

环境变量的配置

sudo vim /etc/profile.d/my_env.sh

加入信息:

export HIVE_HOME=/opt/module/hive

export PATH=$PATH:$HIVE_HOME/bin

source一下

source /etc/profile.d/my_env.sh

查看日志可用的方法tail -f xxx 查阅正在改变的日志文件

ctrl+z 可以将进程暂时挂起,fg可以切换回来

基本的查看操作

show tables;

show databases;

hive打印当前库,表头:在hive-site.xml中加入

<property>
   <name>hive.cli.print.header</name>
   <value>true</value>
</property>
<property>
   <name>hive.cli.print.current.db</name>
   <value>true</value>
</property>

show create tables xxx; 显示建表语句

基本概念

本质上是将HQL转化为MapReduce程序

Hive处理的数据存储在HDFS,分析数据的底层实现是MapReduce,执行程序运行在Yarn中

优点:

类SQL语法,快速上手

不用写MapReduce

可以处理大数据场景

支持自定义函数

缺点:

HQL表达能力有限,无法达到更高效率

效率比较低,执行延迟高,调优困难

架构

  1. 用户接口Client:CLI,JDBC(访问hive),WebUI(浏览器访问hive)
  2. 元数据Meta store:包括表名,表所属的数据库,表的拥有者,列/分区字段,表类型,表数据所在目录
  3. Hadoop:使用HDFS进行存储,使用MapReduce进行计算
  4. 驱动器Driver:
    1. 解析器SQL Parser 将SQL抽象为语法树;
    2. 编译器Physical plan 将AST编译生成逻辑执行计划;
    3. 优化器 Query Optimizer 对逻辑执行计划进行优化;
    4. 执行期Execution 把逻辑计划换为可以运行的物理计划(MR/Spark)

运行机制

在这里插入图片描述

客户提交SQL作业到HiveServer(driver驱动器),HiveServer会根据用户提交的SQL作业及数据库中现有的元数据信息生成一份可供计算引擎执行的计划(例如若干mapreduce任务)。

Hive将所有的MapReduce任务提交给Yarn,Yarn创建MapReduce任务来完成。Yarn创建的子任务会与HDFS进行交互,获取数据,最终将结果写入HDFS或本地

在这里插入图片描述

Hive和数据库比较

查询语言:类似

数据更新:hive针对数据仓库,读多写少,hive不建议对数据改写,一定要改写,需要将数据取出,然后修改,覆盖写入;数据库可以任意更改

执行延迟:hive没有索引,需要扫描整个表,开启MapReduce需要较高延迟

数据规模:Hive大,数据库小

为什么不用derby

Hive默认元数据库是derby,开启hive后就会占用元数据库,不与其他客户端共享数据,所以我们需要将hive元数据地址改为MySQL

hive参数配置

查看当前配置

hive>set;
hive>set mapred.reduce.tasks;

以下这三种方式优先级逐级递增,配置文件<命令行参数<参数声明

配置文件:

默认配置文件 hive-default.xml

自定义配置文件 hive-site.xml

命令行参数:

在hive目录下:bin/hive -hiveconf mapred.reduce.tasks=10;

这样修改的参数仅仅在本次hive中有效

参数声明方式:

hive (default)> set mapred.reduce.tasks=100;

Hive数据类型

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cVHYefsV-1644261505791)(/Users/lizhihan/Library/Application Support/typora-user-images/image-20220129200349165.png)]

hive中的String是一个可变的字符串,不能声明最多存多少个字符

在这里插入图片描述

 create table test(
	name string,
	friends array<string>,
	children map<string, int>,
	address struct<street:string, city:string>
)
row format delimited 
fields terminated by ','
collection items terminated by '_'
map keys terminated by ':'
lines terminated by '\n';

举例:

hive (default)> select friends[1],children['xiao song'],address.city from test where name="songsong";
OK
_c0 _c1 city
lili 18 beijing
Time taken: 0.076 seconds, Fetched: 1 row(s)

DDL数据定义

可以直接使用hdfs的put功能,将数据传入表中,但是要主要建表时候的分割语句

hive(default)> dfs -put ./xxx.txt /target_menu
create external table if not exists dept(
deptno int,
dname string,
loc int
)
row format delimited fields terminated by '\t';

创建数据库

CREATE DATABASE [IF NOT EXISTS] database_name
[COMMENT database_comment]
[LOCATION hdfs_path]
[WITH DBPROPERTIES (property_name=property_value, ...)];

查看数据库

显示数据库

hive> show databases like 'db_hive*';
OK
db_hive
db_hive_1

显示数据库信息

hive> desc database extended db_hive;
OK
db_hive hdfs://hadoop102:9820/user/hive/warehouse/db_hive.db
atguiguUSER

切换数据库

hive (default)> use db_hive;

删除数据库

hive> drop database if exists db_hive2;

如果想强行删除有数据的数据库

hive> drop database db_hive2 cascade;

drop删除后,external表的元数据被删除,但是hdfs中external表的数据仍然存在

创建表

CREATE [EXTERNAL] TABLE [IF NOT EXISTS] table_name
[(col_name data_type [COMMENT col_comment], ...)]
[COMMENT table_comment]
[PARTITIONED BY (col_name data_type [COMMENT col_comment], ...)]
[CLUSTERED BY (col_name, col_name, ...)
[SORTED BY (col_name [ASC|DESC], ...)] 
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值