㈠ hive的数据存储
首先,Hive 没有专门的数据存储格式,也没有为数据建立索引,用户可以非常自由的组织 Hive 中的表,只需要在创建表的时候告诉 Hive 数据中的列分隔符和行分隔符,Hive 就可以解析数据。
其次,Hive 中所有的数据都存储在 HDFS 中,Hive 中包含以下数据模型:表(Table),外部表(External Table),分区(Partition),桶(Bucket)。
Hive 中的 Table 和数据库中的 Table 在概念上是类似的,每一个 Table 在 Hive 中都有一个相应的目录存储数据。例如,一个表 pvs,它在 HDFS 中的路径为:/wh/pvs,其中,wh 是在 hive-site.xml 中由 ${hive.metastore.warehouse.dir} 指定的数据仓库的目录,所有的 Table 数据(不包括 External Table)都保存在这个目录中。
Partition 对应于数据库中的 Partition 列的密集索引,但是 Hive 中 Partition 的组织方式和数据库中的很不相同。在 Hive 中,表中的一个 Partition 对应于表下的一个目录,所有的 Partition 的数据都存储在对应的目录中。例如:pvs 表中包含 ds 和 city 两个 Partition,则对应于 ds = 20090801, ctry = US 的 HDFS 子目录为:/wh/pvs/ds=20090801/ctry=US;对应于 ds = 20090801, ctry = CA 的 HDFS 子目录为;/wh/pvs/ds=20090801/ctry=CA
Buckets 对指定列计算 hash,根据 hash 值切分数据,目的是为了并行,每一个 Bucket 对应一个文件。将 user 列分散至 32 个 bucket,首先对 user 列的值计算 hash,对应 hash 值为 0 的 HDFS 目录为:/wh/pvs/ds=20090801/ctry=US/part-00000;hash 值为 20 的 HDFS 目录为:/wh/pvs/ds=20090801/ctry=US/part-00020
External Table 指向已经在 HDFS 中存在的数据,可以创建 Partition。它和 Table 在元数据的组织上是相同的,而实际数据的存储则有较大的差异。
Table 的创建过程和数据加载过程(这两个过程可以在同一个语句中完成),在加载数据的过程中,实际数据会被移动到数据仓库目录中;之后对数据对访问将会直接在数据仓库目录中完成。删除表时,表中的数据和元数据将会被同时删除。 External Table 只有一个过程,加载数据和创建表同时完成(CREATE EXTERNAL TABLE ……LOCATION),实际数据是存储在 LOCATION 后面指定的 HDFS 路径中,并不会移动到数据仓库目录中。当删除一个 External Table 时,仅删除元数据,表中的数据不会真正被删除。
㈡ Hive 和数据库的异同
1.
查询语言。由于 SQL 被广泛的应用在数据仓库中,因此,专门针对 Hive 的特性设计了类 SQL 的查询语言 HQL。熟悉 SQL 开发的开发者可以很方便的使用 Hive 进行开发。
2. 数据存储位置。Hive 是建立在 Hadoop 之上的,所有 Hive 的数据都是存储在 HDFS 中的。而数据库
则可以将数据保存在本地文件系统中。
3. 数据格式。Hive 中没有定义专门的数据格式,数据格式可以由用户指定,用户定义数据格式需要指定三
个属性:列分隔符(通常为空格、”\t”、”\x001″)、行分隔符(”\n”)以及读取文件数据的方法(Hive 中默认有三个文件格式 TextFile,SequenceFile 以及 RCFile)。由于在加载数据的过程中,不需要从用户数据格式到 Hive 定义的数据格式的转换,因此,Hive 在加载的过程中不会对数据本身进行任何修改,而只是将数据内容复制或者移动到相应的 HDFS 目录中。而在数据库中,不同的数据库有不同的存储引擎,定义了自己的数据格式。所有数据都会按照一定的组织存储,因此,数据库加载数据的过程会比较耗时。
4. 数据更新。由于 Hive 是针对数据仓库应用设计的,而数据仓库的内容是读多写少的。因此,Hive 中不
支持对数据的改写和添加,所有的数据都是在加载的时候中确定好的。而数据库中的数据通常是需要经常进行修改的,因此可以使用 INSERT INTO ... VALUES 添加数据,使用 UPDATE ...
SET 修改数据。
5. 索引。之前已经说过,Hive 在加载数据的过程中不会对数据进行任何处理,甚至不会对数据进行扫描,
因此也没有对数据中的某些 Key 建立索引。Hive 要访问数据中满足条件的特定值时,需要暴力扫描整个数据,因此访问延迟较高。由于 MapRece 的引入, Hive 可以并行访问数据,因此即使没有索引,对于大数据量的访问,Hive 仍然可以体现出优势。数据库中,通常会针对一个或者几个列建立索引,因此对于少量的特定条件的数据的访问,数据库可以有很高的效率,较低的延迟。由于数据的访问延迟较高,决定了 Hive 不适合在线数据查询。
6. 执行。Hive 中大多数查询的执行是通过 Hadoop 提供的 MapRece 来实现的(类似 select * from tbl
的查询不需要 MapRece)。而数据库通常有自己的执行引擎。
7. 执行延迟。之前提到,Hive 在查询数据的时候,由于没有索引,需要扫描整个表,因此延迟较高。另外
一个导致 Hive 执行延迟高的因素是 MapRece 框架。由于 MapRece 本身具有较高的延迟,因此在利用 MapRece 执行 Hive 查询时,也会有较高的延迟。相对的,数据库的执行延迟较低。当然,这个低是有条件的,即数据规模较小,当数据规模大到超过数据库的处理能力的时候,Hive 的并行计算显然能体现出优势。
8. 可扩展性。由于 Hive 是建立在 Hadoop 之上的,因此 Hive 的可扩展性是和 Hadoop 的可扩展性是
一致的(世界上最大的 Hadoop 集群在 Yahoo!,2009年的规模在 4000 台节点左右)。而数据库由于 ACID 语义的严格限制,扩展行非常有限。目前最先进的并行数据库 Oracle 在理论上的扩展能力也只有 100 台左右。
9. 数据规模。由于 Hive 建立在集群上并可以利用 MapRece 进行并行计算,因此可以支持很大规模的
数据;对应的,数据库可以支持的数据规模较小。
㈢ hive能存储数据吗
能,hive的存储位置是HDFS
㈣ Hbase和Hive在Hadoop中的功能有什么联系他们怎么分别作业的.两个数据库不会有重复信息导致资源浪费吗
简单来说hive用来批量处理数据,HBase用来快速索引数据。
HBase是一个分布式的基于列存储的非关系型数据库。HBase的查询效率很高,主要由于查询和展示结果。
hive是分布式的关系型数据库。主要用来并行分布式 处理 大量数据。hive中的所有查询除了"select * from table;"都是需要通过Map\Rece的方式来执行的。由于要走Map\Rece,即使一个只有1行1列的表,如果不是通过select * from table;方式来查询的,可能也需要8、9秒。但hive比较擅长处理大量数据。当要处理的数据很多,并且Hadoop集群有足够的规模,这时就能体现出它的优势。
通过hive的存储接口,hive和Hbase可以整合使用。参见:http://wenku..com/view/faec57fb04a1b0717fd5dd00.html?st=1
㈤ Hive基础之Hive是什么以及Hive使用场景
Hive是什么
1)Hive 是建立在Hadoop (HDFS/MR)上的用于管理和查询结果化/非结构化的数据仓库;
2)一种可以存储、查询和分析存储在Hadoop 中的大规模数据的机制;
3)Hive 定义了简单的类SQL 查询语言,称为HQL,它允许熟悉SQL 的用户查询数据;
4)允许用Java开发自定义的函数UDF来处理内置无法完成的复杂的分析工作;
5)Hive没有专门的数据格式(分隔符等可以自己灵活的设定);
ETL的流程(Extraction-Transformate-Loading):将关系型数据库的数据抽取到HDFS上,hive作为数据仓库,经过hive的计算分析后,将结果再导入到关系型数据库的过程。
Hive是构建在Hadoop之上的数据仓库
1)使用HQL作为查询接口;
2)使用HDFS作为存储;
3)使用MapRece作为计算;
Hive应用场景
数据源:
1)文件数据,如中国移动某设备每天产生大量固定格式的文件;
2)数据库
以上两种不同的数据源有个共同点:要使用hive,那么必须要将数据放到hive中;通常采用如下两种方式:
1)文件数据:load到hive
2)数据库: sqoop到hive
数据的离线处理;
hive的执行延迟比较高,因为hive常用于数据分析的,对实时性要求不高;
hive优势在于处理大数据,对于处理小数据没有优势,因为hive的执行延迟比较高。
处理数据存放在hive表中,那么前台系统怎么去访问hive的数据呢?
先将hive的处理结果数据转移到关系型数据库中才可以,sqoop就是执行导入导出的操作
㈥ clickhouse能取代hive吗
可以的
ClickHouse是一个用于联机分析(OLAP)的列式数据库管理系统(DBMS)。由号称“俄罗斯 Google”的Yandex开发而来,在2016年开源,在计算引擎里算是一个后起之秀,在内存数据库领域号称是最快的。由于它有几倍于GreenPlum等引擎的性能优势,所以不少人都选择将其安装云服务器中使用。
ClickHouse是一个列导向数据库,是原生的向量化执行引擎。它在大数据领域没有走Hadoop生态,而是采用Local attached storage作为存储,这样整个IO可能就没有Hadoop那一套的局限。它的系统在生产环境中可以应用到比较大的规模,因为它的线性扩展能力和可靠性保障能够原生支持shard+replication这种解决方案。它还提供了一些SQL直接接口,有比较丰富的原生client。
以下是ClickHouse作为分析型数据库的特点:
一. 速度快
ClickHouse性能超过了市面上大部分的列式存储数据库,相比传统的数据ClickHouse要快100-1000倍,ClickHouse还是有非常大的优势。
100Million 数据集:
ClickHouse比Vertica约快5倍,比Hive快279倍,比MySQL快801倍。
1Billion 数据集:
ClickHouse比Vertica约快5倍,MySQL和Hive已经无法完成任务了。
二. 功能多
ClickHouse支持数据统计分析各种场景:
1.支持类SQL查询;
2.支持繁多库函数(例如IP转化,URL分析等,预估计算/HyperLoglog等);
3.支持数组(Array)和嵌套数据结构(Nested Data Structure);
4.支持数据库异地复制部署。
三. 文艺范
不理睬Hadoop生态,走自己的路。目前任何具有x86_64,AArch64或PowerPC64LE CPU架构的Linux,FreeBSD或Mac OS X上运行。
而ClickHouse的缺点:
1.不支持Transaction:想快就别想Transaction;
2.聚合结果必须小于一台机器的内存大小:不是大问题;
3.缺少完整的Update/Delete操作;
4.支持有限操作系统。
㈦ hive的几种文件格式
hive文件存储格式包括以下几类:
1、TEXTFILE
2、SEQUENCEFILE
3、RCFILE
4、ORCFILE(0.11以后出现)
其中TEXTFILE为默认格式,建表时不指定默认为这个格式,导入数据时会直接把数据文件拷贝到hdfs上不进行处理;
SEQUENCEFILE,RCFILE,ORCFILE格式的表不能直接从本地文件导入数据,数据要先导入到textfile格式的表中, 然后再从表中用insert导入SequenceFile,RCFile,ORCFile表中。
前提创建环境:
hive 0.8
创建一张testfile_table表,格式为textfile。
create table if not exists testfile_table( site string, url string, pv bigint, label string) row format delimited fields terminated by ' ' stored as textfile;
load data local inpath '/app/weibo.txt' overwrite into table textfile_table;
一、TEXTFILE
默认格式,数据不做压缩,磁盘开销大,数据解析开销大。
可结合Gzip、Bzip2使用(系统自动检查,执行查询时自动解压),但使用这种方式,hive不会对数据进行切分,
从而无法对数据进行并行操作。
示例:
总结:
相比TEXTFILE和SEQUENCEFILE,RCFILE由于列式存储方式,数据加载时性能消耗较大,但是具有较好的压缩比和查询响应。数据仓库的特点是一次写入、多次读取,因此,整体来看,RCFILE相比其余两种格式具有较明显的优势。
㈧ 究竟是什么让Redshift比Hive快10倍
究竟是什么原因产生了如此悬殊的速度,有网友在Quora上提出了这个问题,并得到了Reynold Xin的解答:
Redshift采用了专有的叫做ParAccel的并行数据库实现机制。我想在很多工作情境中,你会发现大多数并行数据库引擎要比Hive快。接下来,我将给出答案,并解释其中的某些原因。请注意的是,虽然该答案针对的是ParAccel,其中的大部分因素也适用于Vertica、Greenplum、OracleRAC等并行数据库。
在答案中呢,我将使用三个可互换的术语“并行数据库”、“关系型数据库”和“分析型数据库”。
比起并行数据库,Hive在可扩展性、灵活度方面遥遥领先。例如,Facebook使用Hive数据仓库跨越成千上万个节点。说起灵活度,Hive设计的初衷是与一些系列存储系统(HDFS、HBase、S3)配合使用,并能够支持多种输入格式(压缩、未压缩、Avro、纯文本、JSON)。
易扩展和高灵活度在给你带来便利的同时,却也阻碍了你构建性能更好的查询引擎。接下来,我将列举哪些特征会影响查询性能:
数据格式:数据以类似纯文本文件,相对未优化的形式存储在HDFS中。Hive 作业在处理数据之前,需要先花大量时间从硬盘中读取数据,再反序列化这些数据。
发起任务的系统开销:Hadoop MapRece 使用心跳机制(heartbeats)制定作业计划,每项任务作为一独立的JVM过程发起。在Hadoop MapRece 中,仅仅是发起一项作业就需要几十秒钟,在秒级时间单位内,是无法运行任何进程的。相反,并行数据库拥有持续进程或线程池,它们能够大大减少任务安排及发起所需要的系统开销。
中间数据物化 vs数据传输:Hive 使用拥有二阶模型(Map和Rece)的MapRece来执行。通常一个复杂的SQL查询被映射为MapRece的多个阶段,不同阶段的中间数据在硬盘上物化。并行数据库内置有用于执行SQL查询的引擎,执行查询时,该引擎在查询操作符和数据流(steram data)之间跨节点传递数据。
列数据格式:列数据库将数据按照列式的格式进行存储。在典型的数据仓库中,每张数据表能够存储成百上千列,而大多数查询仅查找少数列。让我们来考虑一下如下查询,要查找的是沃尔玛每家店的营业额。它仅需要查找两三列(商店的编号、每件商品的零售价,或者还有销售日期)。以列式存储数据,执行查询时,引擎可以跳过不相关的列。这样可以减少上百次的硬盘I/O。此外,按列存储数据能够大大增加压缩比率。
列查询引擎:除了上面提到的按列式存储的数据格式,还可以按列构建查询执行引擎,该引擎在分析型工作负载方面得到了较好的优化。其中的技巧包括:晚期物化(late materialization)、直接操作压缩过的数据、利用现代CPU提供的向量化操作(SIMD)。
更快的S3连接:在这里我将给出一个大胆的猜测:AWS可能已经为他们的Redshift实例实现了一个比普通S3能够提供的更高带宽的S3整体负载。
我需要申明,我们刚刚讨论的这些因素是基于Hive当前版本(2013年2月)。毫无置疑,Hive社区将会推进开发工作,并解决其中的一些难题。
㈨ hive 行存储和列存储数据哪个执行快
定义
元数据最本质、最抽象的定义为:data about data (关于数据的数据)。它是一种广泛存在的现象,在许多领域有其具体的定义和应用。
在数据仓库领域中,元数据被定义为:描述数据及其环境的数据。一般来说,它有两方面的用途。首先,元数据能提供基于用户的信息,如记录数据项的业务描述信息的元数据能帮助用户使用数据。其次,元数据能支持系统对数据的管理和维护,如关于数据项存储方法的元数据能支持系统以最有效的方式访问数据。具体来说,在数据仓库系统中,元数据机制主要支持以下五类系统管理功能:(1)描述哪些数据在数据仓库中;(2)定义要进入数据仓库中的数据和从数据仓库中产生的数据;(3)记录根据业务事件发生而随之进行的数据抽取工作时间安排;(4)记录并检测系统数据一致性的要求和执行情况;(5)衡量数据质量。
在软件构造领域,元数据被定义为:在程序中不是被加工的对象,而是通过其值的改变来改变程序的行为的数据。它在运行过程中起着以解释方式控制程序行为的作用。在程序的不同位置配置不同值的元数据,就可以得到与原来等价的程序行为。
在图书馆与信息界,元数据被定义为:提供关于信息资源或数据的一种结构化的数据,是对信息资源的结构化的描述。其作用为:描述信息资源或数据本身的特征和属性,规定数字化信息的组织,具有定位、发现、证明、评估、选择等功能。
此外,元数据在地理界,生命科学界等顶域也有其相应的定义和应用。
元数据(Meta Data)是关于数据仓库的数据,指在数据仓库建设过程中所产生的有关数据源定义,目标定义,转换规则等相关的关键数据。同时元数据还包含关于数据含义的商业信息,所有这些信息都应当妥善保存,并很好地管理。为数据仓库的发展和使用提供方便。
元数据是一种二进制信息,用以对存储在公共语言运行库可移植可执行文件 (PE) 文件或存储在内存中的程序进行描述。将您的代码编译为 PE 文件时,便会将元数据插入到该文件的一部分中,而将代码转换为 microsoft 中间语言 (msil) 并将其插入到该文件的另一部分中。在模块或程序集中定义和引用的每个类型和成员都将在元数据中进行说明。当执行代码时,运行库将元数据加载到内存中,并引用它来发现有关代码的类、成员、继承等信息。
元数据以非特定语言的方式描述在代码中定义的每一类型和成员。元数据存储以下信息:
程序集的说明。
标识(名称、版本、区域性、公钥)。
导出的类型。
该程序集所依赖的其他程序集。
运行所需的安全权限。
类型的说明。
名称、可见性、基类和实现的接口。
成员(方法、字段、属性、事件、嵌套的类型)。
属性。
修饰类型和成员的其他说明性元素。
㈩ Hive是什么,Hive与关系型数据库的区别
全不同应用场景吧,HBase 速度比 Hive 快了不知道多少。HBase 是非关系型数据库(KV型), 对 key 做索引,查询速度非常快(相比较 Hive ),适合实时查询;而Hive是关系型数据结构,适合做后期数据分析。和单机的MySQL,Oracle比较的话,Hive的优点是可以存储海量数据,只是查询速度比较慢。