hive从入门到实战No.1

Hive架构设计原理

一. Hive基本使用

        直接输入hive回车,进入hive cli

        常用命令使用

                查看数据库:show databases;

                创建数据库:create database tianliangedu;

                选择数据库:use tianliangedu;

                查看某个数据库下的所有表:show tables;

                创建表:create table userinfo(id int,username string);

                向表中插入数据:insert into userinfor values(1,'sss')

                查询数据表中的数据:select * from...

                删除一个表: drop table 表名称

                上述使用方法与mysql类似

                删除hive cli 会话:老版本:exit,新版本:!exit

        使用总结:简单,面向数据和业务编程

二.Hive架构设计

        

 

特别说明:hive2.2以后版本变化较大,去掉了HWI模块,HiveCLI模式也直接采用了beeline链接。

三. Hive运行流程详解

Hive基础概念

        1.Hive数据模型

 

        2.数据类型

         

 数值型

类型

说明

TINYINT

1-byte signed integer

from -128 to 127

SMALLINT

2-byte signed integer

from -32,768 to 32,767

INT

INTEGER

4-byte signed integer

from -2,147,483,648 to 2,147,483,647

BIGINT

8-byte signed integer

from -9,223,372,036,854,775,808 to 9,223,372,036,854,775,807

FLOAT

4-byte single precision floating point number

DOUBLE

8-byte double precision floating point number

PRECISION 

DECIMAL

Decimal datatype was introduced in Hive0.11.0

(HIVE-2693) and revised in Hive 0.13.0 (HIVE-3976)

日期类型

类型

说明

TIMESTAMP

UNIX时间戳和可选的纳秒精度

DATE

描述特定的年/月/日,格式为YYYY-MM-DD

字符串

类型

说明

string

最常用的字符串格式,等同于java String

varchar

变长字符串,hive用的较多,最长为65535

char

定长字符串,比varchar更多一些,一般不要超过255个字符

 布尔类型

类型

说明

boolean

等同于java的boolean用的很少

字节数组

类型

说明

binary

字节数组类型,可以存储任意类型的数据用的很少

 复杂(集合)数据类型

数据类型

描述

字面语法示例

STRUCT

和C语言中的struct或者对象类似,都可以通过符号访问元素内容。例如,如果某个列的数据类型是STRUCT{first STRING, lastdt STRING},那么第1个元素可以通过字段名.first来引用

struct(

‘John’,

‘Doe’)

MAP

MAP是一组键-值对元组集合,使用数组表示法(例如[‘key’])可以访问元素。例如,如果某个列的数据类型是MAP,其中键->值对是’first’->’John’和’last’->’Doe’,那么可以通过字段名[‘last’]获取值’Doe’

map(‘first’, ‘John’,

‘last’,

‘Doe’)

ARRAY

数组是一组具有相同类型的变量的集合。这些变量称为数组的元素,每个数组元素都有一个编号,编号从零开始。例如,数组值为[‘John’, ‘Doe’],那么第1个元素可以通过数组名[0]进行引用

ARRAY(

‘John’,

‘Doe’)

3.Hive数据文件格式和压缩格式

        

  • 文件格式

文件格式按面向的存储形式不同,分为面向行和面向列两大类文件格式。

面向行/列类型

类型名称

是否可切割计算

优点

缺点

适用场景

面向行

文本文件格式(.txt)

可以

查看、编辑简单

无压缩占空间大、传输压力大、数据解析开销大

学习练习使用

面向行

SequenceFile序列文件格式(.seq)

可以

自支持、二进制kv存储、支持行和块压缩

本地查看不方便:小文件合并成kv结构后不易查看内部数据

生产环境使用、map输出的默认文件格式

面向列

rcfile文件格式(.rc)

可以

数据加载快、查询快、空间利用率高、高负载能力

每一项都不是最高

学习、生产均可

面向列

orcfile文件格式(.orc)

可以

兼具rcfile优点、进一步提高了读取、存储效率、新数据类型的支持

