初始Hive
Hive
背景
引入原因
对存在HDFS上的文件或HBase中的表进行查询时,是要手工写一推MapReduce代码
对于统计任务,只能由懂MapReduce的程序员才能搞定
耗时耗力,更多精力没有有效的释放出来
Hive基于一个统一的查询分析层,通过SQL语句的方式对HDFS上的数据进行查询、统计和分析
Hive是什么
HIve是一个SQL解析引擎,将SQL语句转译成MR Job,然后在Hadoop平台上运行,达到快速开发的目的
Hive中的表是纯逻辑表,只是表的定义等,既表的元数据,本质就是Hadoop的目录/文件,达到了元数据和数据存储分离的目的
Hive本身不存储数据,它完全依赖HDFS和MapReduce
Hive的内容是读多写少,不支持对数据的改写和删除
Hive中没有定义专门的数据格式,由用户指定,需要指定三个属性:
列分割符
\n
行分隔符
空格
\t
\001
读取文件数据的方法
TextFile
SequenceFile(二进制)
hadoop提供的一种二进制文件,<Key,Value>形式序列化到文件中,Java Writeable接口进行序列化和反序列化
RcFile:是Hive专门推出的,一种面向列的数据格式
为什么选择Hive
WordCount
MR:一推代码
Hive:sql
select word , count(*) from (select explode(split(sentence. ' ')) word from article) t group by word
Hive中的SQL与传统SQL区别
| 项 | HQL | SQL |
|---|---|---|
| 数据存储 | HDFS、HBase | Local FS |
| 数据格式 | 用户自定义 | 系统决定 |
| 数据更新 | 不支持(把之前的数据覆盖) | 支持 |
| 索引 | 有(0.8版之后增加) | 有 |
| 执行 | MapReduce | Executor |
| 执行延迟 | 高 | 低 |
| 可扩展性 | 高(UDF,UDAF,UDTF) | 低 |
| 数据规模 | 大(数据大于TB) | 小 |
| 数据检查 | 读时模式 | 写时模式 |
UDF,UDAF,UDTF都是函数
UDF:用户自定义普通函数
直接应用于select语句,通常查询的时候,需要对字段做一些格式化处理(大小写转换)
特点:一对一
-- 添加jar包(Java开发UDF)
add jar /root/badou/hadoop/hive_test/hiveudf-1.0-SNAPSHOT.jar;
-- 创建函数
create temporary function upper_func as 'Upercase';
-- 使用该函数
select title , upper_func(title) from test.movie limit 10;
-- 查询结果
title TITLE
Toy Story (1995) TOY STORY (1995)
Jumanji (1995) JUMANJI (1995)
Grumpier Old Men (1995) GRUMPIER OLD MEN (1995)
Waiting to Exhale (1995) WAITING TO EXHALE (1995)
Father of the Bride Part II (1995) FATHER OF THE BRIDE PART II (1995)
Heat (1995) HEAT (1995)
Sabrina (1995) SABRINA (1995)
Tom and Huck (1995) TOM AND HUCK (1995)
Sudden Death (1995) SUDDEN DEATH (1995)UDAF:用户自定义聚合函数
特点:多对一
UDTF:用户自定义表生成函数
特点:一对多
读时模式、写时模式
读时模式
只有hive读的时候才会检查、解析字段和schema
优点:load数据时非常快,因为在写的过程中是不需要解析数据
写时模式
优点:读的时候会得到优化
缺点:写的慢,需要建立一些索引、压缩、数据一致性、字段检查等等
Hive体系架构
用户接口
语句转换driver
把用户的cmd进行编译、优化并且生产对应的MR任务进行执行,driver时hive的核心
数据存储
实际数据(HDFS)+ 元数据(通常metadata的存储的metastore是一个独立的关系型数据库),默认的metastore是deby:本地的数据库(单用户模式),建议使用mysql:多用户模式(本地+远程)
Hive数据模型
Table:内部表(所有的处理都由Hive完成,创建过程和加载过程,是两个独立过程,但也可以在同一个语句中完成,实际的数据会移动到数据仓库的目录中,如果数据表删除,那么实际数据也会删除)
External Table:外部表(如果数据表删除,那么实际数据也删除了)
Partition:分区
partition是辅助查询,缩小查询范围,加快数据的检索速度和对数据按照一定的规格和条件进行管理
Bucket:分桶(分库,采样)
set hive.enforce.bucketing = true; -- 开启分库功能
-- 插入数据
from test.rating
insert overwrite table rating_b
select userid , movieid , rating ;
-- 采样数据
select * from rating_b tablesample(bucket 3 out of 16 on userid) limit 20例子:select * from student tablesample(bucket 1 out 2 on id);
tablesample是抽样语句,语法:TABLESAMPLE(BUCKET x OUT OF y)
y:必须是table总bucket数的倍数或者因子。hive根据y的大小,决定抽样的比例。例如,table总共分了64份,当y=32时,抽取(64/32)2个bucket的数据,当y=128时,抽取(64/128)1/2个bucket的数据。
x:表示从哪个bucket开始抽取。例如,table总bucket数为32,tablesample(bucket 3 out of 16),表示总共抽取(32/16)2个bucket的数据,分别为第3个bucket和第(3+16)19个bucket的数据
Hive数据类型
| 类型 | 说明 |
|---|---|
| tinyint | |
| smallint | |
| int | |
| bigint | |
| float | |
| double | |
| string | |
| binary(hive0.8.0以上才可用) | |
| timestamp(hive0.8.0以上才可用) | |
| array<data_type> | |
| map<primitive_type,data_type> | |
| struct<col_name:data_type[comment col_comment],.............> | |
| uniontype<data_type,data_type,..........> |
Hive数据管理
hive表本质就是hadoop的目录/文件
hive默认表存放路径一般是在你工作目录的hive目录里面,按表名做文件夹分开,如果你有分区表的话,分区值是字文件夹,可以直接在其它的M/R job里直接应用这部分数据
| item | name | HDFS |
|---|---|---|
| Table | mobile_user | /lib/mobile_user |
| Partition | action=insight , day=20131023 | /libs/mobile_user/action=insight/day=20131023 |
| Bucket | clusted by user into 32 buckets | /libs/mobile_user/action=insight/day=20131023/part-00000 |
初始Hive的更多相关文章
- 云计算系列——HIVE1.2.1 环境搭建
hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供简单的sql查询功能,可以将sql语句转换为MapReduce任务进行运行. 其优点是学习成本低,可以通过 ...
- 【hive】——Hive初始了解
1.没有接触,不知道这个事物是什么,所以不会产生任何问题.2.接触了,但是不知道他是什么,反正我每天都在用.3.有一定的了解,不够透彻.那么hive,1.我们对它了解多少?2.它到底是什么?3.hiv ...
- Hive初始
一.Hive概念 二.为什么要是用Hive 三.Hive优缺点 四.hive架构 一.Hive概念 Hive最初是应Facebook每天产生的海量新兴社会网络数据进行管理和机器学习的需求而产生和发展的 ...
- 安装Hive(独立模式 使用mysql连接)
安装Hive(独立模式 使用mysql连接) 1.默认安装了java+hadoop 2.下载对应hadoop版本的安装包 3.解压安装包 tar zxvf apache-hive-1.2.1-bin. ...
- 一步一步安装hive
安装hive 1.下载hive-0.11.0.tar.gz,解压; 2.下载mysql-connector-java-5.1.29-bin.jar并放到hive/lib/下: 3.配置hive/con ...
- Hadoop之Hive(2)--配置Hive Metastore
Hive metastore服务以关系性数据库的方式存储Hive tables和partitions的metadata,并且提供给客户端访问这些数据的metastore service的API.下面介 ...
- hadoop学习记录(四)hadoop2.6 hive配置
一.安装mysql 1安装服务器 sudo apt-get install mysql-server 2安装mysql客户端 sudo apt-get install mysql-client sud ...
- ubuntu中为hive配置远程MYSQL database
一.安装mysql $ sudo apt-get install mysql-server 启动守护进程 $ sudo service mysql start 二.配置mysql服务与连接器 1.安装 ...
- hive UDAF源代码分析
sss /** * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license a ...
随机推荐
- (转)Eclipse导入EPF配置文件
为了美化Eclipse大家可以从 http://www.eclipsecolorthemes.org/ 下载EPF配置文件,使用方法如下 (1)从File菜单 选择Import (2) 选择Gen ...
- 在IP网络中,P、PE、CE代表意思
1.ce , pe属于mpls vpn里的概念.VPN概念中,把整个网络中的路由器分为三类:用户边缘路由器(CE).运营商边缘路由器(PE)和运营商骨干路由器(P):其中,PE充当IP VPN接入路由 ...
- accept与epoll惊群 转载
今天打开 OneNote,发现里面躺着一篇很久以前写的笔记,现在将它贴出来. 1. 什么叫惊群现象 首先,我们看看维基百科对惊群的定义: The thundering herd problem occ ...
- Next generation sequencing (NGS)二代测序数据预处理与分析
二代测序原理: 1.DNA待测文库构建. 超声波把DNA打断成小片段,一般200--500bp,两端加上不同的接头2.Flowcell.一个flowcell,8个channel,很多接头3.桥式PCR ...
- hihoCoder1159 扑克牌
一道记忆化搜索 原题链接 和着色方案很像,这里就不详细阐述,可以去我博客里的着色方案里看. 但要注意本题不一样的是同种面值的牌花色不同,所以在转移时还需要乘上同种面值的牌的个数. #include&l ...
- start()方法和run()方法有什么区别?
通过调用线程类的start()方法来启动一个线程,使线程处于就绪状态,即可以被JVM来调度执行,在调度过程中,JVM通过调用线程类的run()方法来完成实际的业务逻辑,当run()方法结束后,此线程就 ...
- angular2在双向数据绑定时[(ngModel)]无法使用的问题
angular2在双向数据绑定时[(ngModel)]无法使用,出现的错误是: Can't bind to 'ngModel' since it isn't a known property of ' ...
- 关于部署传统的Dynamic Web项目
现在大部分都是采用maven构建的项目,但是偶尔也会遇到一些较老的项目,采用的是传统的动态Web项目. 我最近碰到这样一个项目,项目用的jar包都放在了WEB-INF/lib目录下.之前的人采用的部署 ...
- Find the location of libmysqlclient.so.X file in Linux environments
I'm putting together a script that has a requirement of knowing libmysqlclient.so.[15|16|18] .so fil ...
- kbmMW均衡负载与容灾(3)(转载红鱼儿)
在kbmMW均衡负载与容灾(1)中,介绍了利用ClientTransport的OnReconnect事件,对联接的应用服务器的地址进行更换,做容灾处理.实际上,作者还给我们提供了另外一种机制,直接在C ...