龙空技术网

apache Hive介绍

二十岁背包 106

前言:

而今朋友们对“apachehive”可能比较关怀,各位老铁们都需要知道一些“apachehive”的相关文章。那么小编也在网络上收集了一些关于“apachehive””的相关知识,希望朋友们能喜欢,看官们一起来学习一下吧!

1.hive 基本介绍:

Hive 是建立在 Hadoop 上的数据仓库基础构架。它提供了一系列的工具,可以用来进行数据提取转化加载(ETL ),这是一种可以存储、查询和分析存储在 Hadoop 中的大规模数据的机制。Hive 定义了简单的类 SQL 查询语言,称为 HQL ,它允许熟悉 SQL 的用户查询数据。同时,这个语言也允许熟悉 MapReduce 开发者的开发自定义的 mapper 和 reducer 来处理内建的 mapper 和 reducer 无法完成的复杂的分析工作。

Hive是SQL解析引擎,它将SQL语句转译成M/R Job然后在Hadoop执行。

Hive的表其实就是HDFS的目录,按表名把文件夹分开。如果是分区表,则分区值是子文件夹,可以直接在M/R Job里使用这些数据。

2.hive的数据存储

Hive四类数据模型:表(table),外部表(external table),分区(partition), 桶(Bucket)。

2.1.表:

与数据库中的 Table 在概念上是类似

每一个 Table 在 Hive 中都有一个相应的目录存储数据。例如,一个表 test,它在 HDFS 中的路径为:/$warehouse/test。 $warehouse是在 hive-site.xml 中由 ${hive.metastore.warehouse.dir} 指定的数据仓库的目录

所有的 Table 数据(不包括 External Table)都保存在这个目录中。

删除表时,元数据与数据都会被删除

例:

创建数据文件inner_table.dat

创建表

hive>create table inner_table (key string);

加载数据

hive>load data local inpath '/root/inner_table.dat' into table inner_table;

查看数据

select * from inner_table

select count(*) from inner_table

删除表 drop table inner_table

2.2.分区:

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

2.3.桶:

桶对指定列进行哈希(hash)计算时,根据哈希切分数据,每个桶对应一个文件。

2.4.外部表:

外部表指向已经在hdfs中存在的数据,也可以创建分区。外部表和表在元数据的组织上是相同的,但是实际数据的存储存在较大差异。

3.hive的元数据存储

由于hive的元数据会不断更新、修改和读取。

单用户模式: 此模式连接到一个in-memory 数据库Derby

多用户模式: 通过网络连接到一个数据库中(如:mysql)

远程sever模式: 用户非java客户端访问元数据,在服务端启动一个metastoreserver,客户端利用Thrift协议通过metastoreserver。

注意:Derby引擎的缺点:一次只能打开一个会话,

使用Mysql作为外置存储引擎,多用户同时访问。

4.hive 的组件与体系结构

4.1.用户接口主要有三个:CLI,JDBC/ODBC和 WebUI

CLI,即Shell命令行

JDBC/ODBC 是 Hive 的Java,与使用传统数据库JDBC的方式类似.

WebGUI是通过浏览器访问 Hive.

4.2.Hive 将元数据存储在数据库中(metastore),目前只支持 mysql、derby。Hive 中的元数据包括表的名字,表的列和分区及其属性,表的属性(是否为外部表等),表的数据所在目录等

4.3.解释器、编译器、优化器完成 HQL 查询语句从词法分析、语法分析、编译、优化以及查询计划(plan)的生成。生成的查询计划存储在 HDFS 中,并在随后有 MapReduce 调用执行

4.4.Hive 的数据存储在 HDFS 中,大部分的查询由 MapReduce 完成(包含 * 的查询,比如 select * from table 不会生成 MapRedcue 任务)

5:Hive与传统数据库对比

6: hive的图形化界面

7.hive的运行模式

Hive的运行模式即任务的执行环境

分为本地与集群两种

我们可以通过mapred.job.tracker 来指明

设置方式:

hive > SET mapred.job.tracker=local;

8.hive的三种启动方式

8.1、hive 命令行模式,直接输入#/hive/bin/hive的执行程序,或者输入 #hive --service cli

8.2、 hive web界面的 (端口号9999) 启动方式

#hive --service hwi &

用于通过浏览器来访问hive

8.3、 hive thrift远程服务 (端口号10000) 启动方式

#hive --service hiveserver &

标签: #apachehive