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查 ...
随机推荐
- 洛谷 P1272 重建道路
题目链接 题解 树形dp \(f_{i, j}\)表示以\(i\)为根的子树切出联通块大小为\(j\)的最小答案 显然\(f[i][1]\)为与\(i\)连的边数 设\(v\)是\(u\)的儿子 那么 ...
- vue-awesome-swiper 的 使用
1.确保 package.json文件中有 "vue-awesome-swiper": "^3.1.3",没有的话install下 2.在main.js配置 ...
- HDU - 1520 树形DP入门题
写了两种DP,第一种是按照自己习惯来xjb敲的,第二种参考别人 熟悉一下树形DP的套路 dp[i][]是维护i及以下的关系最优值的,所以我觉得两次DP记忆搜索之间不清-1应该是正确的(也就做了一次加法 ...
- date +%F时间日期
date +%Y -%m-%d 年月日 date +%T 显示时间 HMS几点几分几秒 -%H 为小时 %w 周几 date -d “-1day” 一天之前 date ...
- java多线程-synchronized
一.线程安全问题 多线程操作各自线程创建的资源的时候,不存在线程安全问题.但多线程操作同一个资源的时候就会出现线程安全问题.下例为两个线程操作同一个name资源时发生的问题. class TestSy ...
- SQL Server Reporting Service(SSRS) 第七篇 常见错误汇总
1. The current action cannot be completed. The user data source credentials do not meet the requirem ...
- unity文件 PlayerPrefs.SetInt 保存 And PlayerPrefs.GetInt读取
unity文件保存读取PlayerPrefs.SetInt And PlayerPrefs.GetInt using UnityEngine; using System.Collections; ...
- Java中forEach, 用来遍历数组
这里的for是Java中forEach, 用来遍历数组的.for(int i : d) 就是遍历int型数组d的 每一次访问数组d的时候读取的数据放入int型的i中.和for(int i=0;i< ...
- Fastjson解析多级泛型的几种方式—使用class文件来解析多级泛型
Fastjson解析多级泛型 前言 现在网上大多数是使用TypeReference 方式来解析JSON数据,这里我提供另外一种方式来解析,使用类文件进行解析,两种方式我都会给出实际代码 实例 Type ...
- 游戏源码--Unity开源Moba游戏-服务器-客户端完整V1.0
http://www.manew.com/thread-111658-1-1.html