每一项都不是最高

学习、生产均可

  • 压缩格式 

压缩格式按其可切分独立性,分成可切分和不可切分两种。

可切分性

类型名称

是否原生支持

优点

缺点

适用场景

可切分

lzo(.lzo)

压缩/解压速度快

合理的压缩率

压缩率比gzip低

不原生、需要native安装

单个文件越大,lzo优点越越明显。压缩完成后>=200M为宜

可切分

bzip2(.bz2)

高压缩率超过gzip

原生支持、不需要native安装、用linux bzip可解压操作

压缩/解压速率慢

处理速度要求不高、要求高压缩率(冷数据处理经常使用)

不可切分

gzip(.gz)

压缩/解压速度快

原生/native都支持使用方便

不可切分、对CPU要求较高

压缩完成后<=130M的文件适宜

不可切分

snappy(.snappy)

高速压缩/解压速度

合理的压缩率

压缩率比gzip低

不原生、需要native安装

适合作为map->reduce或是job数据流的中间数据传输格式

 4.数据操作分类

操作分类

具体操作

sql备注

DDL

•建表

•删除表

•修改表结构

•创建/删除视图

•创建数据库 

•显示命令

Create/Drop/Alter Database

Create/Drop/Truncate Table

Alter Table/Partition/Column

Create/Drop/Alter View

Create/Drop Index

Create/Drop Function

Show functions;

Describe function;

DML

•数据插入(insert,load)

load data...into table

insert overwrite table 

DQL

•数据查询(select)

 四.HiveSQL

        1.DDL

                external: 创建内部表还是外部表,此为内外表的唯一区分关键字。

  • comment col_comment: 给字段添加注释
  • comment table_comment: 给表本身添加注释
  • partitioned by: 按哪些字段分区,可以是一个,也可以是多个
  • clustered by col_name... into num_buckets BUCKETS:按哪几个字段做hash后分桶存储
  • row format:用于设定行、列、集合的分隔符等设置
  • stored as : 用于指定存储的文件类型,如text,rcfile等
  • location : 设定该表存储的hdfs目录,如果不手动设定,则采用hive默认的存储路径

       

  • 查看已存在表的详细信息

show create table或者desc tablename/desc formatted tablename

  • 更改表

 

  • 增加字段

 

  • 创建视图(虚表)

视图:本身不存储实际数据,只存储表关系,使用时再去通过关系查找数据。

查看所有视图:show views;

  • 删除视图

 

         2.DML

(1)加载数据脚本

        LOAD DATA [LOCAL] INPATH 'filepath' [OVERWRITE] INTO TABLE tablename [PARTITION         (partcol1=val1, partcol2=val2 ...)]

  (2)加载本地数据文件

创建一个文本文件存储的表,并以"\t"作为分隔符,方便构造和上传数据

 CREATE  TABLE student(

id string comment '学号',

 username string comment '姓名',

classid int comment '班级id',

classname string comment '班级名称'

)

comment '学生信息主表'

partitioned by (come_date string comment '按入学年份分区')

ROW FORMAT DELIMITED

FIELDS TERMINATED BY '\t'

LINES TERMINATED BY '\n'  

STORED AS  textfile;

将本地数据文件加载到表中                                                                                                  LOAD DATA local INPATH './student.txt' OVERWRITE INTO TABLE student PARTITION (come_date=20170903);

通过SELECT查看表中是否加载了数据

 (3) 加载HDFS数据文件

将之前的本地文件上传至自己的hdfs目录中

hdfs dfs -copyFromLocal student.txt /tmp/tianliangedu/input_student_info/

加载HDFS数据文件的脚本

LOAD DATA INPATH '/tmp/tianliangedu/input_student_info/student.txt' OVERWRITE INTO TABLE student PARTITION (come_date=20170904);

通过SELECT查看表中是否加载了数据

SELECT * FROM STUDENT;

(4)将查询结果插入到数据表中

脚本模板

