[Hive]Hive架构及常规操作
Hive架构

- 如图中所示,Hive通过给用户提供的一系列交互接口,接收到用户的指令(SQL),使用自己的Driver,结合元数据(MetaStore),将这些指令翻译成MapReduce,提交到Hadoop中执行,最后,将执行返回的结果输出到用户交互接口。
- 1)用户接口:Client CLI(hive shell)、JDBC/ODBC(java访问hive)、WEBUI(浏览器访问hive)
- 2)元数据:Metastore 元数据包括:表名、表所属的数据库(默认是default)、表的拥有者、列/分区字段、表的类型(是否是外部表)、表的数据所在目录等; 默认存储在自带的derby数据库中,推荐使用MySQL存储Metastore
- 3)Hadoop 使用HDFS进行存储,使用MapReduce进行计算。
- 4)驱动器:Driver
- (1)解析器(SQL Parser):将SQL字符串转换成抽象语法树AST,这一步一般都用第三方工具库完成,比如antlr;对AST进行语法分析,比如表是否存在、字段是否存在、SQL语义是否有误。
- (2)编译器(Physical Plan):将AST编译生成逻辑执行计划。
- (3)优化器(Query Optimizer):对逻辑执行计划进行优化。
- (4)执行器(Execution):把逻辑执行计划转换成可以运行的物理计划。
创建表及将本地数据导入到HDFS
创建内部表
--创建内部表
CREATE TABLE article(sentence STRING )
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\n';
--从本地导入数据:相当于将path数据hadoop fs -put /hive/warehouse/badou.db/
LOAD DATA LOCAL INPATH '/home/badou/mr/code/The_Man_of_Property.txt'
INTO TABLE article;
--查询数据
select * from article limit 3;
创建外部表
--外部表
-- hadoop fd -mkdir /data/ext
-- hadoop fd -cp /data/The_Man_of_Property.txt /data/ext
CREATE EXTERNAL TABLE article2 (sentence STRING)
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\n'
STORED AS TEXTFILE
LOCATION '/data/ext';
在hive/warehouse/badou.db下没有外部表文件,但是可以在表中查询到数据
Wordcount用hive写法
SELECT word, count(1) as cnt
from (
SELECT
explode(split(sentence, ' '))
as word from article
) t
GROUP BY word
LIMIT 100;
【注】运行hive前需要先将Hadoop及MySQL启动
爆款商品有哪些/top N 出现次数最多的商品
SELECT word, count(1) as cnt
from (
SELECT
explode(split(sentence, ' '))
as word from article
) t
GROUP BY word
ORDER BY cnt DESC
LIMIT 100;
【注】ORDER BY 只会产生一个reduce任务
内部表&外部表
内部表:数据需要存储在Hive目录对应的文件夹下,即使HDFS上在其他路径下已经存在 外部表:可以直接调用HDFS上的数据
| 内部表 | 外部表 |
|---|---|
| 数据需要存储在Hive目录对应的文件夹下,即使HDFS上在其他路径下已经存在 | 可以直接调用HDFS上的数据 |
| create tabel name | create external table location 'hdfs_path' name(必须是文件夹路径) |
分区表partition
- 建表
CREATE TABLE art_dt(sentence STRING)
PARTITIONED BY(dt STRING)
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\n';
- 从hive表中的数据插入到新表(分区表)中
--从hive表中的数据插入到新表(分区表)中
INSERT OVERWRITE TABLE art_dt PARTITION(dt='20180924')
SELECT * FROM article LIMIT 100;
INSERT OVERWRITE TABLE art_dt PARTITION(dt='20180925')
SELECT * FROM article LIMIT 100;
-- [root@master ~]# hadoop fs -ls /user/hive/warehouse/badou.db/art_dt
-- Found 1 items
-- 2018-09-24 08:45 /user/hive/warehouse/badou.db/art_dt/dt=20180924
- 查看分区表列表
--查看分区表列表
SHOW PARTITIONS art_dt;
SELECT * FROM art_dt WHERE dt
BETWEEN '20180924' AND '20180925' LIMIT 10;
- 业务应用场景--Partition 实际工作中如何产生,用在什么数据上?
每天都会产生用户浏览,点击,收藏,购买的记录。 按照天的方式去存储数据,按天做partition
app m pc
- logs/dt=20180924/type=app
- logs/dt=20180924/type=m
- logs/dt=20180924/type=pc
- 数据库中数据有用户的属性, 年龄, 性别, blog等 每天有新增的用户,修改信息 dt=20180924 和dt=20180924会造成大量信息冗余。这个时候应该用 OVERWRITE
- overwrite++ 7 每天做overwrite dt = 20180922,这天中的数据包含这天之前的所有用户信息.
当天之前所有的全量数据。 存7个分区,冗余七份,防止丢失数据。
分桶表Bucket
- 创建总表udata
-- 创建表udata
CREATE TABLE udata(
user_id STRING ,
item_id STRING ,
rating STRING ,
`timestamp` STRING
)
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'
;
--导入数据
LOAD DATA LOCAL INPATH '/home/badou/data/u.data'
INTO TABLE udata;
--设置显示字段名(显示表头)
SET hive.cli.print.header=true;
select * from udata limit 50;
- 创建分桶表
-- 创建分桶表
CREATE TABLE bucket_users
(
user_id STRING ,
item_id STRING ,
rating string,
`timestamp` string
)
CLUSTERED BY(user_id)
INTO 4 BUCKETS;
- 设置bucket数量,否则不会生成4个分桶
SET hive.enforce.bucketing = true;
- 插入数据,将之前建立好的udata表中数据插入到4个分桶中,此时会产生4个reduce
-- 插入数据,将之前建立好的udata表中数据插入到4个分桶中,此时会产生4个reduce
INSERT OVERWRITE TABLE bucket_users
SELECT
cast(user_id as INT) as user_id,
item_id,
rating,
`timestamp`
from udata;
[Hive]Hive架构及常规操作的更多相关文章
- Hive的架构(二)
02 Hive的架构 1.Hive的架构图 2.Hive的服务(角色) 1.用户访问接口 CLI(Command Line Interface):用户可以使用Hive自带的命令行接口执行Hive ...
- Hive的基本知识与操作
Hive的基本知识与操作 目录 Hive的基本知识与操作 Hive的基本概念 为什么使用Hive? Hive的特点: Hive的优缺点: Hive应用场景 Hive架构 Client Metastor ...
- Hive技术架构
一.Hive概念 Facebook为了解决海量日志数据的分析而开发了Hive,Hive是一种用SQL语句来读写.管理存储在分布式存储设备上的大数据集的数据仓库框架. 1. 数据是存储在HDFS上的,H ...
- 深入浅出Hive企业级架构优化、Hive Sql优化、压缩和分布式缓存(企业Hadoop应用核心产品)
一.本课程是怎么样的一门课程(全面介绍) 1.1.课程的背景 作为企业Hadoop应用的核心产品,Hive承载着FaceBook.淘宝等大佬 95%以上的离线统计,很多企业里的离线统 ...
- 征服 Redis + Jedis + Spring (一)—— 配置&常规操作(GET SET DEL)
有日子没写博客了,真的是忙得要疯掉. 完成项目基础架构搭建工作,解决了核心技术问题,接着需要快速的调研下基于Spring框架下的Redis操作. 相关链接: 征服 Redis 征服 Redis + J ...
- [Hive] - Hive参数含义详解
hive中参数分为三类,第一种system环境变量信息,是系统环境变量信息:第二种是env环境变量信息,是当前用户环境变量信息:第三种是hive参数变量信息,是由hive-site.xml文件定义的以 ...
- Linux 下的 netfilter 认识与常规操作
Linux 下的 netfilter 认识与常规操作 前言 博客写到今天,1年7个月.可是包含所有写作经历,这个时间线可以达到三年. 上次更新了一篇 "镇站之宝" ,也是本站阅读量 ...
- postgres 常规操作杂记
分布式:1.扩容不方便(数据重分布)2.分布键变更很麻烦3.分布键选择(架构设计)谨慎4.跨库join性能差5.分布式事务性能差6.sql限制多,功能确实多7.应用改造成本巨大8.全局一致性时间点恢复 ...
- FTP服务器常规操作
导读 FTP协议是Internet文件传输的基础,它是由一系列规格说明文档组成,目标是提高文件的共享性,提供非直接使用远程计算机,使存储介质对用户透明和可靠高效地传送数据.下面就由我给大家简单介绍一下 ...
随机推荐
- Grafana 6.4 正式发布!
原文链接:Grafana 6.4 正式发布! 2019 年 10 月 2 日,也就是国内小伙伴们的放假期间,Grafana 实验室正式发布了 Grafana 6.4 版本.这个版本主要围绕数据模型和指 ...
- 快学Scala 第二十一课 (初始化trait的抽象字段)
初始化trait的抽象字段: trait Logged { println("Logged constructor") def log(msg: String){ println( ...
- 使用FastReport报表工具生成报表PDF文档
在我们开发某个系统的时候,客户总会提出一些特定的报表需求,固定的报表格式符合他们的业务处理需要,也贴合他们的工作场景,因此我们尽可能做出符合他们实际需要的报表,这样我们的系统会得到更好的认同感.本篇随 ...
- 算法学习之剑指offer(六)
题目1 题目描述 输入n个整数,找出其中最小的K个数.例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,. import java.util.*; public cl ...
- 「3D建模」ZBrush如何雕刻头部
加载项目开始 1. 如果未显示灯箱,请按逗号(,)或灯箱按钮. 2. 单击项目选项卡,然后双击DefaultSphere项目.它将被加载到ZBrush中. 3. 在工具>几何子选项板中,将SDi ...
- VMware虚拟机的三种网络管理模式
VMware提供了三种网络工作模式:Bridged(桥接模式).NAT(网络地址转换模式).Host-Only(仅主机模式). 打开VM虚拟机,在选项栏“编辑”->“虚拟网络编辑器”中看到V ...
- WPF写圆形头像,带消息提醒图标
<DockPanel VerticalAlignment="Top" HorizontalAlignment="Stretch" Margin=" ...
- django html母版
08.12自我总结 django母版 一.母版写的格式 在需要导入的地方写 {% block 名字定义 %} {% endblock %} 二.导入模板 {% extends 'FUCK.html' ...
- angular之跨域
一.什么是跨域? 跨域是指一个域下的文档或者脚本去请求另一个域下的资源.(广义) 广义的跨域: 1.资源跳转:链接跳转.重定向.表单提交. 2.资源嵌入:<link>.<script ...
- OD 逆向工具常用快捷键
F2:设置断点,只要在光标定位的位置(上图中灰色条)按F2键即可,再按一次F2键则会删除断点. F8:单步步过.每按一次这个键执行一条反汇编窗口中的一条指令,遇到 CALL 等子程序不进入其代码. F ...