IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> hive从入门到实战No.1 -> 正文阅读

[大数据]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前端收集数据,并发送数据到后台的数据收集方,完成平台用户的收集任务.此过程统称为数据上报.

????????

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2021-10-26 12:16:31  更:2021-10-26 12:17:12 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 2:53:32-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码