hive学习

1.hive介绍

1.1 什么是hive

Hive是基于Hadoop的一个数据仓库工具。可以将结构化的数据文件映射为一张表,并提供完整的sql查询功能,底层是将sql语句转换为MapReduce任务进行运行。
Hive提供了一系列的工具,可以用来进行数据提取、转化、加载(ETL Extract-Transform-Load ),这是一种可以存储、查询和分析存储在 Hadoop 中的大规模数据的机制,本质上是一种大数据离线分析工具。

HQL - Hive通过类SQL的语法,来进行分布式的计算,HQL用起来和SQL非常的类似,Hive在执行的过程中会将HQL转换为MapReduce去执行,所以Hive其实是基于Hadoop的一种分布式计算框架,底层仍然是MapReduce。

1.2 hive的优缺点

优点:
学习成本低,只要会sql就能用hive
开发效率高,不需要编程,只需要写sql
模型简单,易于理解
针对海量数据的高性能查询和分析
HiveQL 灵活的可扩展性(Extendibility)
高扩展性(Scalability)和容错性
与 Hadoop 其他产品完全兼容

缺点:
不支持行级别的增删改
不支持完整的在线事务处理
本质上仍然是MR的执行,效率不算高

1.3 适用场景

Hive 构建在基于静态(离线)批处理的Hadoop 之上,Hadoop 通常都有较高的延迟并且在作业提交和调度的时候需要大量的开销。因此,Hive 并不能够在大规模数据集上实现低延迟快速的查询因此,Hive 并不适合那些需要低延迟的应用
Hive 并不提供实时的查询和基于行级的数据更新操作,最佳使用场合是大数据集的离线批处理作业,例如,网络日志分析

2.hive基本操作

2.1 查数据库

show databases;

2.2 创建park数据库

create database park;

2.3 进入park数据库

use park;

2.4 查看表

show tables;

2.5 创建stu表

create table stu (id int,name string);

2.6 创建一个和表stu结构一样的stu2表

create table stu2 like stu;

2.7 向表stu插入数据(会产生临时表)

insert into stu values(1,‘zhang’);

2.8 查看表stu数据

select * from stu;

2.9 查看表stu结构

desc stu;

2.10 删除表stu

drop table stu; #

2.11 创建stu表,并指定分割符 空格

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

2.12 通过加载文件数据到指定的表stu里(写入的数据是递增的)

load data local inpath ‘/opt/software/1.txt’ into table stu;

2.13 把stu表数据插入到stu1表中

insert overwrite table stu1 select * from stu;

2.14 将stu表中查询的数据写到本地的/opt/stu目录下

insert overwrite local directory ‘/opt/stu’ row format delimited fields terminated by ’ ’ select * from stu;

2.15 将stu表中查询的数据写到HDFS的stu目录下

insert overwrite directory ‘/stu’ row format delimited fields terminated by ’ ’ select * from stu;

2.16 将stu表中查询的数据写到stu1以及stu2两张表中

from stu insert overwrite table stu1 select * insert overwrite table stu2 select *;

2.17 为表stu重命名为stu2

alter table stu rename to stu2;

2.18 为表stu增加一个列字段age,类型为int

alter table stu add columns (age int);

exit; #退出Hive

2.19 注意点

1.创建的数据库,实际是在Hadoop的HDFS文件系统里创建一个目录节点,统一存在: /user/hive/warehouse 目录下
2.hive里,表示字符串用的是string,不用char和varchar
3.所创建的表,也是HDFS里的一个目录节点
4.HDFS不支持数据的修改和删除,因此已经插入的数据不能够再进行任何的改动
5.insert into 语句执行的实际上是追加操作
6.Hive支持查询,行级别的插入。不支持行级别的删除和修改
7.Hive的操作实际是执行一个job任务,调用的是Hadoop的MR
8.插入完数据之后,发现HDFS stu目录节点下多了一个文件,文件里存了插入的数据,因此,hive存储的数据,是通过HDFS的文件来存储的
9.Hive的工作原理实际上就是在管理hdfs上的文件,把文件里数据抽象成二维表结构,然后提供hql语句供程序员查询文件数据
10.like只复制表结构,不复制数据

3.python连接hive

Pip3.7 install sasl
Pip3.7 install thrift
Pip3.7 install thrift-sasl
Pip3.7 install PyHive
[root@python python]# yum install cyrus-sasl-plain cyrus-sasl-devel cyrus-sasl-gssapi -y
[root@python python]# cat hive.py
#!/usr/bin/python3.7 env
import sys
from pyhive import hive
conn=hive.Connection(host=‘192.168.3.10’,port=10000,username=‘uhadoop’,database=‘hive’)
cursor=conn.cursor()
cursor.execute(‘select * from poke01’)
for result in cursor.fetchall():
print(result)

4.hive分区

是指按照数据表的某列或某些列分为多个区,区从形式上可以理解为文件夹,比如我们要收集某个大型网站的日志数据,一个网站每天的日志数据存在同一张表上,由于每天会生成大量的日志,导致数据表的内容巨大,在查询时进行全表扫描耗费的资源非常多。那其实这个情况下,我们可以按照日期对数据表进行分区,不同日期的数据存放在不同的分区,在查询时只要指定分区字段的值就可以直接从该分区查找。

实战
创建分区表
hive> create table partth(createdate string,value string) partitioned by (year string) row format delimited fields terminated by ‘\t’;

给表创建两个分区
hive> alter table partth add partition(year=‘2014’)
hive> alter table partth add partition(year=‘2015’);
hive> desc partth;
createdate string
value string
year string

向分区导入数据

hive>load data local inpath ‘/root/testsh/1.txt’ into table partth partition(year=‘2015’);
#这里文件的内容有多少显示多少。
hive> select * from partth where year=‘2015’;
在这里插入图片描述
hive> select count(*) from partth where year=‘2015’;
在这里插入图片描述

5.外部表和内部表

a.内部表和外部表概述
内部表:先在hive里建一张表,然后向这个表插入数据(用insert可以插入数据,也可以通过加载外部文件方式来插入数据),这样的表称之为hive的内部表
外部表:HDFS里已经有数据了,然后,通过hive创建一张表来管理这个文件数据。则这样表称之为外部表。需要注意的是,hive外部表管理的是HDFS里的某一个目录下的文件数据
外部表创建命令:
hive> create external table stu (id int,name string) row format delimited fields terminated by ‘,’ location ‘/home/uhadoop/test/’;

b.内部表和外部表区别
对于内部表,在删除该表的时候,HDFS对应的目录节点会被删除
对于外部表,在删除该表的时候,HDFS对应的目录节点不会删除

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

老哥爱学习

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值