Apache Hive
Last updated
Last updated
该文档介绍如何运行,以能够在不同存储层将Hive的表格存储到Alluxio当中。
开始之前你需要安装好Java,同时使用或构建好Alluxio。
接着。
在Hadoop MapReduce上运行Hive之前,请按照的指示来确保MapReduce可以运行在Alluxio上。
我们建议您从Alluxio下载压缩包。或者,高级用户可以选择按照的说明来从源码编译这个客户端jar。Alluxio客户端jar可以在{{site.ALLUXIO_CLIENT_JAR_PATH}}
找到。
在shell或conf/hive-env.sh
中设置HIVE_AUX_JARS_PATH
:
有不同的方法可以将Hive与Alluxio整合。这一节讨论的是如何将Alluxio作为文件系统的一员(像HDFS)来存储Hive表。这些表可以是,新创建的表或HDFS中已存在的表。 建议:接下来所有的Hive命令行例子同样适用于Hive Beeline。你可以在Beeline shell中尝试这些例子
Hive可以使用存储在Alluxio中的文件来创建新表。设置非常直接并且独立于其他的Hive表。一个示例就是将频繁使用的Hive表存在Alluxio上,从而通过直接从内存中读文件获得高吞吐量和低延迟。
然后创建新的内部表:
与前面的例子做同样的设置,然后创建一个新的外部表:
区别是Hive会管理内部表的生命周期。 当你删除内部表,Hive会从Alluxio中将表的元数据以及数据文件都删掉。
现在你可以查询创建的表
我们假设属性hive.metastore.warehouse.dir
设置为默认值/user/hive/warehouse
, 并且内部表已经像这样创建:
下面的HiveQL语句会将表数据的存储位置从HDFS转移到Alluxio中
验证表的位置是否设置正确:
注意,第一次访问alluxio://master_hostname:port/user/hive/warehouse/u_user
中的文件时会被认为是访问hdfs://namenode:port/user/hive/warehouse/u_user
(默认的Hive内部数据存储位置)中对应的文件;一旦数据缓存在Alluxio中,在接下来的查询中Alluxio会使用这些缓存数据来服务查询而不用再一次从HDFS中读取数据。整个过程对于Hive和用户是透明的。
假设在Hive中有一个已存在的外部表u_user
,存储位置设置为hdfs://namenode_hostname:port/ml-100k
. 你可以使用下面的HiveQL语句来检查它的"位置"属性
然后使用下面的HiveQL语句将表数据的存储位置从HDFS转移到Alluxio中:
在上面的两个关于将转移表数据的存储位置至Alluxio的例子中,你也可以将表的存储位置恢复到HDFS中:
修改分区表的过程与修改非分区表非常相似,不同的地方在于除了改变表位置之外,我们还需要修改所有分区的分区位置。请参阅以下示例:
Apache Hive也可以使用Alluxio,只需通过一个一般的文件系统接口来替换Hadoop文件系统使用Alluxio。这种方式下,Hive使用Alluxio作为其默认文件系统,它的元数据和中间结果都将存储在Alluxio上。
添加以下配置项到你的Hive安装目下的conf
目录里的hive-site.xml
中:
若要启用容错模式,请在类路径中的alluxio-site.properties
文件中适当地设置Alluxio群集属性(请参见下面的示例)。
或者,您可以将属性添加到Hivehive-site.xml
配置中,然后将其传播到Alluxio。
如果你有其他需要对Hive指定的Alluxio配置属性,将它们添加到每个结点的Hadoop配置目录下core-site.xml
中。例如,将alluxio.user.file.writetype.default
属性由默认的MUST_CACHE
修改成CACHE_THROUGH
:
在Alluxio中为Hive创建相应目录:
在Hive中创建表并且将本地文件加载到Hive中:
在浏览器中输入http://master_hostname:port
以访问Alluxio Web UI,你可以看到相应文件夹以及Hive创建的文件:

你可以在命令行中看到相应查询结果:

这里有一个示例展示了在Alluxio上创建Hive的内部表。你可以从下载数据文件(如:ml-100k.zip
)。然后接下该文件,并且将文件u.user
上传到Alluxio的ml-100k/
下:
当Hive已经在使用并且管理着存储在HDFS中的表时,只要HDFS安装为Alluxio的底层存储系统,Alluxio也可以为Hive中的这些表提供服务。在这个例子中,我们假设HDFS集群已经安装为Alluxio根目录下的底层存储系统(例如,在conf/alluxio-site.properties
中设置属性alluxio.master.mount.table.root.ufs=hdfs://namenode:port/
)。请参考以获取更多关于安装操作的细节。
接着你可以根据来使用Hive了。
依然使用来自的数据文件ml-100k.zip
。