文档章节

HIVE从入门到精通

超人学院
 超人学院
发布于 2016/08/02 15:11
字数 1629
阅读 220
收藏 0

1背景

应用于工业的商务智能收集分析所需的数据集正在大量增长,使得传统的数据仓库解决方案变得过于昂贵。Hadoop是一个流行的开源map-reduce实现,用于像yahoo, Facebook一类的公司。来存储和处理商用硬件上的大范围数据集。然而map-reduce程序模型还是处于很低级别,即需要开发者来书写客户程序,这些程序往往难于维护与重用。

用hbase做数据库,但由于hbase没有类sql查询方式,所以操作和计算数据非常不方便,于是整合hive,让hive支撑在hbase数据库层面的hql查询。hive也叫做数据仓库。

2定义

Hive是基于Hadoop(HDFS, MapReduce)的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供类SQL查询功能。

本质是将SQL转换为MapReduce程序。

3体系结构

Hive本身建立在Hadoop的体系结构上,可以将结构化的数据文件映射为一张数据库表,并提供完整的sql查询功能,可以将sql语句转换为MapReduce任务进行。并按照该计划生成MapReduce任务后交给Hadoop集群处理,Hive的体系结构如图1-1所示:

图1-1 Hive的体系结构

4Hive的数据存储

Hive的存储是建立在Hadoop文件系统之上的。Hive本身没有专门的数据存储格式,也不能为数据建立索引,用户可以自由地组织Hive中的表,只需要在创建表的时候告诉Hive数据中的列分隔符和行分隔符就可以解析数据了。

Hive中主要包含四类数据模型:表(Table)、外部表(External Table)、分区(Partition)和桶(Bucket)。

Hive中的表和数据库中的表在概念上是类似的,每个表在Hive中都有一个对应的存储目录。例如一个表pokes在HDFS中的路径为/warehouse/pokes,其中/warehouse是hive-site.xml配置文件中由${hive.metastore.warehouse.dir}指定的数据仓库的目录。

Hive中每个分区都对应数据库中相应分区列的一个索引,但是分区的组织方式和传统关系型数据库不同。在Hive中,表中的一个分区对应表下的一个目录,所有分区的数据都存储在对应的目录中。例如,图1-2中htable表中包含year、month和day三个分区,分别对应三个目录:对于year=2012,month=01,day=01的HDFS子目录为:/warehouse/htable/year=2012/ month=01/ day=01;对于year=2012,month=02,day=14的HDFS子目录为:/warehouse/htable/year=2012/ month=02/ day=14;

桶对指定列进行哈希计算时,根据哈希值切分数据,每个桶对应一个文件。例如,将图1-2中htable表中属性列Uniqueid列分散到32个桶中,首先要对Uniqueid进行hash计算,对应哈希值为0的桶写入HDFS的目录为:/warehouse/htable/year=2012/ month=01/ day=01/part-0;对应哈希值为1的桶写入HDFS的目录为:/warehouse/htable/year=2012/ month=01/ day=01/part-1。 图1-2 Hive数据存储

一、 hive功能简介

功能简介PARTITIONED BY关键字为表格分区 4.通过CLUSTERED BY关键字将PATITION划分成BUCKET 5.定义每条记录的存储格式,包括: 字段之间如何分隔; 集合字段中的元素如何分隔; Map的key值如何分隔 6.指定存储格式为Hadoop的SequenceFile

(2)查看表结构 DESCRIBE tablename; (3)修改表格 为表格添加字段 ALTER TABLE pokes ADD COLUMNS (new_col INT);

(4)删除表格 DROP TABLE tablename;

DML (1)、导入数据 导入操作,只是将文件复制到对应的表格目录中,并不会对文档的schema进行校验 从HDFS导入 LOAD DATA INPATH 'data.txt' INTO TABLE page_view PARTITION(date='2008-06-08', country='US') 从本地导入,并覆盖原数据 LOAD DATA LOCAL INPATH 'data.txt' OVERWRITE INTO TABLE page_view PARTITION(date='2008-06-08', country='US')

Hive体系结构 hiveserver hiveserver启动方式:hive --service hiveserver HiveServer支持多种连接方式:Thrift、JDBC、ODBC

metastore metastore用来存储hive的元数据信息(表格、数据库定义等),默认情况下是和hive绑定的,部署在同一个JVM中,将元数据存储到Derby中 这种方式不好的一点是没有办法为一个Hive开启多个实例(Derby在多个服务实例之间没有办法共享)

Hive提供了增强配置,可将数据库替换成MySql等关系数据库,将存储数据独立出来在多个服务实例之间共享

甚至还可以将metastore Service也独立出来,部署到其他JVM中去,在通过远程调用的方式去访问

