当前位置:首页 » 服务存储 » hive默认的元数据存储引擎
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

hive默认的元数据存储引擎

发布时间: 2022-10-01 05:12:05

A. Hive是什么

此外,hive也支持熟悉map-rece的开发者使用map-rece程序对数据做更加复杂的分析。 hive可以很好的结合thrift和控制分隔符,也支持用户自定义分隔符。 hive基于hadoop,hadoop是批处理系统,不能保存低延迟,因此,hive的查询也不能保证低延迟。 hive的工作模式是:提交一个任务,等到任务结束时被通知,而不是实时查询。相对应的是,类似于Oracle这样的系统当运行于小数据集的时候,响应非常快,可当处理的数据集非常大的时候,可能需要数小时。需要说明的是,hive即使在很小的数据集上运行,也可能需要数分钟才能完成。 低延迟不是hive追求的首要目标。

B. 程序中的Hive具体是干什么用的呢

Hive是基于Hadoop平台的数仓工具,具有海量数据存储、水平可扩展、离线批量处理的优点,解决了传统关系型数仓不能支持海量数据存储、水平可扩展性差等问题,但是由于Hive数据存储和数据处理是依赖于HDFS和MapRece,因此在Hive进行数据离线批量处理时,需将查询语言先转换成MR任务,由MR批量处理返回结果,所以Hive没法满足数据实时查询分析的需求。
Hive是由FaceBook研发并开源,当时FaceBook使用Oracle作为数仓,由于数据量越来越大,Oracle数仓性能越来越差,没法实现海量数据的离线批量分析,因此基于Hadoop研发Hive,并开源给Apacha。
由于Hive不能实现数据实时查询交互,Hbase可提供实时在线查询能力,因此Hive和Hbase形成了良性互补。Hbase因为其海量数据存储、水平扩展、批量数据处理等优点,也得到了广泛应用。
Pig与HIVE工具类似,都可以用类sql语言对数据进行处理。但是他们应用场景有区别,Pig用于数据仓库数据的ETL,HIVE用于数仓数据分析。
从架构图当中,可看出Hive并没有完成数据的存储和处理,它是由HDFS完成数据存储,MR完成数据处理,其只是提供了用户查询语言的能力。Hive支持类sql语言,这种SQL称为Hivesql。用户可用Hivesql语言查询,其驱动可将Hivesql语言转换成MR任务,完成数据处理。
【Hive的访问接口】
CLI:是hive提供的命令行工具
HWI:是Hive的web访问接口
JDBC/ODBC:是两种的标准的应用程序编程访问接口
Thrift Server:提供异构语言,进行远程RPC调用Hive的能力。
因此Hiv具备丰富的访问接口能力,几乎能满足各种开发应用场景需求。
【Driver】
是HIVE比较核心的驱动模块,包含编译器、优化器、执行器,职责为把用户输入的Hivesql转换成MR数据处理任务
【Metastore】
是HIVE的元数据存储模块,数据的访问和查找,必须要先访问元数据。Hive中的元数据一般使用单独的关系型数据库存储,常用的是Mysql,为了确保高可用,Mysql元数据库还需主备部署。
架构图上面Karmasphere、Hue、Qubole也是访问HIVE的工具,其中Qubole可远程访问HIVE,相当于HIVE作为一种公有云服务,用户可通过互联网访问Hive服务。
Hive在使用过程中出现了一些不稳定问题,由此发展出了Hive HA机制,

C. 数据仓库软件hive的计算引擎采用的是什么答案是什么

Hive是搭建在Hadoop之上的一个SQL引擎,它把SQL转换成MapRece在Hadoop上执行,底层存储采用HDFS,计算引擎当然是MapRece了。不过现在Hive也支持设置计算引擎为spark和tez。

D. hive,impala,kfk,hbase,mitaka的关系是怎样的

hbase在三者中更注重的是存储,它实现了类似mysql的double write机制,但是它是一种NoSQL的数据库,并且是可以支持列式存储的,算是比较大的一个内存Hash表。hbase也采用了类似mysql中的mvcc的思想通过时间戳来做版本控制。
hbase是在hdfs基础之上的,可以算是数据的一种组织方式,是一种基于hadoop的分布式数据库系统。从数据库的角度来说,与mysql处在同一个层次,都是基于文件系统之上的管理数据的一种方法。
hbase作为面向列的数据库,支持按列读取和行读取,并解决了关系型数据库的分表的一些需求,如:关系型数据库中有些表的列重复数据太多了,需要重新建表来存重复列的数据,减少表的大小。