INSERT OVERWRITE TABLE tablename1

[PARTITION (partcol1=val1, partcol2=val2 ...)]

select_statement1 FROM from_statement

  • 样例

insert overwrite table student partition(come_date='20170904')

select

id,username,classid,classname

from student

where come_date='20170903';

通过SELECT查看表中是否插入了数据

(5)多插入模式(一次查询多次插入)

  • 模板

FROM from_statement

INSERT OVERWRITE TABLE tablename1 [PARTITION (partcol=val)] select_statement1  

[INSERT OVERWRITE TABLE tablename2 [PARTITION ...] select_statement2

...

  • 样例

from student

insert overwrite table student partition(come_date='20170905') select id,username,classid,classname where come_date='20170904'

insert overwrite table student partition(come_date='20170906') select id,username,classid,classname where come_date='20170904'

insert overwrite table student partition(come_date='20170907') select id,username,classid,classname where come_date='20170904'


 

面向分析和面向事务的处理

        面向分析要准,但不要快

        面向事务要快

DAG

        Directed Acycle Graph,有向无环图

Yarn-tez 模式

        为什么抛弃掉mr?

                因为mr一个是计算效率太慢,一个是启动时间太慢

        为什么选择了tez

                第一是优化了计算效率,DAG效率优化

                第二是优化了应用的启动响应时间

                        使用代理机制优化

        编程抽象的等级划分

                面向二进制机器码编程

                面向机器指令编程-汇编

                面向过程-C语言

                面向对象-Java语言

                面向函数-函数式编程-js、scala、r语言

                面向数据编程-SQL

                面向自然语言编程-说人话就可以实现编程

        嵌入式数据库

                随着具体的代码应用而伴随运行的组件,即称为嵌入式组件

                其中嵌入式数据库是最典型的应用之一

                        Derby

                        Sqllite

                        Berkerly db

        Varchar和char对比

                相同点

                        多是存储数据的类型

                差异点

                        Varchar是变长

                                节省存储空间,不利于计算

                                用时间换空间

                        Char是定长

                                浪费了存储空间,节省了计算时间

                                用空间换时间

        请介绍一下hive的内外表

                概念说明

                        hive将表的分类共2类,即内外表

                        以元数据和实体数据的操作权限作为分类依据

                特点特征

                        内表:元数据和实体数据全归hive管理,一删全删

                        外表:元数据归hive管理,实体数据不归hive管理,而是归hdfs,删表的话,只会删除                                     Hive元数据,不会改变实体数据

                应用场景

                        数据表生成时,如果时hive内部自生成的,而是外部导入,则设置外表

                代码实现

                        Create [external] table......

        请介绍一下hive当中的试图view

                概念说明

                        hive当中对数据表数据即关系的一种抽象,称为视图.

                特点特征

                        虚表,只存关系,不存实际的数据.但是通过他可以查询出来对应的数据

                应用场景

                        解耦

                                解真实用户和各个不同关系的藕

                                将复杂的表关系抽象出来,形成一个虚表,相当于将表关系进一步抽象

                                当这个复杂表关系需要反复利用时,应该使用视图

                代码实现

                        Create view ......       

        请介绍一下hive的表区分作用

                概念介绍

                        表结构当中为了提升查询效率而设计的一个水平切分数据的虚字段,成为分区

                特点特征

                        虚字段的设计,并不占用表结构对应的实体数据

                        其每个分区值对应的hive表当中hdfs存储的一个物理目录

                应用场景

                        数据量较大、且具备明显的水平可切分字段,均可使用

                                比如日期、位置、国家等区域性 明显的可枚举的顿号品牌名称等可枚举字段

                代码实现

                        Create table ......partitioned by col comment '' ......

        数据上报

\                各平台型公司或是公司自有线上平台,会将访问或是用户在该平台上的各项用户行业通过web前端收集数据,并发送数据到后台的数据收集方,完成平台用户的收集任务.此过程统称为数据上报.

        

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值