metastore的常用配置: hive.metastore.warehouse.dir 存储表格数据的目录 hive.metastore.local 使用内嵌的metastore服务(默认为true) hive.metastore.uris 如果不使用内嵌的metastore服务,需指定远端服务的uri javax.jdo.option.ConnectionURL 所使用数据库的url javax.jdo.option.ConnectionDriverName 数据库驱动类 javax.jdo.option.ConnectionUserName 连接用户名 javax.jdo.option.ConnectionPassword 连接密码

hive数据存储格式

定义表格时如不指定Row Format和Stored As从句,hive采用如下默认配置: CREATE TABLE ... ROW FORMAT DELIMITED FIELDS TERMINATED BY '\001' COLLECTION ITEMS TERMINATED BY '\002' MAP KEYS TERMINATED BY '\003' LINES TERMINATED BY '\n' STORED AS TEXTFILE; 默认为纯文本文件TEXTFILE

如果存储的数据不是纯文本,而包含二进制的数据,可用SequenceFile和RCFile RCFile:基于列存储,类似于HBase,查询Table时,如果要检索的数据不是整条记录,而是具体的column,RCFile较比SequenceFile高效一些,只需遍历指定column对应的数据文件即可 使用RCFile,创建Table时使用如下语法: CREATE TABLE ... ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.columnar.ColumnarSerDe' STORED AS RCFILE;

除此之外,Hive还可通过正则表达式的方式指定输入数据源的格式: CREATE TABLE stations (usaf STRING, wban STRING, name STRING) ROW FORMAT SERDE 'org.apache.hadoop.hive.contrib.serde2.RegexSerDe' WITH SERDEPROPERTIES ( "input.regex" = "(\d{6}) (\d{5}) (.{29}) .*" ); 参考资料: http://www.alidata.org/archives/595 https://cwiki.apache.org/confluence/display/Hive/Home hadoop权威指南

了解更多详情请登录超人学院网站http://www.crxy.cn或者每周日晚八点半相约免费公开课 https://ke.qq.com/course/53102#term_id=100145289 具体详情请联系QQ2435014406

© 著作权归作者所有

超人学院
粉丝 114
博文 335
码字总数 388917
作品 0
昌平
CTO(技术副总裁)
私信 提问
MyBatis3.2.x从入门到精通系列

Java框架篇---Mybatis 入门 MyBatis3.2.x从入门到精通之第一章 MyBatis3.2.x从入门到精通之第二章 MyBatis3.2.x从入门到精通之第三章 MyBatis3.2.x从入门到精通之第四章 MyBatis3.2.x从入门到...

HenrySun
2016/10/07
90
0
Hadoop实战开发教程 Hadoop学习视频资料汇总

Hadoop实战开发教程 Hadoop学习视频汇总 Hadoop大数据零基础高端实战培训系列配文本挖掘项目(七大亮点、十大目标) 课程讲师:迪伦 课程分类:大数据 适合人群:初级 课时数量:230课时 用到技...

beifangbubai
2014/07/28
3.6K
4
慕课SpringMVC从入门到精通系列

SpringMVC从入门到精通之第一章 SpringMVC从入门到精通之第二章 SpringMVC从入门到精通之第三章 SpringMVC从入门到精通之第四章 SpringMVC从入门到精通之第五章 SpringMVC从入门到精通第六章...

HenrySun
2016/10/08
87
0
hadoop hive hbase 入门学习 (三)

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// hadoop 自学系列 hado......

curiousby
2015/03/12
0
0
《全栈数据之门》正在来的路上

拙作《全栈数据之门》正在来的路上…… 封面 本书以数据分析领域最热的Python语言为主要线索,介绍数据分析库Numpy、Pandas与机器学习库Scikit-Learn,使用了可视化环境Orange3来理解算法的一...

云戒
2017/03/15
0
0

没有更多内容

加载失败,请刷新页面

加载更多

同名依赖,多次引入导致的程序错误

表现: 本地测试正常,打包上线后报错找不到某个方法(缺少依赖),检测依赖发现,同名依赖有两个版本。 解决:删除一个,程序正常

避难所
23分钟前
3
0
在HTML中的下拉框中实现超连接

<!DOCTYPE html><html lang="zh-CN"><head> <meta charset="UTF-8"> <link rel="canonical" href="https://blog.csdn.net/weixin_34228617/article/details/86130280"/> ......

mickelfeng
29分钟前
3
0
Content7关闭防火墙命令

在外部访问CentOS中部署应用时,需要关闭防火墙。 关闭防火墙命令:systemctl stop firewalld.service 开启防火墙:systemctl start firewalld.service 关闭开机自启动:systemctl disable f...

无名氏的程序员
30分钟前
3
0
分布式存储原理:TiDB

浮躁的码农
42分钟前
6
0
CSS实现圆角边框的完美解决方案

css实现图片圆角,兼容所有浏览器: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 <style type= "text/css" > /*通用样式--容器宽度值*/ .s......

前端老手
57分钟前
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部