hive和impala则更偏向于查询分析,impala需要依赖hive的元数据,它们都有自己的查询分析引擎,只是impala是纯查询分析引擎。
hive 本身并不执行任务的分析过程,而是推给了maprece,这点与impala大不同,hive本身提供了数据的格式化输出功能,但是hive转换的mr可能不是最高效的,调优方式有限,很多复杂的算法没有办法表达,毕竟sql的语义表达能力有限。
hive与impala在查询分析这部分,hive明显的支持程度要比impala高,提供了很多内部函数,并且支持UDAF,UDF的方式
从数据库特性角度来看,hive与hbase的对比,hive不能修改数据,只能追加的方式,hbase允许增加和删除数据,hive不支持索引,impala和hive都是没有存储引擎的,hbase算是有自己的存储引擎。
在使用层面上来看,hive在使用上更像数据库,它提供非常丰富的系统函数,各种数据的操作,hbase在这方面就不太像一般的关系型数据库,它还是一个key-val的NoSQL,这方面的操作支持很有限,impala在这方面也是比较弱。
在计算模型层面上来看,hive是通过MR来计算的,这是一个偏向挪动数据到mr的计算节点来计算的模型,而impala则更多的是移动计算需求到DN上来做,数据不用动,最后变成了本地的磁盘IO。

E. sqoop 导入数据到hive 为什么生成本地元数据库

导入数据
设置HADOOP_HOME
$ HADOOP_HOME=/path/to/some/hadoop sqoop import --arguments...
下载合适的Sqoop并解压到硬盘,所谓合适即Sqoop的版本应该和Hadoop的版本相匹配。笔者的Hadoop版本是1.03,下载的Sqoop是版本1.4.2。
$ tar zvxf sqoop-1.4.2.bin__hadoop-1.0.0.tar.gz

下载合适的JDBC驱动,将下载的JDBC的驱动放到Sqoop的lib文件夹下。
导入数据
$ sqoop import --hive-import --connect jdbc:oracle:thin:@192.168.56.111:1521:DBNAME --username USERNAME --password PASSWORD --verbose -m 1 --table TABLENAME
DBNAME:数据库名
USERNAME:用户名
PASSWORD:密码
TABLENAME:表名
-m:导入数据的进程的并发数,默认是4。如果导入的数据不大的话,不妨设置成1,这样导入更快。一般来说Sqoop会使用主键来平均地分割数据。并发导入的时候可以设置相关的分割列等等,具体的做法参考官方的文档。
如果Oracle是安装在远程的电脑上,要确保Sqoop可以ping通Oracle所在的电脑。例如如果Oracle安装在Win7上面,可能需要关闭Win7的防火墙。另外,需要将Oracle配置成可以远程访问的。

注意,用户名和表名应该要是大写的,除非它们在创建的时候是名字是放在引号中的大小写混合的形式。
一个很奇怪的错误
笔者在导入数据的过程中,发现一个问题,就是导入时没有提示任何错误,在HDFS中也看到生成了相关的文件,但是在Hive中使用命令show TABLES时却没有看到新导入的表格。此时有两种解决方案。一种是在Hive中手动地使用CREAT命令创建出表格,然后再SELECT一个,会发现表里有数据了。因此笔者猜测(只是猜测)可能是因为导入之后表格的元数据没有写入到Hive中。笔者查找了相关的资料,发现Hive默认是将元数据存储在derby中,所以笔者考虑将derby换成MySQL。

F. 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 时,仅删除元数据,表中的数据不会真正被删除。

G. hive工作时,数据是存储在mysql还是hdfs

存储的数据都在hdfs,元数据等可能存储于mysql或者deby等

H. hive 的元数据存储在 derby 和 mysql 中有什么区别

定义 元数据最本质、最抽象的定义为:data about data (关于数据的数据)。它是一种广泛存在的现象,在许多领域有其具体的定义和应用。 在数据仓库领域中,元数据被定义为:描述数据及其环境的数据。一般来说,它有两方面的用途。

I. hive使用hadoop的分布式文件系统什么作为存储引擎

使用hdfs作为分布式存储