Hadoop ->> HIVE
HIVE的由来:
最初由Facebook基于HDFS开发出来的一套数据仓库工具。
HIVE可以干什么?
HIVE可以将已经结构化的数据映射成一张表,然后可以使用HIVE语言像写T-SQL一样查询数据。而实际上,最后的HQL语句是被解析成了MapReduce任务去执行数据抽取、转换和加载工作。
HIVE的特点:
特点就是开发成本和学习成本低。只要你会写T-SQL你就会写HQL。因为如果我们要去提取HBase的文件块或者HDFS的文件来分析数据,就必须写复杂的MapReduce过程,但是如果用HIVE,它就帮你干了生成MapReduce过程这事。可以这么理解,HIVE就是一个SQL接口,可以方便我们查询HDFS的数据。百度百科上把它定义为数据仓库工具,准确一点说它是一个BI的分析工具。为什么这么讲?因为它身上的缺点决定了它只是一个BI的分析工具。缺点就是HIVE的数据不可更改,HDFS的文件是怎样它就是怎样。它只是把HDFS的数据复制到表所在的HDFS目录中,然后再用MapReduce方法操作数据。这就决定两点,首先是延迟或者无法实时查询数据。
HIVE数据管理:
可以这么理解,HIVE具备了关系数据库的许多特性,诸如像表、执行计划和T-SQL语法。当然不同的是,最后HIVE去操作的是HDFS的文件,而不是像SQL SERVER下面的页。那么也就不难理解HIVE的数据管理了:元数据存储、数据存储、用户接口和(解析器、编译器、优化器)。
元数据存储:和关系数据库中元数据一样,记录着表的结构信息和属性,比如表所在的目录,表是否为外部表,还有像分区的信息。这部分信息是存在MySQL或者Derby中的。
数据存储:和关系数据库不一样的是,HIVE的数据是没有类型的,也可以理解就是全部都是字符,栏位是通过列分隔符,行是通过行分隔符区分的。它就像ETL中加载一个平面文件,我们需要制定特定的分隔符才可以解析文件中的数据并加载到目标表中去。那说到了数据存储,HIVE中的数据存储逻辑单位又是怎样的呢?和关系数据库有什么相同点和区别的?HIVE的数据存储模型分为:Table、External Table、Partition和Bucket。可以说如果你了解SQL Server或者Oracle这样的数据库,基本上你就明白了。
Table:也就是关系数据库的表,这点没什么讲的。唯一一点需要讲的就是Table对应了HDFS下的一个目录。
External Table:和Oracle下的External Table概念是一样的。也就是说表不是来源于HDFS或者HBase的文件,数据是外部源的。这里我还没学到。估计也是和Oracle一样支持像Excel这种外部文件。
Partition和Bucket:为什么把两个一块讲呢?因为他们有相似的地方,就是通过一种维度把Table的数据分割开来存储。Partition和SQL Server下的Partition是相似的,SQL Server下每个Partition对应着一个B-tree,而这里每个Partition则对应着一个目录。而Bucket则和Oracle的Hash分区相似,就是将表的数据进行水平拆分,这点Teradata这样的分布式关系数据库也是利用了Hash算法对数据进行均匀拆分。Partition和Bucket都是拆分数据,不同的是Partition属于range拆分或者说不均匀拆分,拆分后的数据分区数量取决于选定的栏位的数据分布,容易出现数据分布不均匀。而Bucket则是均匀拆分的特点,而且数据还是离散分布的,不会像Partition那样是聚集的。
用户接口:Web界面,数据库连接接口这些都归为用户接口;
解析器、编译器、优化器:解析器对客户端提交的HQL语句进行语法检查、语义检查;编译器把HQL编译后转换成MapReduce任务;优化器寻求最优计划,比如是否要并行之类。
Hadoop ->> HIVE的更多相关文章
- Hive创建表格报【Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. MetaException】引发的血案
在成功启动Hive之后感慨这次终于没有出现Bug了,满怀信心地打了长长的创建表格的命令,结果现实再一次给了我一棒,报了以下的错误Error, return code 1 from org.apache ...
- FineReport中hadoop,hive数据库连接解决方案
1. 描述 Hadoop是个很流行的分布式计算解决方案,Hive是基于hadoop的数据分析工具.一般来说我们对Hive的操作都是通过cli来进行,也就是Linux的控制台,但是,这样做本质上是每个连 ...
- hive 使用where条件报错 java.lang.NoSuchMethodError: org.apache.hadoop.hive.ql.ppd.ExprWalkerInfo.getConvertedNode
hadoop 版本 2.6.0 hive版本 1.1.1 错误: java.lang.NoSuchMethodError: org.apache.hadoop.hive.ql.ppd.ExprWalk ...
- hadoop+hive使用中遇到的问题汇总
问题排查方式 一般的错误,查看错误输出,按照关键字google 异常错误(如namenode.datanode莫名其妙挂了):查看hadoop($HADOOP_HOME/logs)或hive日志 h ...
- Hadoop Hive基础sql语法
目录 Hive 是基于Hadoop 构建的一套数据仓库分析系统,它提供了丰富的SQL查询方式来分析存储在Hadoop 分布式文件系统中的数据,可以将结构 化的数据文件映射为一张数据库表,并提供完整的 ...
- Sqoop是一款开源的工具,主要用于在HADOOP(Hive)与传统的数据库(mysql、oracle...)间进行数据的传递
http://niuzhenxin.iteye.com/blog/1706203 Sqoop是一款开源的工具,主要用于在HADOOP(Hive)与传统的数据库(mysql.postgresql.. ...
- Hadoop Hive与Hbase整合+thrift
Hadoop Hive与Hbase整合+thrift 1. 简介 Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供完整的sql查询功能,可以将sql语句 ...
- Hadoop Hive sql语法详解
Hadoop Hive sql语法详解 Hive 是基于Hadoop 构建的一套数据仓库分析系统,它提供了丰富的SQL查询方式来分析存储在Hadoop 分布式文件系统中的数据,可以将结构 化的数据文件 ...
- Hadoop Hive与Hbase关系 整合
用hbase做数据库,但因为hbase没有类sql查询方式,所以操作和计算数据很不方便,于是整合hive,让hive支撑在hbase数据库层面 的 hql查询.hive也即 做数据仓库 1. 基于Ha ...
- Hadoop Hive sql 语法详细解释
Hive 是基于Hadoop 构建的一套数据仓库分析系统.它提供了丰富的SQL查询方式来分析存储在Hadoop 分布式文件系统中的数据,能够将结构 化的数据文件映射为一张数据库表,并提供完整的SQL查 ...
随机推荐
- 【算法笔记】B1004 成绩排名
1004 成绩排名 (20 分) 读入 n(>0)名学生的姓名.学号.成绩,分别输出成绩最高和成绩最低学生的姓名和学号. 输入格式: 每个测试输入包含 1 个测试用例,格式为 第 1 行:正整数 ...
- 报表中经常遇到的一个头疼的问题是需要自动选择过去一个月的数据作为当前报表输出。网上查询了一些.NET 的C#例子,发现都实现的比较复杂
报表中经常遇到的一个头疼的问题是需要自动选择过去一个月的数据作为当前报表输出.网上查询了一些.NET 的C#例子,发现都实现的比较复杂,其实这个问题可以很简单的通过.NET的DateTime函数来实现 ...
- 选择排序 Selection Sort
选择排序 Selection Sort 1)在数组中找最小的数与第一个位置上的数交换: 2)找第二小的数与第二个位置上的数交换: 3)以此类推 template<typename T> / ...
- 小数据池 is 和 == ,以及再谈编码
一.小数据池 1.id() 小数据池针对的是:int ,str,boo(都是不可变的数据类型) (1)如果是在py文件中写的字符串,几乎都是缓存的 (2)在黑窗口里写的机会都不会缓存 (3)不同的解释 ...
- ubuntu18.04 与 python
Ubuntu安装pycharm专业破解版方法 首先我们要下载pycharm的安装包, 地址为https://www.jetbrains.com/pycharm/download/#section=li ...
- 智能手表ticwatch穿戴体验
前言 可穿戴设备近几年越来越火,最开始是谷歌眼睛.手环,再到手表.VR眼镜,相信未来几年这片领域依旧火热~ 自从谷歌发布Android Wear.苹果发布Apple Watch之后,智能手表的战役就正 ...
- 《HTTP权威指南》之HTTP连接管理及对TCP性能的考虑
在上一篇博客中(<HTTP权威指南>之HTTP相关概念详解)我们简单对HTTP相关的基本概念做了一些简单的了解,但未对HTTP连接管理的内容做一些详细的介绍.本篇博客我们就一起来看一下HT ...
- laravel框架的rabbitmq使用示例[多队列封装]
RabbitMQ是实现了高级消息队列协议(AMQP)的开源消息代理软件(亦称面向消息的中间件).RabbitMQ服务器是用Erlang语言编写的,而集群和故障转移是构建在开放电信平台框架上的.所有主要 ...
- java中的输入输出方法
输入 import java.util.Scanner; public class EnterTest { public static void main(String[] args) { //主方法 ...
- js中函数带不带var的本质区别是什么
本质区别是:带var的是定义,属于statement:不带var的是赋值,属于expression.不带var时,解释器认为变量已经定义过了,会在函数中找相应的定义,如果找不到,就会认为变量是在外一层 ...