1、Hive是Hadoop的一个子项目

利用MapReduce编程技术,实现了部分SQL语句。而且还提供SQL的编程接口。Hive推进Hadoop在数据仓库方面的发展。

Hive是一个基于Hadoop文件系统上的数据仓库架构。

主要功能:数据的ETL(抽取,转换,加载)工具,数据存储管理,大型数据集的查询与分析能力。

Hive定义了类SQL的语言,Hive QL,它允许用户进行和SQL相似的操作。还允许使用功能mapper和reducer操作。

Hadoop是批量处理系统,任务是高延迟性的,所以在任务提交和处理过程肯定会消耗时间。即使Hive处理的数据集非常小,在执行时也会出现延迟的问题。

所以,Hive的性能就不可能很好的和传统的Oracle数据库进行比较了。Hive不提供数据排序和查询的cache功能,而且也不提供在线事务处理。

Hive的最大价值是可扩展性(基于Hadop平台,可以自动适应机器数目和数据量的动态变化),可延展性(结合MapReduce和用户定义的函数库)。

2、Hive数据存储的原理

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

3、Hive的数据模型

表Table,外部表External Table,分区Partition,桶Bucket

  1、表Table:Hive中的表和数据库中的表概念上是类似的,每个表在Hive中都有一个对应的存储目录。

  比如说一个表table,在HDFS中的路径是/datawarehouse/table,其中/datawarehouse是hive-site.xml配置文件中由

  ${hive.metastore.warehouse.dir}指定的数据仓库的目录,所有的表数据除了外部表都保存在这个目录中。

  2、分区Partition:Hive中每个分区Partition,都对应数据库中相应分区的一个索引,但是Hive的分区组织方式和传统关系型数据库不同。

  Hive中表的一个分区对应表的下一个目录,所有分区的数据都存储在对应的目录中。

  3、桶Bucket:指定列进行哈希Hash计算时,根据哈希value切分数据。每一个桶对应一个文件。比如将属性列user列分散到32个桶中,首先要对user列的值  进行Hash计算,对应哈希value的桶写进对应的HDFS的目录。

  4、外部表:指向已经在HDFS中存在的数据。它和表在元数据的组织上是相同的。如果删除一个外部表只会删除元数据,而表中的数据不会被删除。

4、Hive的元数据

由于Hive的元数据可能要面临不断地更新,修改,读取,它肯定不适合用哪个Hadoop文件系统进行存储。Hive将元数据存储在RDBMS中,比如MySQL,Derby中。Hive有三种模式可以连接到Derby数据库:

  1、Single User Mode:单用户模式,它连接到一个内存(In-Memory),一般用来单元测试。

  2、Multi User Mode:多用户模式,通过网络连接到一个数据库中,最常用

  3、Remote Server Mode:远程服务器模式,用于非java客户端访问元数据库,在服务器启动一个MetaStoreServer,客户端利用Thrift协议通过MetaStoreServer来访问元数据库。

Hive的用法的更多相关文章

  1. 第3节 hive高级用法:16、17、18

    第3节 hive高级用法:16.hive当中常用的几种数据存储格式对比:17.存储方式与压缩格式相结合:18.总结 hive当中的数据存储格式: 行式存储:textFile sequenceFile ...

  2. 第3节 hive高级用法:13、hive的函数

    4.2.Hive参数配置方式 Hive参数大全: https://cwiki.apache.org/confluence/display/Hive/Configuration+Properties 开 ...

  3. 利用SparkSQL(java版)将离线数据或实时流数据写入hive的用法及坑点

    1. 通常利用SparkSQL将离线或实时流数据的SparkRDD数据写入Hive,一般有两种方法.第一种是利用org.apache.spark.sql.types.StructType和org.ap ...

  4. Hive Joins 用法与操作

    Hive表连接的语法支持如下: join_table: table_reference JOIN table_factor [join_condition] | table_reference {LE ...

  5. 第3节 hive高级用法:15、hive的数据存储格式介绍

    hive当中的数据存储格式: 行式存储:textFile sequenceFile 都是行式存储 列式存储:orc parquet 可以使我们的数据压缩的更小,压缩的更快 数据查询的时候尽量不要用se ...

  6. 第3节 hive高级用法:14、hive的数据压缩

    六.hive的数据压缩 在实际工作当中,hive当中处理的数据,一般都需要经过压缩,前期我们在学习hadoop的时候,已经配置过hadoop的压缩,我们这里的hive也是一样的可以使用压缩来节省我们的 ...

  7. Impala 加载Hive的UDF

    Impala的UDF有两种: Native Imapal UDF:使用C++开发的,性能极高,官方性能测试比第二种高出将近10倍 Hive的UDF:是Hive中的UDF,直接加载到Impala中,优点 ...

  8. hiveservice简介

    由于实验的须要,这两天就搭了个Hive,简单记录一下: 平台:OS:Ubuntu Kylin 14.04 JAVA:Java 1.8.0_25 HADOOP:Hadoop 2.4.0 HIVE:Hiv ...

  9. hive支持in用法是从0.3.2版本后

    写hive 用in 如分时段,分类型,分平台统计点击量 select substr(createtime,12,2) hour,logtype,os_id,count(*)  from  wizad_ ...

随机推荐

  1. 清除浏览器CSS样式

    /* YUI 3.18.1 (build f7e7bcb) Copyright 2014 Yahoo! Inc. All rights reserved. Licensed under the BSD ...

  2. java中List,Set,Map用法以及区别

    List,Set,Map是否继承自Collection接口? 答:List,Set是,Map不是. Collection是最基本的集合接口,一个Collection代表一组Object,即Collec ...

  3. json扩展

    using Newtonsoft.Json.Linq; namespace Utility { public static class JsonExt { /// <summary> // ...

  4. JS快速构建数组方法

    一.常用(普通)数组的构建 1.1 直接构建 let arr = ['mock1', 'mock2', 'mock3'] 1.2 通过new Array let arr = newArray('moc ...

  5. 使用fiddler轻轻松松制造客户端接口time out的情况

    1.打开fiddler,过滤出你想要的请求 2.复制出你想要中断的请求 3.设置中断这个请求,bpu+请求,回车(详情请百度fiddle默认命令) 4.ctrl+x(清楚所有的请求),刷新页面,重新获 ...

  6. 使用openpyxl实现excel文件的读取操作

    1.环境准备 python3环境.安装openpyxl模块 2.excel文件数据准备 3.为方便直接调用,本代码直接封装成类 from openpyxl import load_workbook c ...

  7. 关于Java类和包的那些事

    *.Java文件 问题:一个.java源文件中是否可以包括多个类(不是内部类)?有什么限制? 答案:可以有多个类,但只能有一个public的类,并且public的类名必须与文件名相一致.一个文件中可以 ...

  8. ArcFace Android 人脸检测与人脸识别集成分享

    目前我们的应用内使用了 ArcFace 的人脸检测功能,其他的我们并不了解,所以这里就和大家分享一下我们的集成过程和一些使用心得集成ArcFace FD 的集成过程非常简单在 ArcFace FD 的 ...

  9. 拒绝采样 Rejection Sampling

    2018-12-09 16:40:30 一.使用Rand7()来生成Rand10() 问题描述: 问题求解: 这个问题字节跳动算法岗面试有问到类似的,有rand6,求rand8,我想了好久,最后给了一 ...

  10. 合并k个排序的列表 Merge k Sorted Lists

    2018-11-25 22:58:52 问题描述: 问题求解: 本题可以使用优先队列高效的进行求解,整体的时间复杂度为O(nlogk). public ListNode mergeKLists(Lis ...