日期:2014-05-16  浏览次数:20345 次

hadoop hive 资料

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

Hive 没有专门的数据格式。 Hive 可以很好的工作在 Thrift 之上,控制分隔符,也允许用户指定数据格式。



Hive 资源

Hive 本身提供了较丰富的文档,以下链接提供了 Hive 的一些基础文档:

FaceBook 镜像(被墙):[[http://mirror.facebook.com/facebook/hive]]

Wiki 页面:[[http://wiki.apache.org/hadoop/Hive]]

入门指南:[[http://wiki.apache.org/hadoop/Hive/GettingStarted]]

查询语言指南:[[http://wiki.apache.org/hadoop/Hive/HiveQL]]

演示文稿:[[http://wiki.apache.org/hadoop/Hive/Presentations]]

蓝图:[[http://wiki.apache.org/hadoop/Hive/Roadmap]]

hive使用速查手册(HQL)
hive, hql
1: http://wiki.apache.org/hadoop/Hive/LanguageManual
介绍基本的hive SQL (HQL)


2:http://wiki.apache.org/hadoop/Hive/GettingStarted
hive的GettingStarted手册


3: https://svn.apache.org/repos/asf/hadoop/hive/trunk/ql/src/test/
有足够多的HQL例子让你学习滴
4.hive结构剖析:
hive随谈:http://luobeng.blogbus.com/logs/104934611.html

==========================================================

Hive 的下载配置安装

请参考入门指南, 这里给出最基本的提纲:



安装配置 Hadoop。安装配置数据库(mysql 等)。获得 Hive 源码或者可执行代码。wget http://www.apache.org/dist/hadoop/hive/hive-0.5.0/hive-0.5.0-bin.tar.gztar xzf hive-0.5.0-bin.tar.gzcd hive-0.5.0配置 Hive 如何访问数据库,如何访问 Hadoop。运行 Hive。

当看到 Hive 提示符‘Hive>’的时候,恭喜,你可以开始你的 Hive 之旅了。



Hive 体系结构

Hive 的结构如图所示,



在streaming作业中用-file选项运行一个分布式的超大可执行文件(例如,3.6G)时,我得到了一个错误信息“No space left on device”。如何解决?

配置变量stream.tmpdir指定了一个目录,在这个目录下要进行打jar包的操作。stream.tmpdir的默认值是/tmp,你需要将这个值设置为一个有更大空间的目录:

-jobconf stream.tmpdir=/export/bigspace/...

如何设置多个输入目录?

可以使用多个-input选项设置多个输入目录:

hadoop jar hadoop-streaming.jar -input '/user/foo/dir1' -input '/user/foo/dir2'





主要分为以下几个部分:



用户接口,包括 CLI,Client,WUI。元数据存储,通常是存储在关系数据库如 mysql, derby 中。解释器、编译器、优化器、执行器。Hadoop:用 HDFS 进行存储,利用 MapReduce 进行计算。用户接口主要有三个:CLI,Client 和 WUI。其中最常用的是 CLI,Cli 启动的时候,会同时启动一个 Hive 副本。Client 是 Hive 的客户端,用户连接至 Hive Server。在启动 Client 模式的时候,需要指出 Hive Server 所在节点,并且在该节点启动 Hive Server。 WUI 是通过浏览器访问 Hive。Hive 将元数据存储在数据库中,如 mysql、derby。Hive 中的元数据包括表的名字,表的列和分区及其属性,表的属性(是否为外部表等),表的数据所在目录等。解释器、编译器、优化器完成 HQL 查询语句从词法分析、语法分析、编译、优化以及查询计划的生成。生成的查询计划存储在 HDFS 中,并在随后有 MapReduce 调用执行。Hive 的数据存储在 HDFS 中,大部分的查询由 MapReduce 完成(包含 * 的查询,比如 select * from tbl 不会生成 MapRedcue 任务)。Hive 元数据存储

Hive 将元数据存储在 RDBMS 中,有三种模式可以连接到数据库:



Single User Mode: 此模式连接到一个 In-memory 的数据库 Derby,一般用于 Unit Test。Multi User Mode:通过网络连接到一个数据库中,是最经常使用到的模式。Remote Server Mode:用于非 Java 客户端访问元数据库,在服务器端启动一个 MetaStoreServer,客户端利用 Thrift 协议通过 MetaStoreServer 访问元数据库。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=CABuckets 对指定列计算 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-00020External Table 指向已经在 HDFS 中存在的数据,可以创建 Partition。它和 Table 在元数据的组织上是相同的,而实际数据的存储则有较大的差异。Table 的创建过程和数据加载过程(这两个过程可以在同一个语句中完成),在加载数据的过程中,实际数据会被移动到数据仓库目录中;之后对数